Оптимизатор пульпы 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, это не работает. У кого-нибудь возникали такие проблемы?

1 ответ

Решение

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

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

Другие вопросы по тегам