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


    scipy.optimize.linprog(c, A_ub=None, b_ub=None, A_eq=None, 
    		b_eq=None, bounds=None, method='highs', callback=None,
    		 options=None, x0=None, integrality=None)
    
    • 1
    • 2
    • 3

    最小化受到等式和不等式制约的目标函数

    关于方程组的标准形式

    官方文档的说法是这样的,给出了两种形式

    1. 形式1
      在这里插入图片描述

    2. 形式2
      在这里插入图片描述

    我们看到,
    首先,决策变量x应该使得目标函数最小化
    其次,b_up代表的不等式约束向量应该在小于等于号的右边
    根据官方给出的方程组形式我们可以将实际中遇到的方程组先转化为标准形式,然后利用该函数求解

    参数

    接下来我们结合一个实际例子来说明各个参数的意义
    假设有一个线性规划问题如下
    m a x   z = x 1 − 2 x 2 − 3 x 3 { − 2 x 1 + x 2 + x 3 ≤ 9 − 3 x 1 + x 2 + 2 x 3 ≥ 4 4 x 1 − 2 x 2 − x 3 = − 6 x 1 ≥ − 10 , x 2 ≥ 0 max \ z=x_1-2x_2-3x_3\\ \left\{

    2x1+x2+x393x1+x2+2x344x12x2x3=6x110,x20" role="presentation" style="position: relative;">2x1+x2+x393x1+x2+2x344x12x2x3=6x110,x20
    \right. max z=x12x23x3 2x1+x2+x393x1+x2+2x344x12x2x3=6x110,x20

    将其转化为scipy中的标准形式
    m i n   z = − x 1 + 2 x 2 + 3 x 3 { − 2 x 1 + x 2 + x 3 ≤ 9 3 x 1 − x 2 − 2 x 3 ≤ − 4 4 x 1 − 2 x 2 − x 3 = − 6 x 1 ≥ − 10 , x 2 ≥ 0 min \ z=-x_1+2x_2+3x_3\\ \left\{

    2x1+x2+x393x1x22x344x12x2x3=6x110,x20" role="presentation" style="position: relative;">2x1+x2+x393x1x22x344x12x2x3=6x110,x20
    \right. min z=x1+2x2+3x3 2x1+x2+x393x1x22x344x12x2x3=6x110,x20

    该问题的解请看下面的演示程序

    c

    1-D array
    线性目标函数的系数

    c = [ − 1 , 2 , 3 ] c=[-1,2,3] c=[1,2,3]

    A_ub

    2-D array, optional
    不等式约束矩阵

    A = [ [ − 2 , 1 , 1 ] , [ 3 , − 1 , − 2 ] ] A=[[-2,1,1],[3,-1,-2]] A=[[2,1,1],[3,1,2]]

    b_ub

    1-D array, optional
    不等式约束向量

    b = [ [ 9 ] , [ − 4 ] ] b=[[9],[-4]] b=[[9],[4]]

    A_eq

    2-D array, optional
    等式约数矩阵

    A e q = [ [ 4 , − 2 , − 1 ] ] A_eq=[[4,-2,-1]] Aeq=[[4,2,1]]

    b_eq

    1-D array, optional
    等式约数向量

    b e q = [ − 6 ] b_eq=[-6] beq=[6]

    bounds

    sequence, optional
    决策变量x的最大最小值
    其中的每个元素都表示一个决策变量x中的最小值和最大值(min,max)

    b o u n d s = ( ( 10 , N o n e ) , ( 1 , N o n e ) , ( N o n e , N o n e ) ) bounds=((10, None), (1, None), (None, None)) bounds=((10,None),(1,None),(None,None))
    元组中有三个元素,分别表示 x 1 , x 2 , x 3 的最小值、最大值 x_1,x_2,x_3的最小值、最大值 x1,x2,x3的最小值、最大值

    method

    str, optional
    优化算法

    支持‘highs’ (default), ‘highs-ds’, ‘highs-ipm’, ‘interior-point’ (legacy), ‘revised simplex’ (legacy), and ‘simplex’ (legacy)等多种算法,其中lagacy将在scipy 1.11.0版本中被移除

    callback

    callable, optional
    调用回调函数

    options

    dict, optional
    优化器选项字典

    maxiter

    int
    算法执行的最大迭代次数

    disp

    bool,default=False
    是否打印收敛消息

    presolve

    bool
    是否自动预解析

    返回值

    res

    OptimizeResult
    决策结果类,包含下面变量

    在这里插入图片描述

    上图为笔者使用该函数得到的返回值,仅做参考

    x

    1-D array
    使目标函数达到最佳值的决策变量的值.

    fun

    float
    目标函数最佳值

    *slack

    1-D array
    不等式约束的松弛值

    *con

    1-D array
    等式残差约束

    success

    bool
    算法成功找到最佳解决方案时返回True

    status

    int
    表示算法退出状态的整数

    0成功完成优化
    1达到迭代限制
    2问题不可解
    3问题不收敛
    4数值问题

    nit

    int
    在所有阶段中执行的迭代总数

    message

    str
    算法退出状态的字符串描述符

    演示程序

    from scipy.optimize import linprog
    
    c=[-1,2,3]
    A=[[-2,1,1],[3,-1,-2]]
    b=[[9],[-4]]
    aeq=[[4,-2,-1]]
    beq=[-6]
    bounds=((-10, None), (0, None), (None, None))
    res=linprog(c=c, A_ub=A, b_ub=b, A_eq=aeq, b_eq=beq, bounds=bounds,)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    运行结果
    在这里插入图片描述

  • 相关阅读:
    @Value的注入与静态注入 与 组件中静态工具类的注入
    css设置输入框边框无效或者不展示边框
    【JavaEE】多线程(二)
    【MM小贴士】SAP 批次管理基础配置
    【1419. 数青蛙】
    three.js 基础01
    SpringBoot日志输出
    2021年ICPC国际大学生程序设计竞赛暨陕西省第九届大学生程序设计竞赛 L:String Games
    大数据学习1.4-xShell配置Hadoop
    便捷生活,从便民平台开始
  • 原文地址:https://blog.csdn.net/m0_54510474/article/details/127437004