文章 "ALGLIB 库优化方法(第二部分)" - 页 4

 
Maxim Dmitrievsky #:

我一直在看这里的 测试图片。图片相符。

我还不明白多维的诀窍,我需要弄清楚。

这是该系列的第一篇文章。思想并没有停滞不前,函数测试集已经朝着复杂化和抵制假成功方法和初始化为零的假阳性方法的方向转变。这就是为什么你应该看看最近的文章,比如这篇文章。

github 上始终有最新的源代码。

测试梯度方法:

https://www.mql5.com/ru/forum/475597/page2#comment_55006029

GitHub - JQSakaJoo/Population-optimization-algorithms-MQL5: Population optimization algorithms
GitHub - JQSakaJoo/Population-optimization-algorithms-MQL5: Population optimization algorithms
  • JQSakaJoo
  • github.com
https://t.me/+vazsAAcney4zYmZi A list of implemented optimization algorithms (M - is a modified improved version, joo - is an algorithm of my development):
 
Andrey Dik #:

这是该系列的第一篇文章。思想并没有停滞不前,函数测试集已经发生了变化,使其变得更加复杂,并打击了初始化为零的方法的假成功,总之是打击了假阳性。这就是为什么你应该看看最近的文章,比如这篇文章。

资料来源始终是最新的

我明白了。如果有时间和愿望,我将制作多维图片。

在三维空间中,我们已经看到了一些图片,它们的梯度甚至会被局部卡住。如果把搜索空间分成几批,它就会固定下来。这就是梯度解算器的工作方式,别无他法。

 
添加了多变量巨型 LBFGS 函数

1000 次测量的结果。浪费服务器时间 - 9 分钟。

似乎没有错误,是根据文章的模具制作的。


 
Andrey Dik #:

这是该系列的第一篇文章。思维并没有停滞不前,函数测试集已经发生了变化,使其变得更加复杂,并抵制假成功方法和初始化为零的误报。这就是为什么你应该看看最近的文章,比如这篇文章。

github 上总是有最新的源代码。

测试梯度方法

https://www.mql5.com/ru/forum/475597/page2#comment_55006029

includnik 中有一个 f-ya,它被使用了吗?

如何确定正确的边界?我的理解是,它的一部分会被提取。

如果我没有缩小边界,那么计算(求最大值)会更复杂吗?

//------------------------------------------------------------------------------
class C_Megacity : public C_Function
{
  public: //===================================================================
  C_Megacity ()
  {
    fuName = "Megacity";

    // 功能边界
    xMinRange = -10.0; xMaxRange = -2;
    yMinRange = -10.5; yMaxRange = 10;

    //最大坐标
    globalMaxFunValue = 1.0; //12.0
    xGlobalMax        = -3.1357545740179393;
    yGlobalMax        = 2.006136371058429;

    //最小坐标
    globalMinFunValue = 0.0; //-1
    xGlobalMin        = -9.5;
    yGlobalMin        = -7.5;
  }

  double Core (double x, double y)
  {
    double a = MathSin (MathSqrt (MathAbs (x - 1.13) + MathAbs (y - 2.0)));
    double b = MathCos (MathSqrt (MathAbs (MathSin (x))) + MathSqrt (MathAbs (MathSin (y - 2.0))));
    double f = a + b;

    double res = floor (MathPow (f, 4)) -
                 floor (2 * exp (-(pow (x + 9.5, 2) + pow (y + 7.5, 2)) / 0.4));

    return Scale (res, -1.0, 12.0, 0.0, 1.0);
  }
};
 
globalMaxFunValue = 1.0; //12.0

对于发现的 25 维情况。我不知道错误出在哪里。


 
Maxim Dmitrievsky #:

如果我不缩小边界,那么计算(求最大值)会更困难吗?

不,不会更复杂。在你的函数中,有多少摩天大楼高于函数最小值和最大值的 50%?我的有多少?如果随机分散点,哪个面的高度更容易超过 50%?- 您的问题所以,再次强调,边界设置不正确。

这里有相关说明: https://www.mql5.com/zh/articles/13923#tag3

我从你的代码中得到了这个结果:

一些不太有趣的结果,但你坚持发布不同试验的最佳结果。运行 20 次试验(按下播放按钮 20 次),或者编写一个模拟多次试验的循环,然后计算平均结果,就像你在文章中所做的那样。

这就引出了一个问题:为什么是 100,000,为什么不是 1,000,000,000,000?


没必要害羞,放十亿就可以了,但不知为什么,你没有显示目标函数的调用次数,到底有多少次调用?在排名测试中,只允许调用目标函数 10,000 次,而对于梯度方法(算法可能会尝试调用更多的 FF),代码中会有一个分界线,如果超过了这个限制,就会输出目标函数的最小值(这些方法都在寻找一个最小值,所以值是相反的)

// 增加功能启动计数器并控制限制----------------
  numberLaunches++;
  if (numberLaunches >= maxNumbLaunchesAllowed)
  {
    fi.Set (0, DBL_MAX);
    CAlglib::MinNLCRequestTermination (state);
    return;
  }

所有这些在前面的文章中都有描述。

Популяционные алгоритмы оптимизации: Алгоритмы эволюционных стратегий (Evolution Strategies, (μ,λ)-ES и (μ+λ)-ES)
Популяционные алгоритмы оптимизации: Алгоритмы эволюционных стратегий (Evolution Strategies, (μ,λ)-ES и (μ+λ)-ES)
  • www.mql5.com
В этой статье будет рассмотрена группа алгоритмов оптимизации, известных как "Эволюционные стратегии" (Evolution Strategies или ES). Они являются одними из самых первых популяционных алгоритмов, использующих принципы эволюции для поиска оптимальных решений. Будут представлены изменения, внесенные в классические варианты ES, а также пересмотрена тестовая функция и методика стенда для алгоритмов.
 
有人问如何获得相同的表面。这并不在方程组中。当问题的维度增加时,迭代次数自然也会增加。如果我们的任务是为生活中的所有情况提供一种灵丹妙药,那么就应该从执行时间的角度进行比较,直到收敛到相同的最大值。
 
Maxim Dmitrievsky 银弹",那么我们应该通过执行时间进行比较。

该类有 GetMinRangeX (), GetMaxRangeX (), GetMinRangeY (), GetMaxRangeY () 方法,使用这些方法可以查询边界(在相应测试函数的代码中可以看到边界)。

实际上,对目标的最大允许访问次数总是有限制的,我们在测试中采用的限制是 10 000 次访问。

如果在计算资源或时间方面没有限制,那么最好不要使用优化算法,而是进行简单的全面枚举,但这在现实生活中从未发生过对各种方法的测试和比较是以 10 000 次命中目标为限进行的。比较算法的全部意义在于,看哪种算法能以更少的目标访问次数获得更好的结果。因此,一种算法需要访问目标的次数越多才能获得可比较的结果,该算法在相应类型的任务中就被认为越弱。

遗憾的是,在有关优化方法的文章中详细描述过的一些非常微妙的要点,您都没有注意到。

 
有没有评价优化质量的具体标准?)如果算法需要更多的迭代次数,它就不好吗?

比较全搜索找到最佳值的速度是一种正常的比较。
 
Maxim Dmitrievsky #:
将找到最佳值的速度与完全蛮力搜索进行比较是一种正常的比较。

在有些情况下,完全蛮力搜索找不到最优值,因为蛮力网格的节点不在最优值上。