【问题标题】:Setting up for linprog in Matlab在 Matlab 中设置 linprog
【发布时间】:2016-01-12 10:46:28
【问题描述】:

我无法在 Matlab 中为 linprog 设置以下类型的约束

Max 9x1 + 8x2 + 7x3
Subject to: 2 <= x1 + x2 <= 3
            4 <= x2 + x3 <= 5
            x1 >= 0, x2 >= 0, x3 >= 0

Following mathwork's doc

A = [ 1 1
      1 1
      1
      1
      1 ]
f = [ 9 8 7 ]
b = ???
lb = [ 2 4 ]
ub = [ 3 5 ]

我不知道如何设置 b,因为网站上给出的示例没有限制。

lb 和 ub 如何(如果需要)考虑x1 &gt;= 0, x2 &gt;=0, and x3 &gt;=3

【问题讨论】:

    标签: matlab linear-programming


    【解决方案1】:

    根据linprog函数,指定约束有3种形式:

    1. 不等式约束。那些喜欢x1+x2 &lt;= 3。对于这些约束,您必须将它们全部写为小于常数的变量之间的线性组合。所以最后你把它们写成Ax &lt;= b

    2. 平等约束。那些喜欢x1+x2 = 3。这种情况与上面的情况类似,但不是小于号,而是使用等号。所以你的等式约束将被表示为Aeq x = beq

    3. 变量的性质。在这些约束中,您绑定了变量。所以在这里你把0 &lt;= x1 &lt;= Inf写成lb &lt;= x &lt;= ub

    所以你应该把你的问题写成:

    Max 9 x1 + 8 x2 + 7 x3
    Subject to:
            - x1 - x2 <= -2
            x1 + x2   <= 3
            -x2 - x3  <= -4
            x2 + x3   <= 5
    
            0x1 + 0x2 + 0x2 = 0
    
            0 <= x1 <= Inf
            0 <= x2 <= Inf
            0 <= x3 <= Inf
    

    现在你重写了它,你定义了你的 Matlab 变量:

    A = [-1 -1 0; 1 1 0; 0 -1 -1; 0 1 1]
    b = [-2; 3; -4; 5]
    Aeq = zeros(1,3)
    beq = 0
    lb = [0; 0; 0]
    ub = [Inf; Inf; Inf]
    f = [9 8 7]
    

    希望对您有所帮助。问候

    编辑: linprog 最小化所以 f 必须是 [-9 -8 -7]

    【讨论】:

    • 细节:linprog 函数进行最小化,因此为了最大化您应该定义f = [-9 -8 -7]
    • 当然。我的错。
    【解决方案2】:

    您链接到的 MathWorks 文档显示了几个设置上限和下限的示例,并且您显示的代码不遵循该文档。您的 A 不是有效矩阵,并且您的 lbub 没有足够的元素(并且包含错​​误的数字)。

    你想要

    A = [1 1 0;-1 -1 0;0 1 1;0 -1 -1];
    b = [3;-2;5;-4];
    lb = [0;0;0];
    ub = [inf;inf;inf];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多