有限域求解器 fd_minimize/2



我需要最小化Prolog中的谓词。目前我正在使用GNU Prolog Java。我有这个事实

army( Territory,X ).

它说给定的领土有X军队。现在我想找到给定玩家拥有的军队数量最少。所以我在写:

place_army( Player, Territory ):-
    fd_maximize( army(Territory, X), X ),
    owner( Player, Territory ).

口译员说:

java.lang.IllegalArgumentException:目标当前未激活

过了一会儿,我发现了问题:http://www.gprolog.org/manual/gprolog.html#htoc313我认为问题是解释器的 Java 实现没有 FD 求解器。任何提示/解决方法?

有两个不同的系统具有非常相似的名称:

GNU Prolog(

参见gnu-prolog),一个具有开创性CLP(FD)实现的ISO Prolog系统,它采用了这个名称1999-04-19并且正在积极开发 - 最新版本是在一小时前发布的。 fd_minimize/2等都是GNU Prolog的一部分。

然后是一个名为GNU Prolog for Java的最新系统,其最新版本是2010-08-15。

也许这种命名混乱可以解决。

您可以获得与fd_minimize/2提供的findall/3keysort/2谓词相同的结果。

 findall(X-T,army(T,X),B),keysort(B,[MinX-Territory|Cs]),

可以替换

  fd_minimize(army(Territory,X),X),

Territory提供相同的值。

最新更新