Оптимизатор пульпы Python с минимальным абсолютным значением

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

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

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


person dmitrievanthony    schedule 23.05.2016    source источник
comment
B - это логическая переменная, зачем использовать такое значение, как 10000 или 100000000000?   -  person Holt    schedule 23.05.2016
comment
M следует выбирать как можно меньше (иначе, как вы заметили, вы столкнетесь с серьезными численными проблемами). В вашем случае вы можете рассматривать M как привязку к x, т.е. | x | ‹= M. На практике мы часто знаем хорошую оценку | x |.   -  person Erwin Kalvelagen    schedule 23.05.2016


Ответы (1)


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

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

person Thorsten    schedule 25.05.2016