桶中的对象——分配优化问题

计算科学 优化 算法
2021-12-07 16:42:34

BI表示有限集,让

E:I×BR>0
是一个函数,并且让sbN为了bB被给予。寻找xi,b{0,1}, 为了bBiI最大化
iIbBE(i,b)
受限于:
iIxi,bsbbB,andbBxi,b1iI.

有谁知道我如何解决这个问题?

解释:我们将项目分配给存储桶,其中每个存储桶具有有限的容量 (所有项目具有相同的大小),并且在将项目分配给存储桶时有一个值(好处)IBbsbE(i,b)ib

示例:一所学校有几门课程每个学生只能分配到一门课程;学生对课程有偏好哪些学生应该分配到哪些课程以最大限度地提高幸福感(总和)?BiIiE(i,b)b

2个回答

正如其他人所指出的,只要您的目标函数是线性的,您的问题就是混合整数线性规划的特例。(如果您的目标函数不是线性的,那么它将是一个混合整数非线性程序,我将在下面提出不同的建议。)

我的建议是使用像GAMS(小问题免费试用版)、AMPL(小问题免费试用版)、PuLP(Python,免费)、Coopr(Python,免费)、OSI(C++,免费)这样的软件包,或YALMIP(MATLAB,免费)而不是直接求解器接口,除非您非常清楚要为您的应用程序使用的求解器(并且您可能希望强制潜在用户使用)。

所有这些软件包都更侧重于对您的问题进行建模,并为多个免费和非免费混合整数编程求解器提供接口,这使您可以更自由地尝试选择求解器和高级参数,但代价是速度和记忆力。这种方法还为您提供了相当大的灵活性来尝试替代公式和更高级别的算法(例如 Bender 分解、Dantzig-Wolfe 分解等),求解器不会通过启发式方法为您尝试。(混合整数规划求解器倾向于更多地关注用于生成切割平面、生成额外有效约束和探索分支定界树的启发式算法。)

一旦确定了公式,并且对应用程序的速度和内存要求有所了解,您就可以决定在众多混合整数线性规划求解器中进行选择以解决您的问题。此外,这些求解器中有许多具有多种语言界面。同样,多种因素(便利性、熟悉度、性能要求、项目截止日期)会影响您对语言的选择。

特别值得注意的是COIN集合中的免费开源求解器( CBCSYMPHONYBCP等)、GLPKSCIPLPSOLVE,以及闭源专业软件包CPLEXGurobi您还可以找到一个求解器,该求解器利用了您在上面编写的混合整数线性程序实例的结构。

专业软件包往往比开源求解器快得多,但专业软件包对于非学术人员来说也很昂贵。对于 CPLEX 和 Gurobi,如果您在学术机构,则可以免费获得全功能许可证;这些将使您能够解决非常大的问题实例。CPLEX 和 Gurobi 争夺“最快(混合整数)线性规划求解器”的称号,无论这意味着什么。根据问题结构,自由求解器还可以处理较大的实例;例如,我使用免费求解器来解决具有几千个二进制变量和几千个约束的问题。

它不是一个标准的混合整数程序(假设您将目标系数与相应的变量相乘)?您应该能够使用任何 MIP 求解器(如scip (开源)或Gurobi(学术试用版))来解决它 - 最后是“不大”的实例。