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

Solving non-convex optimization with global optimization algorithm using MATLAB

我有一个简单的无约束非凸优化问题。由于这些类型的问题有多个局部最小值,我正在寻找产生 unique/global 最小值的全局优化算法。在互联网上,我遇到了遗传算法、模拟退火等全局优化算法,但对于解决一个简单的单变量无约束非凸优化问题,我认为使用这些高级算法似乎不是一个好主意。谁能给我推荐一个简单的全局算法来解决这样一个简单的单变量无约束非凸优化问题?我非常感谢对此的想法。

因为这是一个一维问题,事情就简单多了。 可以如下使用简单的最速下降程序。 假设搜索的区间为a<x<b.

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

"Since problems of these type have multiple local minima"。不对,真实情况是这样的:

  • 也许你有一个局部最小值

  • 也许你有无限组局部最小值

  • 也许你的局部最小值数量有限

  • 可能没有达到最低要求

  • 下面可能是无界问题

同样重要的是,确实有真正解决问题的真正方法(在数值上,它们很慢),但是有一个俚语调用方法,这不是必需的找到函数的最小值也称为 "solve".


  1. 事实上对于任何有限的 n 和任何无限的集合 M 都是 M^n~M。所以你的问题是一维的事实没什么。 1000000个参数从理论角度从集合M中提取出来还是很难的。

  2. 如果您对如何近似解决领域中已知精度 epsilon 的问题感兴趣 - 然后将您的领域分成 1/epsilon 区域,在中间点采样值(评估函数),select最小值

  3. 下面介绍的方法是精确法,其他方法:粒子估计,sequent.convex.programming,交替方向,粒子群,Neidler-Mead单纯形法,mutlistartgradient/subgradient descend 或任何下降算法,如牛顿法或坐标下降,它们 all 不能保证 non-convex 问题,如果函数是非凸的,其中一些甚至不能应用.


如果你真的对函数值的精确求解感兴趣,那么你可以关注方法,它被称为 branch-and-bound 并且真正找到了最小值,我不认为你描述的算法可以解决问题并在强烈意义上找到最小值:

分支定界的基本思想 - 将域划分为凸集并改进 lower/upper 边界,在您的情况下是区间。

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

但是你也应该根据一些原则有最佳(最小)值的下限,这是困难的部分:

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

  • 使用拉格朗日对偶函数

  • 在函数等上使用 Lipshitc 常量

这是一个复杂的步骤。

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

获取有关 child 子问题的下限和上限的信息,然后取最小值。上限和最小值。 children 的下限。如果 child returns 更差的下限可以通过 parent.

升级

参考文献:

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