gpt4 book ai didi

prolog - SWI-Prolog(clpfd) 中变量值之间的距离最大化

转载 作者:行者123 更新时间:2023-12-02 11:52:30 25 4
gpt4 key购买 nike

我想最大化两个变量之间的差异:

:- use_module(library(clpfd)).
maximize(X) :-
X = [A,B],
X ins 1..5,
% I want to write a constraint to have maximum difference between A and B.

最佳答案

没有限制来表达最大差异。也没有任何限制来表达最大值1。为了允许这样的构造,某种形式的量化是必要的。和/或会出现单调性问题。

但是,有一些相关的事情:您可能希望生成值,以便首先生成最大值:

:- use_module(library(clpfd)).
maximize(Xs) :-
Xs = [A,B],
Xs ins 1..5,
labeling([max(abs(A-B))],Xs).

?- maximize(Xs).
Xs = [1,5]
; Xs = [5,1]
; Xs = [1,4]
; Xs = [2,5]
; Xs = [4,1]
; ... .

所以它从最大距离开始,然后逐一降低。

一开始这种行为可能会让您感到惊讶,但回想一下 what the manual states

Labeling is always complete, always terminates, and yields no redundant solutions.

这是一个非常有力的保证!

如果您现在只想要第一个解决方案,请将 once/1 包裹在 labeling/2 周围,但请记住,您随后离开了纯粹、单调程序的领域.

<小时/>

脚注 1:可以表达两个变量的最大值 max(X,Y) 但这并不将最大值限制为最大可能值!它只是 XY 中的最大值。

关于prolog - SWI-Prolog(clpfd) 中变量值之间的距离最大化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23204899/

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