【发布时间】:2015-11-07 15:18:05
【问题描述】:
我试图在 Matlab 中使用相当复杂的目标函数执行约束线性优化。对于不符合我定义的线性不等式约束的输入值,这个目标函数会产生误差。我知道有 a few algorithms 在每次迭代中强制严格遵守边界,但有没有人知道任何算法(或其他机制)在每次迭代中强制严格遵守线性(不等式)约束?
我可以让我的目标函数在任何此类点都返回零,但我担心会引入大的不连续性。
【问题讨论】:
-
你试过将
fmincon优化算法设置为'interior-point'吗?options = optimoptions('fmincon','Algorithm','interior-point');。如果我没记错的话,'interior-point'优化应该总是在可行域内搜索。 -
还可以阅读
AlwaysHonorConstraints选项的文档。 -
这里有一点 self advertisement 与这个案例相关 :) 这是我编写的一个函数,它使用
fminsearch作为引擎,同时允许有界和线性/非线性(非)等式约束。它不关心不连续性,不需要导数等,并且还可以选择严格遵守约束。但是,由于引擎是fminsearch,因此该算法的扩展性很差,因此对于大维问题的性能较差……您所说的“复杂”是什么? -
另外,正如一般评论:返回零只有在目标函数的其余部分保证在任何地方都是负数时才有用;我会返回
+inf:) -
等等,你说的是线性优化吗?那你为什么用
fmincon而不是linprog?
标签: matlab mathematical-optimization