Clingo 是不可满足的(强制所有组合),即使它不应该是

问题描述 投票:0回答:1

在这个 Clingo 程序中,我定义有 2 辆车、2 个地块,并且存在由地块和汽车组成的分配,但 Clingo 强制所有可能的分配组合,而不是仅仅允许它们。

以下代码不可满足:

parcel(1,a,1,110).
parcel(2,b,1,90).

%Define car predicate
car(1).
car(2).

%Define assign predicate
assign(P,C) :- parcel(P,_,_,_), car(C).
not assign(1,1).

即使我删除最后一行并添加:

1 {car(C): assign(P,C)} 1 :- parcel(P,_,_,_).

规定每个包裹必须有一辆汽车,这仍然不能令人满意。 这是没有意义的,因为第一个 Clingo 代码仅将“分配”定义为具有包裹和汽车的谓词,而不是所有可能的组合。

prolog answer-set-programming clingo gringo
1个回答
0
投票

如果我正确理解了您的问题,您可以删除最后两行并添加

1{assign(P,C) : car(C)}1 :- parcel(P,_,_,_).

现在您得到 4 个答案集,应该可以解决您的问题

Answer: 1
car(1) car(2) parcel(1,a,1,110) parcel(2,b,1,90) assign(1,2) assign(2,1)
Answer: 2
car(1) car(2) parcel(1,a,1,110) parcel(2,b,1,90) assign(1,2) assign(2,2)
Answer: 3
car(1) car(2) parcel(1,a,1,110) parcel(2,b,1,90) assign(1,1) assign(2,1)
Answer: 4
car(1) car(2) parcel(1,a,1,110) parcel(2,b,1,90) assign(1,1) assign(2,2)
SATISFIABLE
© www.soinside.com 2019 - 2024. All rights reserved.