Попытка найти нарушенное ограничение в Gurobi - линейное программирование - PullRequest
0 голосов
/ 08 мая 2019

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

1) Свести ограничение к минимуму

2) Ограничение законности (ShiftCodelegality_A_Constraint, ShiftCodelegality_B_Constraint)

3) Ограничение порога (ShiftCodelegality_stra__link__tra__B_L__B_L_B_S_T_L_B)1007 *

Мне нужно выяснить это, добавив дополнительные переменные, такие как Extra_A, Extra_B, Extra_A_Legality, Extra_B_Legality.Чтобы я мог использовать значения этих переменных, чтобы понять, нарушено ли ограничение.

Неизмененный файл LP Может быть неправильным, нужны идеи для реализации

\ Model Shift Processing
\ LP format - for model browsing. Use MPS format to capture full model detail.
Minimize
  0.4 Person_593800_ShiftA + 0.2 Person_593800_ShiftB
Subject To
 Person_593800_Constraint: Person_593800_ShiftA + Person_593800_ShiftB + UNCOV_593800 = 1
 Person_862998_Constraint: Person_862998_ShiftA + Person_862998_ShiftB + UNCOV_862998 = 1
 ShiftCodelegality_A_Constraint: Person_593800_ShiftA + Person_862998_ShiftA
   <= 2
 ShiftCodelegality_B_Constraint: Person_593800_ShiftB + Person_862998_ShiftB
   <= 2
 ShiftCodelegality_A__Threshold_Constraint: Person_593800_ShiftA + Person_862998_ShiftA + UNCOV_ShiftAPOS_0
   = 1
 ShiftCodelegality_B__Threshold_Constraint: Person_593800_ShiftB + Person_862998_ShiftB + UNCOV_ShiftBPOS_0
   = 0
 MinimizedUncoverageConstraint: UNCOV_ShiftAPOS_0
   = 0
 PersonWiseAllocationConstraint: = 0
Bounds
Binaries
 Person_593800_ShiftA Person_593800_ShiftB Person_862998_ShiftA Person_862998_ShiftB UNCOV_593800
 UNCOV_862998 UNCOV_ShiftAPOS_0 UNCOV_ShiftBPOS_0
End

Ниже приведен файл измененного LP

\ Model Shift Processing
\ LP format - for model browsing. Use MPS format to capture full model detail.
Minimize
  0.4 Person_593800_ShiftA + 0.2 Person_593800_ShiftB + 50 Extra_A
Subject To
 Person_593800_Constraint: Person_593800_ShiftA + Person_593800_ShiftB + UNCOV_593800 = 1
 Person_862998_Constraint: Person_862998_ShiftA + Person_862998_ShiftB + UNCOV_862998 = 1
 ShiftCodelegality_A_Constraint: Person_593800_ShiftA + Person_862998_ShiftA + Extra_A
   <= 2
 ShiftCodelegality_B_Constraint: Person_593800_ShiftB + Person_862998_ShiftB + Extra_B
   <= 2
 ShiftCodelegality_A__Threshold_Constraint: Person_593800_ShiftA + Person_862998_ShiftA + UNCOV_ShiftAPOS_0 
   - Extra_A_Legality = 1
 ShiftCodelegality_B__Threshold_Constraint: Person_593800_ShiftB + Person_862998_ShiftB + UNCOV_ShiftBPOS_0
   - Extra_B_Legality = 0
 MinimizedUncoverageConstraint: UNCOV_ShiftAPOS_0 + UNCOV_ShiftBPOS_0
   = 0
 PersonWiseAllocationConstraint: = 0
Bounds
Binaries
 Person_593800_ShiftA Person_593800_ShiftB Person_862998_ShiftA Person_862998_ShiftB UNCOV_593800
 UNCOV_862998 UNCOV_ShiftAPOS_0 UNCOV_ShiftBPOS_0
End
...