优化工具箱(fmincon) -如何设置逻辑约束



大家好:)我对优化非常陌生,几乎不了解它(在弄清楚如何在没有任何正式学习的情况下编写目标函数后,我几乎准备割腕),并且在工作项目中需要一点帮助。

我如何去设置一个逻辑约束时,使用优化工具箱,特别是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, ...)

最新更新