SWI Prolog最大化功能似乎不起作用

时间:2014-07-16 15:15:26

标签: prolog swi-prolog clpfd

我是prolog的新手,我在ubuntu上使用swi-prolog来学习。我正在使用clpfd模块来解决工人/产品分配问题。 问题在第7页的this论文中说明。 这是我迄今为止从该论文中得到的内容。

solver(Sol) :- 
   Sol = [A,B,C,D],
   [A,B,C,D] ins 1..4,
   all_distinct(Sol),
   element(A,[7,1,3,4],A1),
   element(B,[8,2,5,1],B1),
   element(C,[4,3,7,2],C1),
   element(D,[3,1,6,3],D1),
   A1 + B1 + C1 + D1 #= E,
   maximize(E,Sol),
   label(Sol).

我无法让maximize工作。它会抛出错误

ERROR: solver/1: Undefined procedure: maximize/2
ERROR:   However, there are definitions for:
ERROR:         maximize/3

有人可以指出为什么maximize功能没有按预期工作或者我应该如何构建它?提前谢谢。

1 个答案:

答案 0 :(得分:4)

在SWI-Prolog中,最大化可用作labeling/2选项。将maximize/2label/1目标替换为:

labeling([max(E)], Sol]

在回溯时,您会按E的递减顺序获得解决方案。