0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

scipy.optimize.linprog函数参数最全详解

微云疏影 来源:佐佑思维 作者:佐佑思维 2022-12-07 10:26 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

1 线性规划概念

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

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(可选参数):不等式约束矩阵, A_{ub} 的每一行指定 x 上的线性不等式约束的系数;数据类型:二维数组

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

A_eq(可选参数):等式约束矩阵, A_{eq}的每一行指定 x 上的线性等式约束的系数;数据类型:二维数组

b_eq(可选参数):等式约束向量,A_{eq}x 的每个元素必须等于 b_{eq} 的对应元素;数据类型:一维数组

bounds(可选参数):定义决策变量 x 的最小值和最大值;数据类型:(min, max)序列对

None:使用None表示没有界限,默认情况下,界限为(0,None)(所有决策变量均为非负数)

如果提供一个元组(min, max),则最小值和最大值将用作所有决策变量的界限。

method(可选参数):算法,{‘interior-point’, ‘revised simplex’, ‘simplex’}以上三种算法可选;数据类型:输入如上三种字符串

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

x:当前解向量; 数据类型:一维数组

fun:目标函数的当前值(c^Tx); 数据类型:浮点数

success:当算法成功完成时为 True;数据类型:布尔值

slack:不等式约束的松弛值(名义上为正值) b_{ub} ? A_{ub}x; 数据类型:一维数组

con:等式约束的残差(名义上为零) b_{eq} ? A_{eq}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:目标函数的最佳值(c^Tx);数据类型:浮点数

slack:不等式约束的松弛值(名义上为正值) b_{ub}-A_{ub}x;数据类型:一维数组

con:等式约束的残差(名义上为零)b_{eq}-A_{eq}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.64441

message: ‘The algorithm terminated successfully and determined that the problem is unbounded.’#算法成功终止,确定问题是无界的

nit: 3

slack: array([0.89897776, 1.20204449])

status: 3

success: False

x: array([-1.75641833e+09, -1.75641833e+09])

佐佑思维

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 算法
    +关注

    关注

    23

    文章

    4810

    浏览量

    98619
  • 函数
    +关注

    关注

    3

    文章

    4423

    浏览量

    67880
  • 变量
    +关注

    关注

    0

    文章

    616

    浏览量

    29581
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    SN54LS181、SN54S181、SN74LS181、SN74S181算术逻辑单元/函数发生器详解

    SN54LS181、SN54S181、SN74LS181、SN74S181算术逻辑单元/函数发生器详解 在电子设计领域,算术逻辑单元(ALU)是实现各种算术和逻辑运算的核心部件。今天我们就来详细探讨
    的头像 发表于 04-23 15:15 221次阅读

    FDP3651U N - 通道PowerTrench® MOSFET:特性、参数与应用详解

    FDP3651U N - 通道PowerTrench® MOSFET:特性、参数与应用详解 在电子工程师的日常设计工作中,MOSFET是不可或缺的关键元件。今天,我们就来深入探讨一下FDP3651U
    的头像 发表于 04-15 10:40 148次阅读

    MAX9949/MAX9950 双引脚参数测量单元详解

    MAX9949/MAX9950 双引脚参数测量单元详解 在电子测试和测量领域,精确的参数测量对于保证产品质量和性能至关重要。MAXIM公司的MAX9949/MAX9950双引脚参数测量
    的头像 发表于 04-04 09:15 218次阅读

    GINKGO MICRO 银杏微半导体MOS管在汽车车灯的应用参数详解与选型指南

    GINKGO MICRO 银杏微半导体MOS管在汽车车灯的应用参数详解与选型指南 一、概述 汽车车灯已全面进入LED/矩阵/像素化时代, MOSFET 作为车灯驱动、调光、保护、升压/降压核心开关
    的头像 发表于 03-12 17:59 1186次阅读
    GINKGO MICRO 银杏微半导体MOS管在汽车车灯的应用<b class='flag-5'>参数</b><b class='flag-5'>详解</b>与选型指南

    函数信号发生器和任意波形信号发生器区别详解

    函数发生器提供了一个预置列表,里面列出了它可以生成的波形或码型。 在函数发生器中,用户可以更改频率、幅度和偏移等波形参数,还可添加简单的失真。 任意波形发生器更为复杂,能够仿真真实世界中的信号
    的头像 发表于 02-09 16:24 424次阅读
    <b class='flag-5'>函数</b>信号发生器和任意波形信号发生器区别<b class='flag-5'>详解</b>

    指针与函数详解

    变量,当然也可以作为某个函数参数来使用的。所以,你还应知道函数指针是如何作为某个函数参数来传递使用的。 示例代码如下: #inclu
    发表于 01-23 06:02

    ElfBoard嵌入式教育科普|Linux系统I/O接口:Open函数详解

    1.函数概述open()是Linux/Unix内核提供的底层系统调用,核心功能是打开或创建文件。成功调用后,内核会返回一个整型的文件描述符作为该文件的句柄,后续的所有读写操作都基于此描述符进行。调用
    的头像 发表于 12-29 11:41 1334次阅读
    ElfBoard嵌入式教育科普|Linux系统I/O接口:Open<b class='flag-5'>函数</b><b class='flag-5'>详解</b>

    函数调用性能消耗

    函数调用对于处理器的性能消耗是很小的,只占有函数执行工作中性能消耗的一小部分。参数传入函数变量寄存器中有一定的限制。这些参数必须是整型兼容的
    发表于 12-12 07:50

    内联函数介绍

    ) + square(y)); } 使用内联函数的好处如下: 没有函数调用负担。函数调用处直接替换为函数体,因此没有诸如读取寄存器变量等性能消耗。 更小的
    发表于 12-12 07:08

    函数指针及指针函数的区别

    指针的函数,即本质是一个函数函数返回类型是某一类型的指针   类型标识符 *函数名(参数表)   int *f(x,y);   首先它是一
    发表于 12-12 06:34

    函数指针的概念

    函数指针是指向函数的指针变量。 通常我们说的指针变量是指向一个整型、字符型或数组等变量,而函数指针是指向函数函数指针可以像一般
    发表于 12-11 08:10

    如何用函数指针调用函数

    p*/ p =Func; /*将Func函数的首地址赋给指针变量p*/ 赋值时函数 Func 不带括号,也不带参数。由于函数名 Func 代表
    发表于 12-11 06:26

    详解hal_entry入口函数

    当使用RTOS时,程序从main函数开始进行线程调度;当没有使用RTOS时,C语言程序的入口函数main函数调用了hal_entry函数。由于我们新建的工程是没有选用RTOS的,因此,
    的头像 发表于 07-25 15:34 2251次阅读

    【HarmonyOS 5】鸿蒙中的UIAbility详解(三)

    :冷启动与热启动的Want数据处理 1. 冷启动(Cold Start) 应用首次启动或被系统完全终止后重新创建。 冷启动,应用会从onCreate函数中进入,通过want参数
    的头像 发表于 06-14 22:32 899次阅读

    SSH常用命令详解

    SSH常用命令详解
    的头像 发表于 06-04 11:30 2213次阅读