答案集编程:分组成两组,以便彼此相似的人处于相同的集合中,并且不喜欢=不同的集合

时间:2016-01-30 19:15:49

标签: answer-set-programming clingo

我基本上是接听集编程(CLINGO)的初学者,所以我现在已经尝试了几个小时。

人(A; B; C; d; e; F)。

喜欢(b,e; d,f)。

不喜欢(a,b; c,e)。

彼此喜欢的人必须在同一个集合中,并且不能与他们不喜欢的人在同一个集合中。 所以输出应该是: b,e | a,c,d,f

我知道它背后的逻辑;对它进行分区,以便如果一个元素同时存在。不喜欢,那么它应该在它自己的集合中,而在另一个集合中。但这是声明式编程,所以我不确定如何解决这个问题。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

尝试这个,它应该适合你:

person(a;b;c;d;e;f). 
like(b,e; d,f).
dislike(a,b; c,e).

group(1..2). 

% every person belongs to one group only. 
1{in(S,G): group(G)}1 :- person(S).

% no two persons who do dislike each other are in the same group 
:- in(X, G), in(Y, G), dislike(X,Y). 

#show in/2.

您将得到的结果是:
a& b属于不同的群体。
和c& e属于不同的群体。

您可以获得的结果如下: answer set programming: group into two sets using clingo