繁体   English   中英

如何将线性约束引入优化算法,该线性约束涉及取决于决策变量的计算变量

[英]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)

等等

问题是我想将上述两个计算变量( Variable1Variable2 )作为决策变量的函数放入约束函数中。 例如:

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

总体Ab

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM