Две целевые функции - PullRequest
       6

Две целевые функции

1 голос
/ 19 мая 2019

Если у нас в Eclipse CLP есть две целевые функции, которые Cost1 важнее, чем Cost2, верно ли следующее?

minimize(minimize(labeling(Vars), Cost1), Costs2).

1 Ответ

1 голос
/ 19 мая 2019

Да, это работает, при условии, что вы указываете внутреннему минимизации для вычисления всех оптимальных решений, а не только первого (используйте вариант 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)
...