Finite Domain Solver fd_minimize/2

Мне нужно минимизировать предикат в Прологе. В настоящее время я использую GNU Prolog Java. У меня есть этот факт

army( Territory,X ).

Это говорит о том, что у данной территории есть Х армия. Теперь я хочу найти минимальное количество армий, которыми владеет данный игрок. Итак, я пишу:

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

Переводчик говорит:

java.lang.IllegalArgumentException: цель в настоящее время не активна

Через некоторое время я обнаружил проблему: http://www.gprolog.org/manual/gprolog.html Я предполагаю, что проблема в том, что реализация интерпретатора Java не имеет решателя FD. Любой намек / обходной путь?

2 ответа

Есть две разные системы с очень похожим названием:

GNU Prolog (см. Gnu-prolog), система ISO Prolog с новаторской реализацией CLP(FD), которая получила это название 1999-04-19 и которая активно развивается - самая последняя версия была выпущена час назад. fd_minimize/2 и такие являются частью GNU Prolog.

Кроме того, существует последняя система под названием GNU Prolog for Java, последняя версия которой - 2010-08-15.

Возможно, эта путаница с именами может быть решена.

Вы могли бы достичь того же результата, что fd_minimize/2 обеспечивает с findall/3 а также keysort/2 предикаты.

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

может заменить

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

обеспечивая одинаковое значение для Territory,

Другие вопросы по тегам