如何在suming中使用sum?

问题描述

我有以下数据集:

vertex ( v1 ). vertex ( v2 ). vertex ( v3 ). 
vertex ( v4 ). vertex ( v5 ). vertex ( v6 ). 
vertex ( v7 ). vertex ( v8 ). vertex ( v9 ).
weight ( v1,v2,3). weight ( v1,v3,3). 
weight ( v2,v4,1). weight ( v2,v5,5). 
weight ( v3,3). weight ( v3,v6,4). 
weight ( v4,4). weight ( v4,v7,1). 
weight ( v5,7). weight ( v6,2). 
weight ( v6,v8,2). weight ( v7,v9,3). 
weight ( v8,2). 
target (4). 
threshold (4).

我想满足约束条件

选择N-1个顶点(目标(N))

及其sum中的weight应该小于M(threshold(M))输出所有可满足的条件。我整理了以下代码

%rule    
(A-1) {pick(X,Y) : weight(X,Y,W)} (B-1) :- target(A),target(B).    
total(N) :- N = #sum {W : pick(X,Y),weight(X,W)}     

% limit total weight    
:- total(N),threshold(M),N > M.

#show pick/2.

但是结果只有一个,实际上应该有几个答案。
我不知道原因。

解决方法

total(N) :- N = #sum {W,X,Y : pick(X,Y),weight(X,Y,W); W,Z : pick(X,Z),Z,W) }.