用python做线性规划的几种工具包和入门介绍

依然范特西╮ 提交于 2020-12-17 10:35:25

本文介绍三种常见的python做线性规划的工具包:scipy、pulp、cvxpy,后面2个包也支持整数规划(Integer Program)、01规划(Binary Program)还是混合整数线性规划(MILP)。

一、scipy做线性规划

1、scipy简单介绍

scipy库是个功能很强大的包,可以通过调用optimize.linprog函数解决简单的线性规划:

scipy.optimize.linprog(c, A_ub=None, b_ub=None, A_eq=None, b_eq=None,
bounds=None, method=‘simplex’, callback=None, options=None)

c指的应该是要求最大值的函数的系数数组,A_ub是应该是不等式未知量的系数矩阵,【注意:来这不等式指的是<=的不等式,那如果是>=,就需要乘个负号】。A_eq就是其中等式的未知量系数矩阵了。B_ub就是不等式的右边了,B_eq就是等式右边了。bounds的话,指的就是每个未知量的范围了。

2、案例

题目:
在这里插入图片描述
代码示例:

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)

结果:
在这里插入图片描述

二、pulp工具包

1、pulp简单介绍

Python的scipy库中提供了解简单线性或非线性规划问题,但是不能求解如背包问题的0-1规划问题,或整数规划问题,混合整数规划问题,pulp库可以求解以上类型的问题,并且有更多的通用性,编写程序更自由。
官方有很多案例和教程:
https://coin-or.github.io/pulp/CaseStudies/a_transportation_problem.html#presentation-of-solution-and-analysis

2、案例

pulp官方教程和网上可参看案例比较多,个人推荐下面一篇文章
https://www.jianshu.com/p/9be417cbfebb
里面还有运输问题,指派问题的案例。

三、cvxpy工具包

1、cvxpy简单介绍

CVXPY是一种可以内置于Python中的模型编程语言,解决凸优化问题(整数规划、01规划和混合规划)。它可以自动转化问题为标准形式,调用解法器,解包结果集。cvxpy包相对前面2种算是最专业了,功能也更强大。从安装难度和官方教程就可以看出来。
前面一篇文章介绍了cvxpy的安装。

2、案例

复杂一些的问题,建议参考教程案例里面有大量很复杂的问题案例。我自己使用直接用的是上千变量的外部数据,不适合入门介绍,就不分享了。简单的入门可以参考如下2篇文章:
https://blog.csdn.net/GeekWill/article/details/78836054
使用Python中的cvxpy库解整数规划问题

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!