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

1、线性规划概念

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

m i n x   c T x s . t .   A u b x ≤ b u b , A e q x = b e q , 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. Aubxbub,Aeqx=beq,lxu
其中 x 是决策变量的向量;cbubbeqlu是向量;和 A u b A_{ub} Aub A e q A_{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(可选参数):不等式约束矩阵, A u b A_{ub} Aub的每一行指定 x x x上的线性不等式约束的系数

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

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

    • 数据类型:二维数组
  • b_eq(可选参数):等式约束向量, A e q x A_{eq}x Aeqx的每个元素必须等于 b e q b_{eq} beq的对应元素

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

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

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

    • x:当前解向量
      • 数据类型:一维数组
    • fun:目标函数的当前值( c T x c^Tx cTx
      • 数据类型:浮点数
    • success:当算法成功完成时为 True
      • 数据类型:布尔值
    • slack:不等式约束的松弛值(名义上为正值) b u b − A u b x b_{ub}-A_{ub}x bubAubx
    • 数据类型:一维数组
    • con:等式约束的残差(名义上为零) b e q − A e q x b_{eq}-A_{eq}x beqAeqx
    • 数据类型:一维数组
    • 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 T x c^Tx cTx

    • 数据类型:浮点数
  • slack:不等式约束的松弛值(名义上为正值) b u b − A u b x b_{ub}-A_{ub}x bubAubx

    • 数据类型:一维数组
  • con:等式约束的残差(名义上为零) b e q − A e q x b_{eq}-A_{eq}x beqAeqx

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

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

    • 数据类型:整数

    • 0 : 优化成功终止

      1 : 达到了迭代限制

      2 : 问题似乎不可行

      3 : 问题似乎是不收敛

      4 : 遇到数值困难

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

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

    • 数据类型:字符串

5、若需实例,请挪步“佐佑思维”公众号→回复免费

6、 ★佐佑思维二维码★

佐佑思维