【问题标题】:Solving non-convex optimization with global optimization algorithm using MATLAB使用 MATLAB 用全局优化算法求解非凸优化
【发布时间】:2016-04-16 21:38:48
【问题描述】:

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

【问题讨论】:

  • 可以使用全局优化工具箱的全局搜索或多启动功能:mathworks.com/products/global-optimization/…
  • 感谢您的建议。我目前没有全局优化工具箱。还有其他选择吗?
  • 编写自己的多启动程序?只需随机选择许多不同的起点并为每个起点运行局部优化。最后选出最好的一个
  • 似乎是个好主意。 MATLAB 的 'fminsearch' 是一个很好的局部优化算法吗?或有其他建议吗?
  • 一种简单的方法是评估点网格的函数(xlo、xlo+step、xlo+2*step、...、xup)。选择最佳点并将其用作本地优化例程的起点。

标签: matlab optimization mathematical-optimization nonlinear-optimization


【解决方案1】:

“因为这些类型的问题有多个局部最小值”。不是真的,真实情况是这样的:

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

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

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

  • 可能未达到最小值

  • 下面的问题可能是无限的

另外一个大图是,确实有真正的方法可以真正解决问题(从数值上讲,它们很慢),但是有一个俚语调用方法,它不是必需的,找到函数的最小值也称为“解决”。


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

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

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


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

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

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

但您也应该根据某些原则获得最佳(最小值)值的下限,这是困难的部分:

  • 对整数变量进行凸松弛以使其成为实变量

  • 使用拉格朗日对偶函数

  • 在函数上使用 Lipshitc 常数等

这是一个复杂的步骤。

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

获取有关子子问题的下限和上限的信息,然后取最小值。上限和最小值。孩子的下界。如果孩子返回更差的下限,则可以由父母升级。


参考资料:

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

【讨论】:

    【解决方案2】:

    由于这是一个一维问题,所以事情就容易多了。 可以如下使用简单的最陡下降过程。 假设搜索区间为a<x<b

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

    【讨论】:

      猜你喜欢
      • 2016-03-11
      • 1970-01-01
      • 1970-01-01
      • 2016-06-16
      • 1970-01-01
      • 2012-05-21
      • 2012-06-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多