优化问题包括应被最小化的目标函数,10个决策变量(从x(1)
到x(10)
)和一些约束。
在目标函数中,还会计算一些其他变量,即
Variable1=5*x(5)+x(1)*10-25
Variable2=x(1)=5*x(2)+50*x(10)
等
问题是我想将上述两个计算变量(Variable1
和Variable2
)都放入约束函数中,它们是决策变量的函数。例如:
Variable1>=100
Variable2<50
为此,我尝试将这些条件放入约束函数中:
function [c,ceq] = constraints(x)
c = [-Variable1+100;
Variable2-50;];
ceq = [];
我知道这些约束是线性的,但是不可能将它们作为线性约束=> A*X<b
,因为线性约束只能包含决策变量。
在这种形式下,fmincon
算法没有考虑上述条件。无论如何,我如何添加这些约束?
答案 0 :(得分:1)
Variable1 = 5*x(5) + x(1)*10 -25
写Variable1
包括所有决策变量,缺失的变量以0
作为系数
Variable1 = 10*x(1) + 0*x(2) + 0*x(3) + 0*x(4) + 5*x(5) + ...
0*x(6) + 0*x(7) + 0*x(8) + 0*x(9) + 0*x(10) -25
Variable1 >=100
10*x(1) + 0*x(2) + 0*x(3) + 0*x(4) + 5*x(5) + ...
0*x(6) + 0*x(7) + 0*x(8) + 0*x(9) + 0*x(10) -25 >= 100
左侧应仅包含决策变量
通过在两侧添加-25
来从左侧删除+25
10*x(1) + 0*x(2) + 0*x(3) + 0*x(4) + 5*x(5) + ...
0*x(6) + 0*x(7) + 0*x(8) + 0*x(9) + 0*x(10) >= 100 + 25
将两边都乘以>=
,将<=
更改为-1
-10*x(1) - 0*x(2) - 0*x(3) - 0*x(4) - 5*x(5) - ...
0*x(6) - 0*x(7) - 0*x(8) - 0*x(9) - 0*x(10) <= -100 - 25
A
第一行:复制左侧决策变量系数A(1, :) = [-10, -0, -0, -0, -5, -0, -0, -0, -0, -0]
b
第一行:复制右侧值b(1, :) = -100-25;
Variable2
的逻辑相同
Variable2 = x(1) + 5*x(2)+50*x(10)
Variable2 = x(1) + 5*x(2) + 0*x(3) + 0*x(4) + 0*x(5) + ...
0*x(6) + 0*x(7) + 0*x(8) + 0*x(9) + 50*x(10)
Variable2 < 50
1*x(1) + 5*x(2) + 0*x(3) + 0*x(4) + 0*x(5) + ...
0*x(6) + 0*x(7) + 0*x(8) + 0*x(9) + 50*x(10) < 50
A
第二行A(2, :) = [+1, +5, +0, +0, +0, +0, +0, +0, +0, +50]
b
第二行b(2, :) = +50
总体A
和b
A = [-10, 0, 0, 0, -5, 0, 0, 0, 0, 0;
1, 5, 0, 0, 0, 0, 0, 0, 0, 50 ]
b = [-125; 50]