用MATLAB求全局优化算法求解非凸优化问题

时间:2016-01-12 10:14:22

标签: matlab optimization mathematical-optimization nonlinear-optimization

我有一个简单的无约束非凸优化问题。由于这些类型的问题具有多个局部最小值,我正在寻找产生唯一/全局最小值的全局优化算法。在互联网上,我遇到了全局优化算法,如遗传算法,模拟退火等,但为了解决一个简单的一个无约束非凸优化问题,我认为使用这些高级算法似乎并不是一个好主意。任何人都可以推荐一个简单的全局算法来解决这种简单的一个变量无约束非凸优化问题吗?我非常欣赏这方面的想法。

2 个答案:

答案 0 :(得分:0)

"由于这些类型的问题有多个局部最小值"。事实并非如此,真实情况如下:

  • 也许您有一个本地最低

  • 也许你有无限的本地迷信

  • 也许您的本地最小数量有限

  • 可能达不到最低要求

  • 下面可能无问题

同样大的图片是真的有真正解决问题的方法(数字和它们慢),但有一个俚语调用方法,这不是必须找到函数的最小值也称为"解决&# 34。

  1. 实际上M ^ n~M对于任何有限n和任何无穷集M.所以你问题有一个维度的事实是没有的。从理论的角度来看,从集合M中抽取的1000000个参数仍然很难。

  2. 如果您有兴趣如何近似解决域中已知精度epsilon的问题 - 然后将域拆分为1 / espsilon区域,中间点的样本值(evalute函数),并选择最小值

  3. 我将在下面描述的方法是精确的方法和其他方法:粒子估计,sequent.convex.programming,替代方向,粒子群,Neidler-Mead单纯形法,mutlistart梯度/次梯度下降或任何下降算法如牛顿方法或坐标下降,他们所有对非凸问题没有任何保证,如果函数是非凸的,甚至不能应用其中一些。

  4. 如果你有兴趣真正解决一些精确的函数值然后你可以把注意力转移到方法,这被称为分支绑定,并且真正找到最小的算法,你描述我不要以为他们解决问题并在强烈意义上找到最低限度:

    分支和边界的基本思想 - 将分区域分割成凸集并改进下/上界,在你的情况下它是间隔。

    你应该有一个例程来找到最佳(最小)值的上限:你可以这样做,例如只需通过采样子域并取最小或使用局部优化方法从随机点开始。

    但是你也应该通过一些原则得到最佳(最小)值的下限,这很难:

    • 整数变量的凸松弛使它们成为实变量

    • 使用拉格朗日双重功能

    • 在功能上使用Lipshitc常数等

    这是一个复杂的步骤。

    如果这两个值接近 - 我们在其他情况下完成分区或精炼分区。

    获取有关子子问题的下限和上限的信息,然后取min。上限和最小值儿童的下限。如果孩子返回更严重的下限,它可以由父母升级。

    <强>参考文献:

    如需更多精彩解释,请查看: EE364B,第18讲,教授。斯坦福大学斯蒂芬博伊德。它可以在youtube和iTunes大学上找到。如果您是这个领域的新手,我建议您查看Stephen P. Boyd的EE263,EE364A,EE364B课程。你会爱上它

答案 1 :(得分:-2)

由于这是一维问题,事情变得更容易。 可以如下使用简单的最陡下降程序。 假设搜索间隔为a<x<b

通过最小化你的函数来启动SD,例如f(x)。你恢复了第一个最小Xm1。你应该使用一个很好的步骤,而不是太大。 通过添加正小常数Xm1 +ε来移动这一点。然后从这一点开始最大化f或最小化-f。你得到f的最大值,你用ε扭曲它并从那里开始最小化,依此类推。