问题描述
我有以下数据集:
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) }.