Answer set programming 在Clingo中求和多个值
我正在计算clingo中多个字段的总和:Answer set programming 在Clingo中求和多个值,answer-set-programming,clingo,Answer Set Programming,Clingo,我正在计算clingo中多个字段的总和: x(1,2,3). x(4,5,6). x(7,8,9). y(A,B,C) :- A = #sum { A1, B1, C1 : x(A1,B1,C1) }, B = #sum { B1, A1, C1 : x(A1,B1,C1) }, C = #sum { C1, A1, B1 : x(A1,B1,C1) }. 这很有效。输出为: x(1,2,3) x(4,5,6) x(7,8,9) y(12,15,18) 然而,这是乏
x(1,2,3).
x(4,5,6).
x(7,8,9).
y(A,B,C) :-
A = #sum { A1, B1, C1 : x(A1,B1,C1) },
B = #sum { B1, A1, C1 : x(A1,B1,C1) },
C = #sum { C1, A1, B1 : x(A1,B1,C1) }.
这很有效。输出为:
x(1,2,3) x(4,5,6) x(7,8,9) y(12,15,18)
然而,这是乏味的。我非常希望一次将它们汇总(非工作):
输出为:
test.lp:10:30-38: info: tuple ignored:
(1,2,3)
test.lp:10:30-38: info: tuple ignored:
(4,5,6)
test.lp:10:30-38: info: tuple ignored:
(7,8,9)
有没有办法简化我的第一种方法?简化你的方法,而不是:
y(A,B,C) :-
A = #sum { A1, B1, C1 : x(A1,B1,C1) },
B = #sum { B1, A1, C1 : x(A1,B1,C1) },
C = #sum { C1, A1, B1 : x(A1,B1,C1) }.
您可以简单地执行以下操作:
y(A, B, C) :- A = #sum{(X) : x(X,_,_)}, B = #sum{(X) : x(_,X,_)}, C = #sum{(X) : x(_,_,X)}.
输出:
y(A, B, C) :- A = #sum{(X) : x(X,_,_)}, B = #sum{(X) : x(_,X,_)}, C = #sum{(X) : x(_,_,X)}.