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

时间:2019-07-15 13:02:14

标签: matlab optimization constraints

优化问题包括应被最小化的目标函数,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算法没有考虑上述条件。无论如何,我如何添加这些约束?

1 个答案:

答案 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

总体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]