0

使用 MATLAB,我试图在 4D 空间中找到函数的鞍点。更具体地说,函数是 f(x,y,z,w),我需要找到它关于 x 和 y 的最小值以及关于 z 和 w 的最大值。换句话说,4D 空间中的鞍点在 x 和 y 中是最小值,在 z 和 w 中是最大值。变量 x、y、z 和 w 被限制在各自的域内。

我曾尝试使用 fmincon 但无济于事。函数 f(x,y,z,w) 在定义它的域中肯定有一个鞍点。我一直在做的是首先使用 fmincon 对 x 和 y 最小化 f,然后在下一步中使用 fmincon 对 z 和 w 最小化 -f,然后迭代。我还尝试使用 fmincon 最小化 f(x,y,z0,w0)-f(x0,y0,z,w),其中 (x0,y0,z0,w0) 是起点或从前一次迭代计算的起点. 后一种方法(我知道它效率很低,因为没有适当的权重)也不起作用。

如果你们对如何使这项工作有任何想法,我将不胜感激。谢谢大家。

4

1 回答 1

0

编辑 3:一个问题可能是约束优化算法。如果您只有一个鞍点,则交替算法应该可以解决问题,因此问题可能来自约束。

尝试在 Matlab 中实现的 Nelder-Mead 算法,该算法在fminsearch没有约束的情况下进行优化。然后检查解决方案是否尊重您的限制。如果不遵守约束,请在不尊重约束的情况下惩罚目标函数(当您最小化然后最大化时不要忘记更改惩罚的符号)。


您可以反转 x 和 y 的效果,因此最大化 (-x,-y,z,w) 上的函数。

将您的目标重写为:g(x,y,y,z)=f(-x,-y,z,w)并最大化 g。

编辑2:第一种方法没用并且已经尝试过

如果您考虑优化问题,尝试同时最小化最大化(在同一步骤上)没有多大意义。

尝试考虑鞍点检测,解决方案可能是一个两步过程:

  1. 从 (x0,y0,z0,w0) 开始最小化域 (x,y) 上的函数
  2. 一旦你在 (x1,y1) 上达到收敛,从 (x1,y1,z0,w0) 开始最小化域 (z,w) 上的函数

重复直到收敛/最优条件。

编辑:我没有将它可视化为 4 维,但它对函数 z = f(x,y) 有意义

于 2016-04-27T11:07:38.977 回答