Prolog 如何获得两架飞机之间的最大距离

Prolog 如何获得两架飞机之间的最大距离,prolog,clpfd,Prolog,Clpfd,我希望有人能帮我解决这个问题 我有3架飞机,A,B,C时间间隔是:A[0..12],B[7..18],C[11..23]。现在我需要找到每架飞机一架接一架降落的最佳时间 结果应该是: ?- air_traffic_control(A,B,C). A = 0, B = 11, C = 22. 我现在唯一写的是 air_traffic_control(A,B,C) :- A in 0..12, B in 7..18, C in 11..23, label([A,B,

我希望有人能帮我解决这个问题

我有3架飞机,
A
B
C
时间间隔是:
A[0..12]
B[7..18]
C[11..23]
。现在我需要找到每架飞机一架接一架降落的最佳时间

结果应该是:

?- air_traffic_control(A,B,C).
A = 0,
B = 11,
C = 22.
我现在唯一写的是

air_traffic_control(A,B,C) :-
    A in 0..12,
    B in 7..18,
    C in 11..23,
    label([A,B,C]).

有人能帮我吗?

一旦定义了距离的含义并相应地约束了变量
距离,SWI Prolog允许您使用
标签([max(distance)],[distance])
将其最大化


编辑:在您阐明了如何对此进行建模之后,很容易做到:
=一旦您定义了距离的含义并相应地约束了变量
distance
,SWI Prolog允许您使用
标签([max(distance)],[distance])
将其最大化


编辑:在您阐明了如何对此进行建模之后,很容易做到:
=我想这三者之间的最小距离D应该是:

D =< ((B-A) and D) =< C-B.
D=<((B-A)和D)=
还是我错了?
如果没有,我如何在prolog中编写这个

我想这三个之间的最小距离D应该是:

D =< ((B-A) and D) =< C-B.
D=<((B-A)和D)=
还是我错了?
如果没有,我如何在prolog中编写这个

是的,您只需将D设置为#=这两个距离(A,B)和(B,C),然后将D最大化。hth

是的,您只需将D设置为#=这两个距离(A,B)和(B,C),然后最大化D。hth

不清楚你所说的最大着陆距离是什么意思。我指的是每架飞机着陆的最佳时间。这仍然不能解释你的意思。间隔时间是多少?这里的预期结果是什么?我还是不明白。你不能解释一下你的例子中的结果是什么吗?@Fatalize@twiitedhat想要的是最大化三次着陆之间的时间间隔。这些数字起着时钟的作用。一个好的解决方案是
A=0,B=11,C=22
,因为它的错开时间比(比如)A=0,B=7的错开时间要好,因为它使清理跑道的时间减少了4分钟。不清楚你所说的最大着陆距离是什么意思。我指的是每架飞机着陆的最佳时间。这仍然不能解释你的意思。间隔时间是多少?这里的预期结果是什么?我还是不明白。你不能解释一下你的例子中的结果是什么吗?@Fatalize@twiitedhat想要的是最大化三次着陆之间的时间间隔。这些数字起着时钟的作用。一个很好的解决方案是
A=0,B=11,C=22
,因为它比(比如)A=0,B=7的时间错开时间更好,因为它使清理跑道的时间减少了4分钟。好的,我相应地更新了我的答案。看看是否有帮助。非常感谢这帮了我的忙。你知道我如何在不定义新谓词的情况下标记它吗?。所以,如果我只想知道距离(A,B,C)和返回值?如果你想知道,你可以把所有的代码放在一个谓词中。好的,我相应地更新了我的答案。看看是否有帮助。非常感谢这帮了我的忙。你知道我如何在不定义新谓词的情况下标记它吗?。所以如果我只想知道距离(A,B,C)和返回值,如果你想知道,你可以把所有的代码放在一个谓词中。
?- flights_scheduled(Flights).
Flights = [0, 11, 22] ;
Flights = [0, 11, 23] ;
Flights = [0, 12, 23] ;
Flights = [1, 12, 23] ;
Flights = [0, 10, 20] ;
Flights = [0, 10, 21] ;
Flights = [0, 10, 22] ;
Flights = [0, 10, 23] ;
Flights = [0, 11, 21] ;
Flights = [0, 11, 22] .
D =< ((B-A) and D) =< C-B.