【问题标题】:How to introduce into optimization algorithm a linear constraint which involves calculated variables which depend on decision variables如何在优化算法中引入线性约束,该约束涉及依赖于决策变量的计算变量
【发布时间】:2019-07-16 01:02:08
【问题描述】:

一个优化问题由一个应该最小化的目标函数、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&lt;b,因为线性约束只能包含决策变量。

在这种形式中,fmincon 算法不考虑上述条件。我怎样才能添加这些约束?

【问题讨论】:

  • 是什么阻止您将Variable1=5*x(5)+x(1)*10-25Variable2=x(1)=5*x(2)+50*x(10) 放入constraints.m 函数中?除此之外,看起来您可以将变量 1 和变量 2 写为 A*x 其中 A=[1,0,0,0,5,0,0,0,0,0;1,5,0,0,0,0,0,0,0,50]
  • 如果你的两个变量可以用x的函数表示,你可以简单地写完整的表达式,不是吗?类似:c = [-(5*x(5)+x(1)*10-25) + 100;...
  • 不幸的是,这是不可能的。我应该解决的问题由 5000 个决策变量组成,并考虑了许多热力学关系。不可能将所有这些变量都表示为决策变量的函数...

标签: matlab optimization constraints


【解决方案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,将&gt;= 更改为&lt;=

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

【讨论】:

  • 感谢您的回复。然而,这并不是那么简单 :) 我应该解决的问题包含 5000 多个决策变量,并考虑了许多热力学关系。不可能将所有这些变量表示为决策变量的函数......我需要将这些变量放入约束函数中。我搜索了许多帮助 matlab 网站,但只考虑了简单的案例。
  • 向我们展示了一些限制或类似的东西
猜你喜欢
  • 2013-03-24
  • 1970-01-01
  • 2020-07-22
  • 2012-05-24
  • 1970-01-01
  • 1970-01-01
  • 2020-08-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多