在 Matlab 中设置 linprog
Setting up for linprog in Matlab
我在 Matlab 中为 linprog 设置以下类型的约束时遇到问题
Max 9x1 + 8x2 + 7x3
Subject to: 2 <= x1 + x2 <= 3
4 <= x2 + x3 <= 5
x1 >= 0, x2 >= 0, x3 >= 0
A = [ 1 1
1 1
1
1
1 ]
f = [ 9 8 7 ]
b = ???
lb = [ 2 4 ]
ub = [ 3 5 ]
我不知道如何设置 b,因为网站上给出的示例没有限制。
另外(如果需要)lb 和 ub 如何考虑 x1 >= 0, x2 >=0, and x3 >=3
?
您 link 的 MathWorks 文档显示了几个设置上限和下限的示例,但您显示的代码与文档不符。您的 A
不是有效矩阵,您的 lb
和 ub
没有足够的元素(并且包含错误的数字)。
你想要
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];
根据linprog
函数,有3种指定约束的形式:
不等式约束。喜欢 x1+x2 <= 3
的人。对于这些约束,您必须将它们全部写成小于常数的变量之间的线性组合。所以最后你把它们写成 Ax <= b
.
等式约束。喜欢 x1+x2 = 3
的人。这种情况与上述类似,但您使用等号而不是小于号。所以你的平等约束将表示为 Aeq x = beq
.
变量的性质。在这些约束中,您绑定了变量。所以在这里你把 0 <= x1 <= Inf
写成 lb <= x <= 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]
我在 Matlab 中为 linprog 设置以下类型的约束时遇到问题
Max 9x1 + 8x2 + 7x3
Subject to: 2 <= x1 + x2 <= 3
4 <= x2 + x3 <= 5
x1 >= 0, x2 >= 0, x3 >= 0
A = [ 1 1
1 1
1
1
1 ]
f = [ 9 8 7 ]
b = ???
lb = [ 2 4 ]
ub = [ 3 5 ]
我不知道如何设置 b,因为网站上给出的示例没有限制。
另外(如果需要)lb 和 ub 如何考虑 x1 >= 0, x2 >=0, and x3 >=3
?
您 link 的 MathWorks 文档显示了几个设置上限和下限的示例,但您显示的代码与文档不符。您的 A
不是有效矩阵,您的 lb
和 ub
没有足够的元素(并且包含错误的数字)。
你想要
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];
根据linprog
函数,有3种指定约束的形式:
不等式约束。喜欢
x1+x2 <= 3
的人。对于这些约束,您必须将它们全部写成小于常数的变量之间的线性组合。所以最后你把它们写成Ax <= b
.等式约束。喜欢
x1+x2 = 3
的人。这种情况与上述类似,但您使用等号而不是小于号。所以你的平等约束将表示为Aeq x = beq
.变量的性质。在这些约束中,您绑定了变量。所以在这里你把
0 <= x1 <= Inf
写成lb <= x <= 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]