我有以下数据集:
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.
但结果只有一个,其实应该有几个答案。
我不知道原因。