Как мы можем добавить несколько целей в файл LP для CBC - PullRequest
0 голосов
/ 19 июня 2019

Я пишу проблему в файле LP для решения, и я хочу добавить несколько целей «Максимизировать» и указать приоритет для целей. это возможно?

Я знаю, что могу сделать это с помощью Gurobi, но я хочу попробовать это с CBC.

Добавление модели, которую я могу решить с помощью Gurobi, и я хочу изменить ее для CBC

Maximize multi-objectives
OBJ0: Priority = 2 Weight = 1 AbsTol = 0 RelTol = 0
 +60153 x1_0  +98501 x2_0  +59832 x2_1  +98105 x3_0  +59590 x3_1  +97855 x4_0  +59438 x4_1  +97516 x5_0  +183549 x5_1
 +180420 x5_2  +59232 x5_3  +176339 x5_4  +97473 x6_0  +183467 x6_1  +180340 x6_2  +59206 x6_3  +176261 x6_4

OBJ0: Priority = 1 Weight = 1 AbsTol = 0 RelTol = 0
 +264653 x0_0  +97473 x0_1  +183467 x0_2  +180340 x0_3  +242269 x0_4  +59206 x0_5  +231729 x0_6  +316828 x0_7  +246219 x0_8
 +176261 x0_9  +60153 x1_0  +98501 x2_0  +59832 x2_1  +98105 x3_0  +59590 x3_1  +97855 x4_0  +59438 x4_1  +97516 x5_0
 +183549 x5_1  +180420 x5_2  +59232 x5_3  +176339 x5_4  +97473 x6_0  +183467 x6_1  +180340 x6_2  +59206 x6_3  +176261 x6_4



 Subject To 

c_u_s_pBAN1901269936:  +1 x0_0  <= 1

c_u_s_pBAN1902271890:  +1 x0_1  +1 x2_0  +1 x3_0  +1 x4_0  +1 x5_0  +1 x6_0  <= 1

c_u_s_pBRU1902273490:  +1 x0_2  +1 x5_1  +1 x6_1  <= 1 

c_u_s_pDVR1902272038:  +1 x0_3  +1 x5_2  +1 x6_2  <= 1

c_u_s_pEAS1902272263:  +1 x0_4  <= 1

c_u_s_pFAL1902274223:  +1 x0_5  +1 x1_0  +1 x2_1  +1 x3_1  +1 x4_1  +1 x5_3  +1 x6_3  <= 1

c_u_s_pHAM1901268632:  +1 x0_6  <= 1

c_u_s_pLAN1807249790:  +1 x0_7  <= 1

c_u_s_pLCN1901271076:  +1 x0_8  <= 1

c_u_s_pMBG1901271624:  +1 x0_9  +1 x5_4  +1 x6_4  <= 1



c_u_HB_0:  -25136.3 x0_0  -9269.4 x0_1  -17379.4 x0_2  -17084.8 x0_3  -22919.1 x0_4  -5645.8 x0_5  -22092.4 x0_6  -29966.9 x0_7  
-23467.1 x0_8   -16692 x0_9  <= 0

c_u_LB_1:  -56458 x1_0  +1000000 MinBal1 <= 0
c_u_LB_BigM_1:  +56458 x1_0  -66458.00 MinBal1 <= 0

c_u_LB_2:  -92694 x2_0  -56458 x2_1  +1000000 MinBal2 <= 0
c_u_LB_BigM_2:  +92694 x2_0  +56458 x2_1  -159152.00 MinBal2 <= 0

c_u_LB_3:  -92694 x3_0  -56458 x3_1  +1000000 MinBal3 <= 0

c_u_LB_BigM_3:  +92694 x3_0  +56458 x3_1  -159152.00 MinBal3 <= 0

c_u_LB_4:  -92694 x4_0  -56458 x4_1  +1000000 MinBal4 <= 0

c_u_LB_BigM_4:  +92694 x4_0  +56458 x4_1  -159152.00 MinBal4 <= 0

c_u_LB_5:  -92694 x5_0  -173794 x5_1  -170848 x5_2  -56458 x5_3  -166920 x5_4  +1000000 MinBal5 <= 0

c_u_LB_BigM_5:  +92694 x5_0  +173794 x5_1  +170848 x5_2  +56458 x5_3  +166920 x5_4  -670714.00 MinBal5 <= 0

c_u_LB_6:  -92694 x6_0  -173794 x6_1  -170848 x6_2  -56458 x6_3  -166920 x6_4  +1000000 MinBal6 <= 0

c_u_LB_BigM_6:  +92694 x6_0  +173794 x6_1  +170848 x6_2  +56458 x6_3  +166920 x6_4  -670714.00 MinBal6 <= 0


end

Все переменные являются двоичными.

1 Ответ

0 голосов
/ 20 июня 2019

Не в моих силах.Однако реализовать алгоритм лексикографического поиска чрезвычайно просто.

First solve for the first objective.
Then make a constraint out of this (with some wiggle room).
Then solve for the second objective.
etc.

Детали немного зависят от того, какой API / инструмент моделирования используется.

...