0
点赞
收藏
分享

微信扫一扫

Python数模笔记-Scipy库(1)线性规划问题

书坊尚 2021-09-28 阅读 63



  Scipy 是 Python默认安装的标准库,可以用于最优化、线性代数、积分、插值、拟合、特殊函数、快速傅里叶变换、信号和图像处理、常微分方程的求解。


欢迎关注 [Youcans 原创系列](https://www.jianshu.com/u/5df8372991c5),数模笔记每周更新

Python数模笔记-PuLP线性规划
Python数模笔记-StatsModels统计回归
Python数模笔记-Sklearn机器学习
Python数模笔记-NetworkX图论
Python数模笔记-模拟退火算法



1、最优化问题建模

最优化问题的三要素是决策变量、目标函数和约束条件。

最优化问题的建模,通常按照以下步骤进行:



2、线性规划

线性规划(Linear programming),是研究线性约束条件下线性目标函数的极值问题的优化方法,常用于解决利用现有的资源得到最优决策的问题。
  线性规划模型的一般形式如下:

其中:fx 是目标函数,求最小值;x1,...xn 是决策变量;aij, bi 是不等式约束的参数。



3、Scipy 求解线性规划

Python 的 SciPy 库带有用于解决线性编程问题的 linprog 函数。
  linporg 函数对于线性规划模型的描述为:

其中:

注意:
  (1)问题表示为:求 fx 的最小值,如果问题要求 fx 的最大值则要通过 fx‘= -fx 将问题转化为求 fx' 的最小值;
  (2)不等式约束条件表示为:小于等于,如果约束条件为大于等于则要通过不等式两侧乘以 -1 将约束条件转化为小于等于的形式。
linporg 函数求解线性规划问题的输出参数为:



4 实例

4.1 问题模型:

    max     fx = 2*x1 + 3*x2 - 5*x3
    s.t.    x1 + x2 + x3 = 7
            2*x1 - 5*x2 + x3 >= 10
            x1 + 3*x2 + x3 <= 12
            x1, x2, x3 >=0

4.2 模型转换:

首先要将求解问题的模型转化为 Linprog 的标准形式:

4.3 python 程序:

import numpy as np  # 导入 numpy
from scipy.optimize import linprog  # 导入 scipy

c = np.array([-2, -3, 5])
A_ub = np.array([[-2, 5, -1], [1, 3, 1]])  # 不等式约束参数矩阵
B_ub = np.array([-10, 12])  # 不等式约束参数向量
A_eq = np.array([[1, 1, 1]])  # 等式约束参数矩阵
B_eq = np.array([7])  # 等式约束参数向量
x1 = (0, 7)  # x1 的取值范围,lb1 < x1 < ub1
x2 = (0, 7)  # x2 的取值范围,lb2 < x2 < ub2
x3 = (0, 7)  # x3 的取值范围,lb3 < x3 < ub3
res = linprog(c, A_ub, B_ub, A_eq, B_eq, bounds=(x1, x2, x3))
print(res)

4.4 运行结果:

     con: array([1.19830306e-08])
     fun: -14.57142854231215
 message: 'Optimization terminated successfully.'
     nit: 5
   slack: array([-3.70231543e-08,  3.85714287e+00])
  status: 0
 success: True
       x: array([6.42857141e+00, 5.71428573e-01, 9.82192085e-10])


版权说明:
YouCans 原创作品
Copyright 2021 YouCans, XUPT
Crated:2021-04-28


欢迎关注 [Youcans 原创系列](https://www.jianshu.com/u/5df8372991c5),数模笔记每周更新

Python数模笔记-PuLP线性规划
Python数模笔记-StatsModels统计回归
Python数模笔记-Sklearn机器学习
Python数模笔记-NetworkX图论
Python数模笔记-模拟退火算法

举报

相关推荐

0 条评论