Оптимизатор пульпы 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 (без каких-либо числовых опасностей, она просто разветвляет их).). И в целом производительность обычно лучше. Не стесняйтесь следить за моим ответом и комментировать вопрос.