我是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
函数无法按预期运行,或者我应该如何构建它?提前致谢。 最佳答案
在SWI-Prolog中,最大化可作为labeling/2
选项使用。将maximize/2
和label/1
目标替换为:labeling([max(E)], Sol]
回溯时,您会按照E
的降序获得解决方案。