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

本文介绍三种常见的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库解整数规划问题

优化

相关文章
相关标签/搜索