Полунепрерывный раздел в файле формата LP, предназначенный для сбоев cbc
Я использую версию 2.9.9 cbc в образе докера ubuntu 17.10. Мой файл test.lp имеет следующее содержимое:
Maximize
obj: x1 + 2 x2 + 3 x3 + x4
Subject To
c1: - x1 + x2 + x3 + 10 x4 <= 20
c2: x1 - 3 x2 + x3 <= 30
c3: x2 - 3.5 x4 = 0
Bounds
0 <= x1 <= 40
2 <= x4 <= 3
General
x4
Semis
x1 x2 x3
При попытке с разделом полуфабрикатов я получаю сообщение об ошибке "прекращается после броска экземпляра 'CoinError?' Отменено"
на Mac я получаю: libC++abi.dylib: завершается с необработанным исключением типа CoinError? Ловушка отмены: 6
Однако, если я закомментирую Semis, он работает нормально. Я надеялся, что полуфиналы поддержат. Я делаю что-то неправильно?
Моя команда: cbc -presolve on -import test.lp solve solu out.txt
При дальнейшем анализе я обнаружил, что в приглашении cbc я набираю "import test.lp", он не работает и показывает ту же ошибку
1 ответ
Читатель файла CBC MPS, кажется, не принимает SC
границы тоже. Я думаю, что CBC на самом деле поддерживает полунепрерывные переменные (я тестировал с небольшой моделью GAMS), но кажется, что это трудно передать в файле LP или MPS. В качестве обходного пути я бы предложил использовать бинарные переменные для моделирования полунепрерывного поведения:
b * L ≤ x ≤ b * U
b in {0,1}