大家好:)我对优化非常陌生,几乎不了解它(在弄清楚如何在没有任何正式学习的情况下编写目标函数后,我几乎准备割腕),并且在工作项目中需要一点帮助。
我如何去设置一个逻辑约束时,使用优化工具箱,特别是fmincon(使用信任区域反射算法)?
我正在优化5个值(让我们称之为矩阵OptMat),我想优化约束,使
max(OptMat)/min(OptMat) > 10
我假设这将优化OptMat的5个值尽可能低,同时保持上述约束,以便如果发现OptMat的一组值具有较低的of,其中它打破了约束,它将不报告这些值,而是报告下一个最低的OptMat值满足上述约束?
对于记录,我的下界是[0,0,0,0,0]。我不确定如何进入上界,因为它只接受双精度,这将是合乎逻辑的。我尝试了主动集算法,它启用了非线性约束函数框,我认为我在正确的轨道上。如果是这样,我不确定输入所需约束的语法是什么。我能想到的另一种方法是用这个作为上界。
[min(OptMat)*10, min(OptMat)*10, min(OptMat)*10, min(OptMat)*10, min(OptMat)*10]
我再次使用GUI优化工具箱。我没有过多地研究命令行优化(尽管我最终需要写命令行),我想我在某个地方读到,你可以设置上限,它不必是双重的?
如果有人可以的话,非常感谢你的帮助。如果这是一个很愚蠢的问题,我很抱歉。您正在寻找的是非线性约束,fmincon可以处理它(我只知道命令,而不是GUI)的参数nonlcon
。欲了解更多信息,请参阅本指南http://de.mathworks.com/help/optim/ug/fmincon.html
你将如何实现这个?首先创建一个函数
function [c, ceq] = mycondition(x)
c = -max(x)/min(x)/10;
ceq = 0;
我必须改变方程以匹配正确的形式,即需要c(x)<=0。也许你也可以创建一个匿名函数,我不确定(http://de.mathworks.com/help/matlab/matlab_prog/anonymous-functions.html)。
然后使用这个函数给fmincon函数提供@
符号,即在特定位置写入
fmincon(...., @mycondition, ...)