Да, когда lp_solve
выполняет свою предварительную обработку, это полностью устраняет ваши ограничения.Затем тот факт, что X
является двоичным, и функция Objective показана равной 100. (Неверно)
Вы можете увидеть, что это происходит, запустив флаг -stats
:
./lp_solve -stat test.lp
Constraints: 0
Variables : 1
Integers : 1
Semi-cont : 0
SOS : 0
Non-zeros : 0 density=nan%
Это неожиданное поведение может быть вызвано нулевыми ограничениями и наноплотностью.
Для этого есть несколько способов.
Если вы устраните *Ограничение 1015 * в целом, оно решит его правильно и даст вам объективное значение 0.
Еще одно «хакоподобное» исправление - добавить фиктивную переменную в ваше тривиальное ограничение.Теперь все ограничение записывается lp_solve.
Например, попробуйте изменить ваш test.lp
следующим образом:
max: 100X ;
X + x_dummy <= 0 ;
bin X ;
Что теперь дает правильное значение:
Constraints: 1
Variables : 2
Integers : 1
Semi-cont : 0
SOS : 0
Non-zeros : 2 density=100.000000%
Надеюсь, это поможет.