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

时间:2015-06-05 06:44:59

标签: algorithm matlab optimization

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

在使用优化工具箱,fmincon(使用Trust Region Reflective算法)时,如何设置逻辑约束?

我正在优化5个值(我们称之为矩阵OptMat),我想用约束来优化

max(OptMat)/min(OptMat) > 10

我认为这将优化OptMat的5个值尽可能低,同时记住上述约束,以便如果发现OptMat的一组值具有较低的OF,它会破坏约束,它将不会报告那些值,而是报告下一个最低的OF,其中OptMat值满足上述约束?

对于记录,我的下限是[0,0,0,0,0]。我不确定如何将其输入上限,因为它只接受双打,这是合乎逻辑的。我尝试了有效集算法并启用了非线性约束函数框,我认为我正在使用它。如果是这样,我不确定输入所需约束的语法是什么。另一种方法^ ^ ^或^可能^ ^ ^我可以想到的工作是使用它作为上边界。

[min(OptMat)*10, min(OptMat)*10, min(OptMat)*10, min(OptMat)*10, min(OptMat)*10]   

同样,我正在使用GUI Optimization Toolbox。我没有太多关注命令行优化(虽然我最终需要编写命令行)并且我想我在某处读到你可以设置上限并且它不必是双倍的?

非常感谢您的帮助,如果有人能够的话。如果这是一个非常苛刻的问题,我道歉。

1 个答案:

答案 0 :(得分:0)

您正在寻找的是非线性约束,fmincon可以使用参数nonlcon来处理它(我只知道命令,而不是GUI)。有关详细信息,请参阅本指南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, ...)