記事「ALGLIBライブラリの最適化手法(第2回):」についてのディスカッション - ページ 4

 
Maxim Dmitrievsky #:

ここの テスト写真を見たよ。写真が一致した。

多次元的なもののトリックはまだ理解できていない。

これは連載の第1回目である。思考は止まっておらず、関数のテストセットは複雑化し、メソッドの偽の成功やゼロで初期化された偽陽性への対策という方向に変化している。そのため、最近の記事、例えばこれを見てほしい。

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があります。

同じ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/ja/articles/13923#tag3。

私はあなたのコードからこの結果を得ました:

あまり楽しくない結果ですが、あなたは異なる試行から得られた最良の結果をしつこく投稿しています。20回試行(再生ボタンを20回押す)するか、複数の試行をシミュレートするループを書いて、記事のように平均結果を計算してください。

なぜ10万回なのか、なぜ1,000,000,000,000,000,000回ではないのかという疑問が湧くだろう。


恥ずかしがる必要はない、10億と書けばいい。しかし、なぜか対象関数の呼び出し回数を表示していない、何回呼び出しがあったのか?順位付けテストでは、ターゲット関数への呼び出しは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に制限して行われる。アルゴリズムを比較する要点は、どのアルゴリズムがより良い結果を、より少ないターゲットへのアクセスで得られるかを見ることである。従って、アルゴリズムが同等の結果を得るためにターゲットにアクセスする回数が多ければ多いほど、そのアルゴリズムは対応するタイプのタスクに対して弱いとみなされる。

残念ながら、非常に微妙な点については、最適化手法の記事で詳しく説明されているので、ここでは割愛する。

 
最適化の質を評価する具体的な基準はあるのでしょうか?)もしアルゴリズムがより多くの反復を必要とするなら、それは悪いことなのでしょうか?

全探索と最適を見つけるスピードを比較するのは普通の比較です。
 
Maxim Dmitrievsky #:
完全な総当たり検索と最適を見つけるスピードを比較するのは普通の比較だ。

ブルートフォース・グリッドのノードが最適解に該当しないため、フル・ブルートフォースでは最適解が見つからない場合がある。