• 数学建模| 线性规划(Matlab)


    线性规划

    线性规划:约束条件和目标函数都是线性的。简单点说,所有的决策变量在目标函数和约束条件中都是一次方。

    Matlab函数

    Matlab函数:

    [x, value] = linprog(func, A, b, Aeq, beq ,lb, ub);
    
    • 1

    参数解释:

    • func 表示目标函数。
    • A 表示不等式约束条件系数矩阵,b 表示不等式约束条件常数矩阵。
    • Aeq 表示等式约束条件系数矩阵,beq 表示等式约束条件常数矩阵。
    • lb 表示决策变量的下限数组,ub表示决策变量的上限数组。
    • x 表示目标函数 func 取得最小值时的决策变量取值数组。
    • value 表示目标函数 func 取得的最小值。

    Matlab中线性规划的标准形式:
    min ⁡ x c T x \min_x c^Tx xmincTx
    s . t . { A x ⩽ b A e q ⋅ x = b e q l b ⩽ x ⩽ u b s.t. {AxbAeqx=beqlbxub s.t. AxbAeqx=beqlbxub

    注意:

    • 对于不存在的约束用空矩阵[],意思是例如beq条件不存在,但是lb和ub条件存在,可以写成linprog(func, A, b, Aeq, [] ,lb, ub)。如果不是中间某个参数不存在,而是后面都不存在就可以省略,例如lb和ub不存在,可以写成linprog(func, A, b, Aeq, beq)。
    • 根据Matlab标准,默认求解最小值,如果要求解最大值,把目标函数变成相反数(系数全部乘以-1);约束条件默认求的都是小于等于或者等号,大于号得转成小于等于。就是说拿到一个目标函数和约束条件,放进Matlab求解前,要先转换为Matlab标准。

    Matlab使用例子

    步骤:按照数模题目进行建模,得到目标函数和约束条件,然后把目标函数和约束条件化为标准形式,再化成matlab里面矩阵形式,再填入代码中。
    目标函数和约束条件:
    m a x z = x 1 + x 2 − 3 x 3 max\quad z=x_1+x_2-3x_3 maxz=x1+x23x3
    s . t . { x 1 + x 2 + x 3 = 6 x 1 − x 2 ≥ 2 x 1 + x 2 − 2 x 3 ≤ 5 x 1 , x 2 , x 3 ≤ 15 s.t. {x1+x2+x3=6x1x22x1+x22x35x1,x2,x315 s.t. x1+x2+x3=6x1x22x1+x22x35x1,x2,x315

    根据Matlab标准化后的目标函数和约束条件:
    m i n w = − x 1 − x 2 + 3 x 3 min\quad w=-x_1-x_2+3x_3 minw=x1x2+3x3
    s . t . { x 1 + x 2 + x 3 = 6 − x 1 + x 2 + 0 ∗ x 3 ≤ − 2 x 1 + x 2 − 2 x 3 ≤ 5 x 1 , x 2 , x 3 ≤ 15 s.t. {x1+x2+x3=6x1+x2+0x32x1+x22x35x1,x2,x315 s.t. x1+x2+x3=6x1+x2+0x32x1+x22x35x1,x2,x315

    约束条件矩阵化:
    ( 1 − 1 0 1 1 − 2 ) ( x 1 x 2 x 3 ) ≤ ( − 2 5 ) \left(\begin {array}{c} 1 &-1 &0 \\ 1 &1 &-2 \\ \end{array}\right) \left(\begin {array}{c} x_1\\ x_2\\ x_3\\ \end{array}\right) \leq \left(\begin {array}{c} -2\\ 5\\ \end{array}\right) (111102) x1x2x3 (25)
    [ 1 1 1 ] ⋅ [ x 1 x 2 x 3 ] T = 6 \left[\begin {array}{c} 1&1&1 \end{array}\right] \cdot {\left[\begin {array}{c} x_1&x_2&x_3 \end{array}\right]}^T=6 [111][x1x2x3]T=6
    [ x 1 x 2 x 3 ] T ≤ [ 15 15 15 ] T {\left[\begin {array}{c} x_1&x_2&x_3 \end{array}\right]}^T\leq{\left[\begin {array}{c} 15&15&15 \end{array}\right]}^T [x1x2x3]T[151515]T

    Matlab代码:

    func=[-1;-1;3];
    A=[1,-1,0;1,1,-1];
    b=[-2;5];
    aeq=[1,1,1]
    beq=6;
    ub=[15;15;15];
    [x,value]=linprog(func,A,b,aeq,beq,[],ub);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    结果:

    >> x
    
    x =
    
       -9.5000
       15.0000
        0.5000
    
    >> value
    
    value =
    
        -4
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
  • 相关阅读:
    22-08-22 西安 Mysql高级&javaSE面试题(01)“== 和 equals的区别” 、存储引擎
    在JS中,var 、let 、const 总结
    Markdown 画图学习
    【UiBot科普】什么是RPA企业级框架?
    redis中集合的相关命令
    AcWing 200. Hankson的趣味题
    terraform简单的开始-简单分析一下内容
    Nacos注册中心快速入门
    CAPL语言编译的那些事
    Spring Security和oauth2的关系
  • 原文地址:https://blog.csdn.net/qq_40306845/article/details/133049670