有限域解算器fd_minimize / 2

时间:2012-04-26 18:01:02

标签: java prolog clpfd gnu-prolog

我需要最小化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求解器。任何提示/解决方法?

2 个答案:

答案 0 :(得分:2)

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

GNU Prolog(参见),这是一个ISO Prolog系统,具有开创性的CLP(FD)实现,采用此名称1999-04-19并且actively developed - 最新版本已发布一小时前。 fd_minimize/2等等是GNU Prolog的一部分。

最近有一个名为GNU Prolog for Java的系统 - 其最新版本来自2010-08-15

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

答案 1 :(得分:1)

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

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

可以取代

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

Territory提供相同的值。