LPSolve: модель считается неограниченной, хотя это не так - PullRequest
0 голосов
/ 13 марта 2020

Рассмотрим следующую линейную программу:

max: x;

x + y <= 10;
y >= -10;

Оптимальным решением является x = 20, y = -10 (что также является выходом LPSolve).

Первоначально, я думал всякий раз, когда переменная может иметь отрицательные значения (такие как y в примере), тогда переменная должна быть определена как свободная переменная. Однако

max: x;

x + y <= 10;
y >= -10;
free y;

приводит к "неограниченной модели" в LPSolve. Это не то, что я ожидаю, но хорошо, можно утверждать, что строка "free y;" перезаписывает прежнюю границу y.

Но теперь приходит странная вещь. Когда я ввожу имена ограничений

max: x;

c1: x + y <= 10;
c2: y >= -10;

, тогда LPSolve находит решение x = 10, y = 0, что не является оптимальным, как упомянуто выше, и когда я снова добавляю свободное выражение

max: x;

c1: x + y <= 10;
c2: y >= -10;
free y;

тогда LPSolve дает x = 20, y = 0 как оптимальное решение, которое нарушает ограничение c1.

Кажется, что имена ограничений меняют все. В http://lpsolve.sourceforge.net/5.5/lp-format.htm говорится, что мы не должны помещать имена ограничений перед границами переменных (как y> = - 10), потому что это может испортить время выполнения. Однако, это не должно иметь никакого значения в решении.

Это ошибка или есть что-то, я не понял?

...