本文介绍三种常见的python作线性规划的工具包:scipy、pulp、cvxpy,后面2个包也支持整数规划(Integer Program)、01规划(Binary Program)仍是混合整数线性规划(MILP)。html
1、scipy作线性规划
一、scipy简单介绍
scipy库是个功能很强大的包,能够经过调用optimize.linprog函数解决简单的线性规划:python
scipy.optimize.linprog(c, A_ub=None, b_ub=None, A_eq=None, b_eq=None,
bounds=None, method=‘simplex’, callback=None, options=None)
git
c指的应该是要求最大值的函数的系数数组,A_ub是应该是不等式未知量的系数矩阵,【注意:来这不等式指的是<=的不等式,那若是是>=,就须要乘个负号】。A_eq就是其中等式的未知量系数矩阵了。B_ub就是不等式的右边了,B_eq就是等式右边了。bounds的话,指的就是每一个未知量的范围了。github
二、案例
题目:
代码示例:
编程
from scipy import optimize as op import numpy as np c=np.array([2,3,-5]) A_ub=np.array([[-2,5,-1],[1,3,1]])#注意是-2,5,-1 B_ub=np.array([-10,12]) A_eq=np.array([[1,1,1]]) B_eq=np.array([7]) # 上限7是根据约束条件1和4得出的 x1=(0,7) x2=(0,7) x3=(0,7) res=op.linprog(-c,A_ub,B_ub,A_eq,B_eq,bounds=(x1,x2,x3)) print(res)
结果:
数组
2、pulp工具包
一、pulp简单介绍
Python的scipy库中提供了解简单线性或非线性规划问题,可是不能求解如背包问题的0-1规划问题,或整数规划问题,混合整数规划问题,pulp库能够求解以上类型的问题,而且有更多的通用性,编写程序更自由。
官方有不少案例和教程:
https://coin-or.github.io/pulp/CaseStudies/a_transportation_problem.html#presentation-of-solution-and-analysis
编程语言
二、案例
pulp官方教程和网上可参看案例比较多,我的推荐下面一篇文章
https://www.jianshu.com/p/9be417cbfebb
里面还有运输问题,指派问题的案例。
函数
3、cvxpy工具包
一、cvxpy简单介绍
CVXPY是一种能够内置于Python中的模型编程语言,解决凸优化问题(整数规划、01规划和混合规划)。它能够自动转化问题为标准形式,调用解法器,解包结果集。cvxpy包相对前面2种算是最专业了,功能也更强大。从安装难度和官方教程就能够看出来。
我前面一篇文章介绍了cvxpy的安装。
工具
二、案例
复杂一些的问题,建议参考教程案例里面有大量很复杂的问题案例。我本身使用直接用的是上千变量的外部数据,不适合入门介绍,就不分享了。简单的入门能够参考以下2篇文章:
https://blog.csdn.net/GeekWill/article/details/78836054
使用Python中的cvxpy库解整数规划问题
优化