模型已求解到最优
第0个可行解的目标函数值为20.0
x1=3.0,x2=1.0
第1个可行解的目标函数值为30.0
x1=0.0,x2=6.0
1.1 为什么会有整数规划?
线性规划问题的最优解可能是分数或小数。整数规划是指变量的取值只能是整数的规划。
这在实际问题中很常见,例如车间人数、设备台数、行驶次数,这些变量显然必须取整数解。
整数规划并不一定是线性规划问题的变量取整限制,对于二次规划、非线性规划问题也有.
摘要:当前大多使用Matlab解决运筹学中的整数规划问题,鲜有人使用Python解决类似问题。本文使用Python中cvxpy库,求解整数规划问题,并对问题过程进行总结。
关键词:python;整数规划;cvxpy
前面介绍的割平面法和分支定界法都是求解整数规划的常用方法,但是面对大规模整数规划/混合整数规划,往往直接采用割平面法和分支定界法求解是不现实的,这时候就需要对大规模整数规划/混合整数规划问题先进行分解和松弛,然后再进一步采用割平面法和分支定界法来帮助求解。目前我个人总结整数规划问题的分解/松弛的主流的方法有如下三种:
1 Benders decomposition (主要思想是行生成+割平面方法)
2 Dantzig-Wolfe decomposition (主要思想其实就是列生成)
3 Lagr
混合0-1整数规划不同于普通的线性规划问题,它要求存在决策变量均为整数,且只能取值0或1;同时存在有些决策变量为整数,不限制取值为0或1;有些决策变量不限定为整数。
一、混合0-1整数规划问题举例
下图是一个混合0-1整数规划问题,我们通过python的Pulp库来实现该问题的求解。
二、Pulp构造与求解
1.例题实现
from pulp import *
转自知乎:https://zhuanlan.zhihu.com/p/159270139
TSP问题包含两个重要的约束。约束1:进入点i的次数与从点i出发的次数相等,且次数为1;约束2:消除子回路约束。
对于TSP问题,图1和图2所示路径都满足约束条件1,但只有图1是正确的路径(仅仅有一个回路,TSP问题的特点);而像图2将一个回路拆成了两个及两个以上的回路情况,将每个回路称为子回路,需要建立合适的约束条件来消除此种情况,即约束条件2。
VRP问题本身存在多条回路,但是对于每一辆车所服
但其实不是的。
model.optimize()的完整形式是model.optimize(callback=none),既我们没有赋予括号中任何信息。但其实callback功能十分强大,在后期实现分支定价,分支切割算法的时候经常用。
callback可以实现监视,干预,也就是部分程度和gurobi求解器实现交流交互,管理gurobi的优化进程。更多callback的分析可以看gurobi自带的参考资料,即refman.pdf文件。
混合整数线性规划是一种数学问题,它在线性约束条件下寻求线性目标函数的最优解。在混合整数线性规划中,决策变量部分是整数,而不要求全部都是整数。混合整数线性规划问题通常比线性规划问题更难求解。在求解过程中,可以使用分支定界法、割平面法等方法,将问题划分为子问题,并调用线性规划(LP)求解模块进行求解。\[2\]
Python提供了一些库来实现混合整数线性规划,其中一个常用的库是docplex。docplex库提供了MIP(Mixed Integer Programming)的Python实现。使用docplex库可以方便地解决混合整数线性规划问题。\[2\]
需要注意的是,大多数广泛使用的线性规划和混合整数线性规划库都是使用Fortran、C或C++原生编写的。这是因为线性规划需要进行计算密集型的矩阵计算。Python工具只是这些求解器的包装器。\[3\]
#### 引用[.reference_title]
- *1* [混合整数规划MIP/线性规划LP+python(cplex库)实现 附代码](https://blog.csdn.net/qq_34107425/article/details/104046037)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* [MindOpt对于混合整数线性规划问题如何建模优化(python语言)](https://blog.csdn.net/MindOpt_003/article/details/128446505)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item]
- *3* [万字教你如何用 Python 实现线性规划](https://blog.csdn.net/devcloud/article/details/121990568)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]