在MATLAB中的4D空间中的Extremize函数(相对于两个变量最小化,相对于其他两个变量最大化)

时间:2016-04-27 09:54:50

标签: matlab minimization saddle

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

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

如果你们有任何关于如何使这项工作的想法,我将非常感激。谢谢大家。

1 个答案:

答案 0 :(得分:0)

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

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

您可以反转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)上的函数
  3. 重复直到收敛/最优状态。

    编辑:我没有在4个维度中对其进行可视化,但是使用函数z = f(x,y)

    是有意义的