【问题标题】:Answer Set Programming: Group into two sets so that those who like each other are in same set, and dislike = different set答案集编程:分成两组,使彼此喜欢的人在同一个集合中,不喜欢的人=不同的集合
【发布时间】:2016-01-30 19:15:49
【问题描述】:

我基本上是答案集编程 (CLINGO) 的初学者,所以我已经尝试这个问题好几个小时了。

人(a;b;c;d;e;f)。

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

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

喜欢的人必须在同一个集合,不能和不喜欢的人在同一个集合。 所以输出应该是: b,e | a, c, d, f

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

【问题讨论】:

    标签: answer-set-programming clingo


    【解决方案1】:

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

    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 在不同的组中。

    你能得到的结果是这样的:

    【讨论】:

      猜你喜欢
      • 2012-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多