matlab中fmincon函数中不含等号的边界值怎么设置?

matlab中fmincon函数的不含等号的边界值怎么设置?fmincon中默认的边界条件是lb<=x<=ub,而我需要的是lb<x<ub,请高手帮忙指导一下!例如要求x>0(不是x>=0)作为边界条件。如果fmincon函数不可以达到这样要求的话,还有什么其他函数可以做这个优化。

这个问题看似简单,但要想真正解决,可能从理论上存在很大的问题。如果英语阅读能力过得去,建议看一下MathWorks官网上的一个讨论:

www.mathworks.com/matlabcentral/newsreader/view_thread/235640

 

我简单概括一下讨论的主要内容:

1、约束条件如果不含等号,意味着可行域(所有符合约束条件的点构成的集合)不是一个闭集(closed set)。很多看起来很简单的函数在闭集上有最优解,但在非闭集上却未必有解,例如,

        minimize f(x)=x

如果约束条件是x>=0,则很显然最优解为x=0。

然而,如果约束条件改成x>0,则该问题无解,这可以很简单地证明:对于任何x>0,都有f(x/2)<f(x),因而x不是最优解。

 

关于可行域、闭集、开集之类的概念,我就不展开了,如有兴趣请找本数学规划方面的书看看。

 

2、对于非闭集约束的问题,该讨论中三个人给了三个不同的建议:

(1)Matt建议直接按照无约束优化问题求解(fminunc),然后检验是否满足约束。

(2)Bruno Luong建议把约束条件改为包括等号,使得可行域成为闭集,用fmincon求解之后然后检验最优解是否刚好落在边界上(即是否满足本来不应包括的等号条件):如果是,则问题无解;否则求出的解即为所需。

(3)Steven Lord建议把非闭约束的边界值改变一个很小的值(例如eps),从而改为一个闭约束问题,例如,把x>0改成x>=1e-12,然后进行求解。

 

上面的三个建议中,我个人更倾向于第二个,其次是第三个。

温馨提示:答案为网友推荐,仅供参考