scipy.optimize.linprog函数

  • 1、线性规划概念
  • 2、输入格式
  • 3、参数设置:
  • 4、输出格式:
  • 5、例子
  • 6、若有更多Python的问题,请挪步“佐佑思维”公众号→回复免费
  • 7、 ★佐佑思维二维码★

1、线性规划概念

定义:在线性等式和不等式约束下,最小化线性目标函数。

minxcTxs.t.Aubx≤bub,Aeqx=beq,l≤x≤u\underset{x}{min}\ c^{T}x\\ s.t. \ A_{ub}x \le b_{ub},\\ A_{eq}x = b_{eq},\\ l \le x \le u xmin​ cTxs.t. Aub​x≤bub​,Aeq​x=beq​,l≤x≤u
其中 x 是决策变量的向量;cbubbeqlu是向量;和AubA_{ub}Aub​、AeqA_{eq}Aeq​是矩阵。

2、输入格式

scipy.optimize.linprog(c,A_ub=None,b_ub=None,A_eq=None,b_eq=None,bounds=None,method='interior-point',callback=None,options=None,x0=None)​

3、参数设置:

  • c:线性目标函数的系数

    • 数据类型:一维数组
  • A_ub(可选参数):不等式约束矩阵,AubA_{ub}Aub​的每一行指定xxx上的线性不等式约束的系数

    • 数据类型:二维数组
  • b_ub(可选参数):不等式约束向量,每个元素代表AubxA_{ub}xAub​x的上限

    • 数据类型:一维数组
  • A_eq(可选参数):等式约束矩阵,AeqA_eqAe​q的每一行指定xxx上的线性等式约束的系数

    • 数据类型:二维数组
  • b_eq(可选参数):等式约束向量,AeqxA_{eq}xAeq​x的每个元素必须等于beqb_{eq}beq​的对应元素

    • 数据类型:一维数组
  • bounds(可选参数):定义决策变量xxx的最小值和最大值

    • 数据类型: (min, max)序列对
    • None:使用None表示没有界限,默认情况下,界限为(0,None)(所有决策变量均为非负数)
    • 如果提供一个元组(min, max),则最小值和最大值将用作所有决策变量的界限。
  • method(可选参数):算法,{‘interior-point’, ‘revised simplex’, ‘simplex’}以上三种算法可选

    • 数据类型:输入如上三种字符串
  • callback(可选参数):调用回调函数,我的理解是等待被调用的参数 ,如果提供了回调函数,则算法的每次迭代将至少调用一次。回调函数必须接受单个 scipy.optimize.OptimizeResult由以下字段组成:

    • x:当前解向量

      • 数据类型:一维数组
    • fun:目标函数的当前值(cTxc^TxcTx)
      • 数据类型:浮点数
    • success:当算法成功完成时为 True
      • 数据类型:布尔值
    • slack:不等式约束的松弛值(名义上为正值)bub−Aubxb_{ub}-A_{ub}xbub​−Aub​x
    • 数据类型:一维数组
    • con:等式约束的残差(名义上为零)beq−Aeqxb_{eq}-A_{eq}xbeq​−Aeq​x
    • 数据类型:一维数组
    • phase:正在执行算法的阶段
    • 数据类型:整数
    • status:表示算法退出状态的整数

      • 数据类型:整数

      • 0 : 优化按名义进行

        1 : 达到了迭代限制

        2 : 问题似乎不可行

        3 : 问题似乎是不收敛

        4 : 遇到数值困难

    • nit:当前的迭代次数

    • 数据类型:整数
    • message:算法状态的字符串描述符

      • 数据类型:字符串
  • options(可选参数):求解器选项字典,所有方法都接受以下选项:

    • 数据类型:字典

    • maxiter:整数,要执行的最大迭代次数

      disp:布尔值,设置为True以打印收敛消息,默认值:False

      autoscale:布尔值,设置为True以自动执行平衡,如果约束中的数值分开几个数量级,请考虑使用此选项,默认值:False

      presolve:布尔值,设置为False可禁用自动预解析,默认值:True

      rr:布尔值,设置为False可禁用自动移除冗余,默认值:True

  • x0(可选参数):猜测决策变量的值,将通过优化算法进行优化。当前仅由’ revised simplex’ 方法使用此参数,并且仅当 x0 表示基本可行的解决方案时才可以使用此参数。

    • 数据类型:一维数组

4、输出格式:

  • x:在满足约束的情况下将目标函数最小化的决策变量的值

    • 数据类型:一维数组
  • fun:目标函数的最佳值(cTxc^TxcTx)

    • 数据类型:浮点数
  • slack:不等式约束的松弛值(名义上为正值)bub−Aubxb_{ub}-A_{ub}xbub​−Aub​x

    • 数据类型:一维数组
  • con:等式约束的残差(名义上为零)beq−Aeqxb_{eq}-A_{eq}xbeq​−Aeq​x

    • 数据类型:一维数组
  • success:当算法成功找到最佳解决方案时为 True

    • 数据类型:布尔值
  • status:表示算法退出状态的整数

    • 数据类型:整数

    • 0 : 优化成功终止

      1 : 达到了迭代限制

      2 : 问题似乎不可行

      3 : 问题似乎是不收敛

      4 : 遇到数值困难

  • nit:在所有阶段中执行的迭代总数

    • 数据类型:整数
  • message:算法退出状态的字符串描述符

    • 数据类型:字符串

5、例子

