2015-06-05 75 views
0

大家好:)我对优化很陌生,几乎没有理解它(准备在弄清楚如何在没有任何正式学习的情况下编写目标函数之后撕开我的手腕),并且需要一些工作上的帮助项目。优化工具箱(fmincon) - 如何设置逻辑约束?

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

我优化5个值(可以称之为矩阵OptMat),我想与约束,使得

max(OptMat)/min(OptMat) > 10 

我认为这将优化5个值OptMat的尽可能低的水平,以优化,而请记住上述约束条件,以便如果OptMat的一组值在较低的OF中找到,并且不会报告这些值,而是报告OptMat值满足上述约束的下一个最低OF。

为了记录,我的下限是[0,0,0,0,0]。我不确定如何将它输入上限,因为它只接受双打,这是合乎逻辑的。我尝试了活动集算法,并启用了非线性约束函数框,我想我正处在正确的轨道上。如果是这样,我不知道什么语法输入我想要的约束。我可以想到的另一种方法是,可以使用它作为上边界。

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

我再次使用GUI优化工具箱。我没有看太多的命令行优化(尽管我最终需要将它写入命令行),并且我认为我在某处可以设置上边界,并且它不必是双重的?

非常感谢你的帮助,如果有人能够。我很抱歉,如果这是一个真正的nooby问题。

回答

0

你要找的是非线性的限制,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, ...) 
+0

非常感谢您!目前无法测试,但这似乎正是我所期待的。我最终需要转向命令行,所以看起来会比以后更快。 – user4976722

+0

不要忘记给予好评,或者如果它解决您的问题,关闭的问题。 – rst

+0

我没有足够的声誉还给予好评,但我接受的回答你的问题;除非靠近你的意思是删除问题? – user4976722