算法选择要应用的规则?

时间:2018-01-30 18:32:28

标签: prolog

假设我有以下规则:

?- assert(test(5,2) :- true).
true.

?- assert(test(5,3) :- true).
true.

?- assert(test(5,4) :- true).
true.

?- test(5,K).
K = 2 ;
K = 3 ;
K = 4.

?- findall(K,test(5,K), L).
L = [2, 3, 4].

我可以找到所有的解决方案。但我想要一些不同的东西。

在这种情况下" 5"是条件,第二个词K是SCORE。

我想找到符合" 5"的所有规则,但能够选择要执行的规则, 基于SCORE。目前最高分数" 4"。

理想情况下,我想获得所有匹配规则的列表,并随机选择一个得分较高的规则。 这意味着我需要将规则作为结构取回,以便我可以通过算法选择其中一个。

我该怎么做?

我想模拟生产系统(IF-THEN规则),其中每个规则都有一个分数。规则的负责人应该扮演IF部分。 在根据分数选择规则之前,不应执行THEN部分!

1 个答案:

答案 0 :(得分:2)

如果我已正确理解您的问题,那么您的出发点就是将clause/2谓词与findall结合使用以获取所有可能的分数,然后找到最大分数并拨打您的{{1} }谓词及其值:

test/2

PS:我假设您使用Swi-Prolog。