Да, это работает, при условии, что вы указываете внутреннему минимизации для вычисления всех оптимальных решений, а не только первого (используйте вариант minimize
bb_min / 3 ):
:- lib(ic).
:- lib(branch_and_bound).
minmin(X, Y) :-
[X,Y] #:: 1..4,
Cost1 #= -2*X,
Cost2 #= -Y,
bb_min(
bb_min(
labeling([X,Y]),
Cost1,
bb_options{solutions:all}
),
Cost2,
bb_options{solutions:one}
).
Оперативное поведение состоит в том, что сначала Cost1
минимизируется (игнорируя Cost2
), затем Cost2
минимизируется (с фиксированным Cost1
на минимуме):
?- minmin(X, Y).
Found a solution with cost -2
Found a solution with cost -4
Found a solution with cost -6
Found a solution with cost -8
Found a solution with cost -1
Found a solution with cost -2
Found a solution with cost -3
Found a solution with cost -4
X = 4
Y = 4
Yes (0.00s cpu)