[英]How to introduce into optimization algorithm a linear constraint which involves calculated variables which depend on decision variables
一个优化问题包括一个应该最小化的目标函数,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
算法不考虑上述条件。 无论如何,如何添加这些约束?
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]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.