Рассмотрим следующую линейную программу:
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), потому что это может испортить время выполнения. Однако, это не должно иметь никакого значения в решении.
Это ошибка или есть что-то, я не понял?