【问题标题】:Aggregates in clingo在 clgo 中聚合
【发布时间】:2015-04-30 17:39:20
【问题描述】:

我已经生成了:

curr(p5,2) curr(p5,1) curr(p5,6)

激光场2+1+6如何总结?

我在 cligo_guild.pdf 的第 21 页看到了以下内容:

15 :- not M-2 [ enroll(C) : hours(C,H) = H ] M, max_hours(M).

然后上来:

#sum [pick(P) : curr(P,I) = I].

但我明白了:

ERROR: unstratified predicate in:
bus3.lp:73:2: #sum[pick(P)=I:curr(P,I)].
bus3.lp:73:17: curr/2

我正在使用 clgo 3.0.4。感谢您的帮助。

【问题讨论】:

    标签: answer-set-programming clingo


    【解决方案1】:

    我假设您需要每个“pick”的总数,并且我假设 pick 定义为

    pick(P) :- curr(P, _).
    

    您应该在代码中说明您的意思。在您引用的 cligo3 指南案例中,这不是必需的。

    在 cligo3 中:

    % clingo3
    curr(p4,2). curr(p4,2). curr(p4,6).
    curr(p5,2). curr(p5,1). curr(p5,6).
    
    pick(P) :- curr(P, _).
    % for each pick P, sum all I from matching curr(P, I)
    totals(P, S) :- S = #sum[ curr(P,I) = I ], pick(P).
    
    #hide.
    #show totals/2.
    

    而在 cligo4 中,它使用更一致的方式来表达这些:

    % clingo4
    % ...
    totals(P, S) :- S = #sum{ I : curr(P,I)}, pick(P).
    #show totals/2.
    

    【讨论】:

      【解决方案2】:
      curr(p5,2). curr(p5,1). curr(p5,6).
      
      sum(S) :- S = #sum{Y: curr(X,Y)}.
      

      输出:

      clingo version 5.0.0
      Solving...
      Answer: 1
      curr(p5,2) curr(p5,1) curr(p5,6) sum(9)
      SATISFIABLE
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-21
        • 1970-01-01
        • 1970-01-01
        • 2017-09-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多