gpt4 book ai didi

PROLOG CLPFD 如何通过约束来表达?

转载 作者:行者123 更新时间:2023-12-04 14:28:27 27 4
gpt4 key购买 nike

给出以下代码示例:

example(Ls) :-
Ls = [X,Y],
Ls ins 1..2,
Cost #= max((X #= 1)*3 + (Y #= 1)*5,
(X #= 2)*3 + (Y #= 2)*5),
labeling([minimize(Cost)], Ls).

这个想法是找到最小化成本的 Ls 变量的分配(在这个简单的例子中,它可能是 X=1 和 Y=2,或者 X=2 和 Y=1)。

我试图利用约束 #=/2 是可具体化的事实,这意味着将它们的真值反射(reflect)为由整数 0 和 1 表示的 bool 值。(取自手册 http://www.swi-prolog.org/man/clpfd.html )。

但是,它不起作用。我收到以下错误:
ERROR: Domain error: `clpfd_expression' expected, found `_G3154#=1'

什么是等效的正确版本?

最佳答案

具体化涉及单独的约束( #<==>/2#==>/2 等),您可以使用它们,例如:

example(Ls) :-
Ls = [X,Y],
Ls ins 1..2,
X #= 1 #<==> B1,
Y #= 1 #<==> B2,
X #= 2 #<==> B3,
Y #= 2 #<==> B4,
Cost #= max(B1*3 + B2*5, B3*3 + B4*5),
labeling([min(Cost)], Ls).

示例查询及其结果:
?- example(Ls).
Ls = [1, 2] ;
Ls = [2, 1] ;
Ls = [1, 1] ;
Ls = [2, 2] ;
false.

关于PROLOG CLPFD 如何通过约束来表达?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21075317/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com