【python数据分析】用scipy.optimize.linprog实现线性规划

简介: 本篇为用scipy.optimize.linprog线性规划。


因为近期要参加一个建模比赛,没有安装MATLAB,所以熟悉下算法的python实现,本篇为用scipy.optimize.linprog线性规划。

函数文档参考scipy.optimize.linprog — SciPy v1.8.0 Manual

线性规划主要解决下面这种问题:
$$ \min_{x}c^Tx\\ s.t.\begin{cases} Ax \leq b \\ A_{eq}x = b_{eq} \\ l \leq x \leq u \end{cases} $$
(不是这样的形式要转化一下,如求最大值)

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和b_ub对应线性不等式约束;A_eq和b_eq对应线性等式约束;bounds对应公式中的lb和ub,决策向量的下界和上界;method是求解器的类型,如单纯形法;其他的参数暂时不用。

例题1:
$$ minf = -1 \times x_{0} + 4 \times x_{1} \\ s.t.\begin{cases} -3 \times x_{0}+1\times x_{1} \leq 6\\ 1\times x_{0}+2\times x_{1} \leq 4\\ x_{1} \ge -3 \end{cases} $$

用scipy.optimize.linprog计算

from scipy.optimize import linprog
C = [-1,4] 
A = [[-3,1],[1,2]]
b = [6,4]
X0_bounds = [None,None]
X1_bounds = [-3,None]
res = linprog(C,A,b,bounds=(X0_bounds,X1_bounds))
print(res)
     fun: -22.0
 message: 'Optimization terminated successfully.'
     nit: 1
   slack: array([39.,  0.])
  status: 0
 success: True
       x: array([10., -3.])

最优解为-22,x0=10,x1=-3.

例题2:

如果是求最大值

$$ maxf = -1 \times x_{0} + 4 \times x_{1} \\ s.t.\begin{cases} -3 \times x_{0}+1\times x_{1} \leq 6\\ 1\times x_{0}+2\times x_{1} \leq 4\\ x_{1} \ge -3 \end{cases} $$

我们转化为

$$ min-f = -1 \times x_{0} + 4 \times x_{1} \\ s.t.\begin{cases} -3 \times x_{0}+1\times x_{1} \leq 6\\ 1\times x_{0}+2\times x_{1} \leq 4\\ x_{1} \ge -3 \end{cases} $$

用scipy.optimize.linprog计算

from scipy.optimize import linprog
C = [1,-4] 
A = [[-3,1],[1,2]]
b = [6,4]
X0_bounds = [None,None]
X1_bounds = [-3,None]
res = linprog(C,A,b,bounds=(X0_bounds,X1_bounds))
print(res)
     fun: -11.428571428571429
 message: 'Optimization terminated successfully.'
     nit: 2
   slack: array([0., 0.])
  status: 0
 success: True
       x: array([-1.14285714,  2.57142857])

最优解为11.428571428571429,x0=-1.14285714,x1=2.57142857。

相关文章
|
2天前
|
数据采集 数据可视化 数据挖掘
数据分析大神养成记:Python+Pandas+Matplotlib助你飞跃!
【6月更文挑战第12天】在数字时代,Python因其强大的数据处理能力和易用性成为数据分析首选工具。结合Pandas(用于高效数据处理)和Matplotlib(用于数据可视化),能助你成为数据分析专家。Python处理数据预处理、分析和可视化,Pandas的DataFrame简化表格数据操作,Matplotlib则提供丰富图表展示数据。掌握这三个库,数据分析之路将更加畅通无阻。
|
3天前
|
JSON 数据挖掘 API
数据分析实战丨基于pygal与requests分析GitHub最受欢迎的Python库
数据分析实战丨基于pygal与requests分析GitHub最受欢迎的Python库
10 2
|
4天前
|
数据采集 数据可视化 数据挖掘
如何快速上手 Python,成为一名数据分析师
【6月更文挑战第10天】学习Python是成为数据分析师的关键。首先,掌握基本语法和数据结构,如变量、控制结构及列表、字典等。然后,学习NumPy、Pandas和Matplotlib库:NumPy用于数组计算,Pandas处理和分析数据,Matplotlib进行数据可视化。不断实践项目,从简单分析任务做起,并保持学习新技能的热情,关注技术动态。通过系统学习和实践,可迅速踏上数据分析师之路。
|
4天前
|
机器学习/深度学习 数据可视化 数据挖掘
python每日可视化分析:从过去到现代数据分析的演进
python每日可视化分析:从过去到现代数据分析的演进
|
12天前
|
Python 数据挖掘 数据可视化
Python数据分析——Pandas与Jupyter Notebook
【6月更文挑战第1天】 本文探讨了如何使用Python的Pandas库和Jupyter Notebook进行数据分析。首先,介绍了安装和设置步骤,然后展示了如何使用Pandas的DataFrame进行数据加载、清洗和基本分析。接着,通过Jupyter Notebook的交互式环境,演示了数据分析和可视化,包括直方图的创建。文章还涉及数据清洗,如处理缺失值,并展示了如何进行高级数据分析,如数据分组和聚合。此外,还提供了将分析结果导出到文件的方法。通过销售数据的完整案例,详细说明了从加载数据到可视化和结果导出的全过程。最后,讨论了进一步的分析和可视化技巧,如销售额趋势、产品销售排名和区域分布,以及
32 2
|
16天前
|
存储 并行计算 数据挖掘
Python中的NumPy库:科学计算与数据分析的基石
Python中的NumPy库:科学计算与数据分析的基石
66 0
|
17天前
|
数据采集 XML 数据可视化
使用Python进行简单的网页与数据分析
使用Python进行简单的网页与数据分析
60 0
|
17天前
|
数据采集 机器学习/深度学习 数据可视化
使用Python进行简单的数据分析与可视化
使用Python进行简单的数据分析与可视化
98 0
|
17天前
|
数据采集 数据挖掘 数据处理
Python数据分析实战:使用Pandas处理Excel文件
Python数据分析实战:使用Pandas处理Excel文件
95 0
|
17天前
|
数据采集 SQL 数据可视化
使用Python和Pandas库进行数据分析的入门指南
使用Python和Pandas库进行数据分析的入门指南
77 0