import scipy
from scipy import optimize
import numpy
c = numpy.array([2,3]) #最值等式未知数系数矩阵
A_ub = numpy.array([[-1,1],[2,-2]]) #<=不等式左侧未知数系数矩阵
B_ub = numpy.array([1,1]) #<=不等式右侧常数矩阵
#A_eq = numpy.array() 等式左侧未知数系数矩阵
#B_eq = numpy.array() 等式右侧常数矩阵
x = (None,1) #未知数取值范围
y = (None,None) #未知数取值范围
res = scipy.optimize.linprog(c,A_ub,B_ub,bounds = (x,y)) #默认求解最小值,求解最大值使用-c并取结果相反数
print(res)
#结果:无解情况con: array([], dtype=float64)fun: -8782091626.64441message: 'The algorithm terminated successfully and determined that the problem is unbounded.'#算法成功终止,确定问题是无界的nit: 3slack: array([0.89897776, 1.20204449])status: 3success: Falsex: array([-1.75641833e+09, -1.75641833e+09])

可以修改问题参数,从而达到有解,欢迎大家尝试!

6、若有更多Python的问题,请挪步“佐佑思维”公众号→回复免费

7、 ★佐佑思维二维码★

scipy.optimize.linprog函数参数最全详解相关推荐

  1. python scatter参数详解_Python中scatter函数参数及用法详解

    最近开始学习Python编程,遇到scatter函数,感觉里面的参数不知道什么意思于是查资料,最后总结如下: 1.scatter函数原型 2.其中散点的形状参数marker如下: 3.其中颜色参数c如 ...

  2. python scatter参数详解_Python 中 scatter 函数参数及用法详解

    Python 中 scatter 函数参数及用法详解 Python 中 scatter 函数参数及用法详解 这里有新鲜出炉的 Python 教程, 程序狗速度看过来! Python 编程语言 Pyth ...

  3. scipy.optimize.linprog()函数--求解线性规划问题

    这里写目录标题 关于方程组的标准形式 参数 c A_ub b_ub A_eq b_eq bounds method callback options maxiter disp presolve 返回值 ...

  4. python中函数分为哪四类_Python函数参数分类原理详解

    1.函数的参数在哪里定义 在python中定义函数的时候,函数名后面的括号里就是用来定义参数的,如果有多个参数的话,那么参数之间直接用逗号,隔开 案列: # 利用函数的参数,定义一个可以完成任意两个数 ...

  5. javascript中函数参数是evt详解

    一般情况下,在js中函数可能没有参数,也有特殊情况,举个例子: function toggleColor(evt){ if (vet){ var thisSquare = evt.target;} e ...

  6. matlab中scatter函数怎么用,Python中scatter函数参数及用法详解

    最近开始学习Python编程,遇到scatter函数,感觉里面的参数不知道什么意思于是查资料,最后总结如下: 1.scatter函数原型 2.其中散点的形状参数marker如下: 3.其中颜色参数c如 ...

  7. python scatter函数参数,Python中scatter函数参数及用法详解

    最近开始学习Python编程,遇到scatter函数,感觉里面的参数不知道什么意思于是查资料,最后总结如下: 1.scatter函数原型 2.其中散点的形状参数marker如下: 3.其中颜色参数c如 ...

  8. scatter python_Python中scatter函数参数及用法详解

    最近开始学习Python编程,遇到scatter函数,感觉里面的参数不知道什么意思于是查资料,最后总结如下: 1.scatter函数原型 2.其中散点的形状参数marker如下: 3.其中颜色参数c如 ...

  9. python模块:Scipy.optimize.linprog线性规划求解

    目录 一.模块介绍 二.模块源分析与参数解释 三.实例求解 四.参考 一.模块介绍 1.1模块功能 Scipy.optimize是Scipy中一个用于解决数学模型中优化类模型的子包,该子包中又包含了多 ...

最新文章

  1. 简单动态启停图 js jquery css3
  2. 关卡设计快速入门P_4. 放置Actor
  3. 每日一皮:这年头没点绝活连洗车都不行...
  4. Anaconda :利用Anaconda Prompt (Anaconda3)建立、设计不同python版本及对应库函数环境之详细攻略
  5. 多种时间格式字符串转换为Date对象
  6. Python手写神经网络实现3层感知机
  7. nvidia-smi‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件
  8. Linux系统基础知识
  9. 【ZOJ 4070】Function and Function
  10. 51nod 1285山峰和分段
  11. Atitit java字符串模板渲染总结 目录 1. 总结:指标 1 1.1. 支持中文变量 提升可读性 1 1.2. 变量placeholder简单性,,velo可以直接¥前导简单。。Free的
  12. 实验室信息管理系统是基础软件吗
  13. 清理c盘、c盘哪些文件可以删、图形显示文件大小软件
  14. 浏览器打开就是360导航(浏览器被360劫持)
  15. gps测试软件搜索不到星,手机搜不到星 搜星慢终极解决方法!
  16. debian7 修改系统时间
  17. 【福利】百度云2018最新限速破解软件
  18. jQuery教程_编程入门自学教程_菜鸟教程-免费教程分享
  19. 支付宝小程序分享转发
  20. 90后技术宅研发Magi一夜爆红,新一代知识化结构搜索新时代来了?

热门文章

  1. 人工智能政策再加码 中庆录播另辟新路径
  2. 基于STM32单片机智能门牌门禁布防撤防防盗报警光强感应灯光系统原理图PCB
  3. 攻防世界-Web-新手练习区-simple js
  4. 仿APP“美篇”发布预览界面
  5. ce修改服务器的数据,ce修改游戏服务器数据库
  6. 如何利用泛目录/泛目录程序提高搜索引擎收录?
  7. (附源码)Python社区医疗服务平台的设计与实现 毕业设计221707
  8. 企业使用CRM客户关系管理系统的四大理由
  9. 【matlab】eps 意义及用法
  10. Linux 中安装 JDK(rpm包安装)