-1

我有以下数据集:

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 , v4 ,3). weight ( v3 , v6 ,4). 
weight ( v4 , v5 ,4). weight ( v4 , v7 ,1). 
weight ( v5 , v7 ,7). weight ( v6 , v7 ,2). 
weight ( v6 , v8 ,2). weight ( v7 , v9 ,3). 
weight ( v8 , v9 ,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,Y,W)}     

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

#show pick/2.

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

4

1 回答 1

0
total(N) :- N = #sum {W,X,Y : pick(X,Y), weight(X,Y,W); W,X,Z : pick(X,Z), weight(X,Z,W) }.
于 2020-11-10T01:09:01.357 回答