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

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

Windows 7上安装pulpglpk步骤: 亲测环境: Windows 6.1.7601 Service Pack 1 Build 7601 x64 Python 2.7.11 PuLP 1.6.8 GLPK 4.34 安装步骤: 1、下载PuLP安装包:前提是,已安装python2.6以及2.6以上版本,在网页(https://pythonhosted.org/PuLP/main/installing_pulp_at_home.html)上点击PuLP zipfile下载pulp包,当然,也可以在我的资源里下载 2、安装PuLP:将zipfile解压缩,并在命令行窗口中,进入解压缩的目录,然后输入命令:setup.py install 3、下载glpk安装包:在网页(https://sourceforge.net/projects/gnuwin32/files/glpk/4.34/)上,下载glpk-4.34-setup.exe(也可以在我的资源里下载),然后双击默认安装 4、按照以上步骤,安装完以后,写一个.py的脚本并运行,脚本内容: from pulp import * pulp.pulpTestAll() 然后,会看到以下类似输出结果: D:\002-Task_150524\117-17data_thesis\004-code\testPulp.py Testing zero subtraction Testing inconsistant lp solution Testing continuous LP solution Testing maximize continuous LP solution Testing unbounded continuous LP solution Testing Long Names Testing repeated Names Testing zero constraint Testing zero objective Testing LpVariable (not LpAffineExpression) objective Testing Long lines in LP Testing LpAffineExpression divide Testing MIP solution Testing MIP solution with floats in objective Testing MIP relaxation Testing feasibility problem (no objective) Testing an infeasible problem Testing an integer infeasible problem Testing column based modelling Testing dual variables and slacks reporting Testing fractional constraints Testing elastic constraints (no change) Testing elastic constraints (freebound) Testing elastic constraints (penalty unchanged) Testing elastic constraints (penalty unbounded) * Solver pulp.solvers.PULP_CBC_CMD passed. Solver pulp.solvers.CPLEX_DLL unavailable Solver pulp.solvers.CPLEX_CMD unavailable Solver pulp.solvers.CPLEX_PY unavailable Solver pulp.solvers.COIN_CMD unavailable Solver pulp.solvers.COINMP_DLL unavailable Testing zero subtraction Testing inconsistant lp solut
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值