Как создать многоцелевую модель с объективным приоритетом - PullRequest
1 голос
/ 01 июня 2019

Я пытаюсь решить многоцелевую проблему, в которой мне нужно минимизировать две разные цели, но одна из них имеет приоритет над другой.

Чтобы решить проблему и, следовательно, вопрос, я попытался использовать взвешенную сумму обеих целевых функций. Проблема здесь в том, что этот подход находит минимальное значение между двумя проблемами, которые я не хочу. Я хочу решить одну задачу, а затем, опираясь на эту конкретную ценность, я хочу решить другую проблему.

Ответы [ 2 ]

1 голос
/ 11 июля 2019

Вы можете использовать staticLex.

int nbKids=200;
float costBus40=500;
float costBus30=400;
float costBus50=625;

dvar int+ nbBus40;
dvar int+ nbBus30;
dvar int+ nbBus50;

dvar float cost;
dvar float co2emission;

minimize
  staticLex(cost,co2emission);

subject to
{
 cost==costBus40*nbBus40  +nbBus30*costBus30+nbBus50*costBus50;
 co2emission==nbBus50+nbBus40*1.1+nbBus30*1.2;

  40*nbBus40+nbBus30*30+nbBus50*50>=nbKids;
}

execute DISPLAY_After_SOLVE
{
  writeln("The minimum cost is ",cost);
  writeln("CO2 emission is ",co2emission);
  writeln("We will use ",nbBus40," 40 seats buses ",nbBus30,
  " 30 seats buses and ", nbBus50," buses 50 seats");
}

, что дает

The minimum cost is 2500
CO2 emission is 4
We will use 0 40 seats buses 0 30 seats buses and 4 buses 50 seats 

Я опубликовал этот ответ 5 дней назад, но он был удален модератором.

См.крошечный пример на https://www.ibm.com/developerworks/community/forums/html/topic?id=abac189a-0b99-4a08-bedf-78bbf919e14d

1 голос
/ 11 июля 2019

Версия 12.9 CPLEX имеет возможность сделать именно это: решить одну задачу, зафиксировать ее значение и перейти к следующей цели.Вот пример LP:

Maximize multi-objectives
first: abstol=2
   x1
second: priority=-1
   x2
Subject to
   x1 + x2 = 10
General
   x1 x2
End

Эта функция описана в примечаниях к выпуску , а также в этих слайдах .

...