CPLEX中整数约束与二进制约束的复杂性

时间:2019-06-30 18:43:48

标签: optimization linear-programming cplex mixed-integer-programming

最近,我一直在尝试学习一些关于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 个答案:

答案 0 :(得分:1)

我同意亚历克斯(Alex)和欧文(Erwin)的评论,即这实际上取决于您要建模的内容。对于这种特定的模型,我不同意Alex的观点:对我而言,每个人使用一个决策变量更有意义,否则可能很难弄清楚哪个人得到了多少馅饼。

添加完整性或SOS约束后,问题就会变得难以解决。一般来说,对于MIP来说,不错的一本书是Alex Schrijver的“整数和线性编程理论”。那应该涵盖您对事物有深入了解所需的所有主题。

答案 1 :(得分:-1)

这实际上取决于情况,但在您的情况下,我将使用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