Сложность целых и двоичных ограничений в CPLEX - PullRequest
0 голосов
/ 30 июня 2019

В последнее время я пытался немного узнать о CPLEX и надеялся, что кто-нибудь может помочь мне понять сложность при решении целочисленных и двоичных ограничений.

Например, скажем, мы пытаемся выделитьПирог около 10 человек для максимальной полезности, где у каждого человека есть полезность, которая линейна с количеством пирога, который они получают.Однако мы хотим ввести ограничение, согласно которому по крайней мере 3 человека должны получить немного пирога.

В чем разница между представлением об этом как одно целочисленное ограничение (number_of_people_with_pie> = 3) против 10 двоичных переменных(person_1_has_pie + person_2_has_pie + ... person_10_has_pie> = 3)?Я полагаю, что первое является самым простым, но задаюсь вопросом, есть ли какие-либо преимущества в формировании проблемы с точки зрения бинарных переменных?

В дополнение к этому, любое рекомендованное чтение для лучшего понимания MIP и CPLEX будет высоко оценено, особеннов лучшем понимании, где проблема становится NP или в каких ситуациях симплекс пытается найти глобальные минимумы.

Спасибо!

Ответы [ 2 ]

1 голос
/ 01 июля 2019

Я согласен с комментарием Алекса и Эрвина, что это действительно зависит от того, что вы хотите смоделировать. Для этой конкретной модели я не согласен с Алексом: для меня имеет больше смысла использовать одну переменную решения на человека, иначе может быть трудно определить, какой человек получает, сколько пирога.

Проблема становится NP трудной, как только вы добавляете интегральность или ограничения SOS. Хорошим чтением для MIP в целом является «Теория целочисленного и линейного программирования» Алекса Шрайвера. Это должно охватывать все темы, необходимые для глубокого понимания вещей.

0 голосов
/ 01 июля 2019

Это действительно зависит от случая, но в вашем случае я бы использовал 1 переменную решения, а не 10.

Иногда это не очевидно, и попытки и измерения могут доказать, что вы правы или нет. И это одна из причин, почему использование языков высокого моделирования может помочь. (Абстрактные языки моделирования, такие как OPL)

Я рекомендую MOOC для когнитивного класса: https://cognitiveclass.ai/courses/mathematical-optimization-for-business-problems/

и руководство по языку OPL: https://www.ibm.com/support/knowledgecenter/SSSA5P_12.7.0/ilog.odms.studio.help/pdf/opl_languser.pdf

...