0

Я использую целлюлозу (https://pythonhosted.org/PuLP/) для оптимизации и получаю проблемы. Мне нужно использовать ограничение как abs(x) > MIN и я нашел решение здесь http://lpsolve.sourceforge.net/5.5/absolute.htm, я просто создать два ограничения:Оптимизатор пульпы Python с минимальным абсолютным значением

x + M * B >= MIN 
-x + M * (1 - B) >= MIN 

Где B = 0 или 1 и M достаточно большое значение. Проблема в том, что когда я использую M ~ 10000, все работает отлично, но когда я использую INT_MAX_VALUE или ~ 10000000000, это не работает. У кого-нибудь возникают такие проблемы?

+0

'B' - логическая переменная, почему вы используете значение, например' 10000' или '100000000000'? – Holt

+0

'M' следует выбирать как можно меньше (иначе вы столкнетесь с серьезными числовыми проблемами, как вы заметили). В вашем случае вы можете считать 'M' обязательным для' x', т. Е. | X | <= M. В практических случаях мы часто знаем хорошую оценку на | x |. –

ответ

1

Возможно, вам лучше работать с COIN-CBC. Я видел ваши числовые проблемы в другом сообщении, и, похоже, это просто связано с некоторыми ограничениями VUB.

Сначала LP решатель (CLP) за CBC является более сложным, то GLPK и второй можно использовать SOS ограничения, которые моделируют эти Vub ограничения, которые и хотят использовать для абс-функции mucht лучше (без каких-либо численных опасностей , он просто разветвляет их). И в целом производительность обычно лучше. Не стесняйтесь следить за моим ответом и комментировать вопрос.

Смежные вопросы