gpt4 book ai didi

random - 概率条款选择

转载 作者:行者123 更新时间:2023-12-04 02:46:15 31 4
gpt4 key购买 nike

自从我认真使用 Prolog 以来已经有很长一段时间了,但我无法通过谷歌搜索或在我的文本中找到任何相关引用。这可能是术语的错误,所以如果我屠杀它,我深表歉意。

如果我有一个可以有多个解决方案的程序:

likes(mary, joe).
likes(bob, joe).

:- likes(X, joe)

是否有一种简单的内置方法可以让求解器以随机顺序运行匹配谓词,从而以随机顺序给出结果(或者,等价地,让第一个解决方案是随机的)?

显然,随机 这个词可以随心所欲地变得复杂。我正在考虑在求解器的每一步从有效谓词集中进行一些统一的随机抽样。一些更复杂的东西,比如对有效的解决方案进行均匀随机抽样也可以。这个问题很普遍。

我或许可以构建一个程序来执行此操作,使用随机数生成器和元编程。但我想检查一下我是否遗漏了一些简单的东西。

最佳答案

匹配子句的线性选择是 Prolog 算法(或更好的 SLD resolution)的重要组成部分。每场比赛都是一个候选解决方案。我认为您不能指望 Prolog 本身会为您随机化子句顺序。

我会详细说明 mat 的回答:

:- meta_predicate randomize_preds(0).

randomize_preds(C) :-
findall(C, retract(C), Cs),
random_permutation(Cs, Rs),
maplist(assertz, Rs).

:- dynamic likes/2.

likes(alice, joe).
likes(bob, joe).
likes(charlie, joe).
likes(dan, joe).

测试:

3 ?- randomize_preds(likes(_,_)),findall(X,likes(X,joe),L).
L = [bob, alice, charlie, dan].

4 ?- randomize_preds(likes(_,_)),findall(X,likes(X,joe),L).
L = [alice, bob, dan, charlie].

关于random - 概率条款选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18799616/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com