Полунепрерывный раздел в файле формата 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}
Другие вопросы по тегам