Main Content

このページは機械翻訳を使用して翻訳されました。元の英語を参照するには、ここをクリックします。

結果を再現する

擬似乱数による同一の回答

GlobalSearchMultiStart は、開始点の選択に疑似乱数を使用します。同じ疑似乱数ストリームを再度使用して、次の操作を行います。

  • さまざまなアルゴリズム設定を比較します。

  • 例を繰り返し実行します。

  • 前回の実行の既知の初期セグメントを使用して実行を拡張します。

GlobalSearchMultiStart はどちらもデフォルトの乱数ストリームを使用します。

結果を再現するための手順

  1. 問題を実行する前に、デフォルトの乱数ストリームの現在の状態を保存します。

    stream = rng;
  2. GlobalSearch または MultiStart の問題を実行します。

  3. 乱数ストリームの状態を復元します。

    rng(stream)
  4. 問題を再度実行すると、同じ結果が得られます。

例: GlobalSearch または MultiStart の結果を再現する

この例では、全体的または複数の局所的最小値を見つける の再現可能な結果を取得する方法を示します。この例は、結果を再現するための手順 の手順に従います。

  1. デフォルトの乱数ストリームの現在の状態を保存します。

    stream = rng;
  2. sawtoothxy 関数ファイルを作成します。

    function f = sawtoothxy(x,y)
    [t r] = cart2pol(x,y); % change to polar coordinates
    h = cos(2*t - 1/2)/2 + cos(t) + 2;
    g = (sin(r) - sin(2*r)/2 + sin(3*r)/3 - sin(4*r)/4 + 4) ...
        .*r.^2./(r+1);
    f = g.*h;
    end
  3. problem 構造体と GlobalSearch オブジェクトを作成します。

    problem = createOptimProblem('fmincon',...
        'objective',@(x)sawtoothxy(x(1),x(2)),...
        'x0',[100,-50],'options',...
        optimoptions(@fmincon,'Algorithm','sqp'));
    gs = GlobalSearch('Display','iter');
  4. 問題を実行します:

    [x,fval] = run(gs,problem)
     Num Pts                 Best       Current    Threshold        Local        Local                 
    Analyzed  F-count        f(x)       Penalty      Penalty         f(x)     exitflag        Procedure
           0      465       422.9                                   422.9            2    Initial Point
         200     1730  1.547e-015                              1.547e-015            1    Stage 1 Local
         300     1830  1.547e-015     6.01e+004        1.074                             Stage 2 Search
         400     1930  1.547e-015     1.47e+005         4.16                             Stage 2 Search
         500     2030  1.547e-015     2.63e+004        11.84                             Stage 2 Search
         600     2130  1.547e-015    1.341e+004        30.95                             Stage 2 Search
         700     2230  1.547e-015    2.562e+004        65.25                             Stage 2 Search
         800     2330  1.547e-015    5.217e+004        163.8                             Stage 2 Search
         900     2430  1.547e-015    7.704e+004        409.2                             Stage 2 Search
         981     2587  1.547e-015         42.24        516.6        7.573            1    Stage 2 Local
        1000     2606  1.547e-015    3.299e+004        42.24                             Stage 2 Search
    
    GlobalSearch stopped because it analyzed all the trial points.
    
    All 3 local solver runs converged with a positive local solver exit flag.
    
    x =
      1.0e-007 *
        0.0414    0.1298
    
    fval =
      1.5467e-015

    実行開始時にランダム ストリームの状態が不明であったため、この問題を実行すると異なる結果が得られる可能性があります。

  5. 乱数ストリームの状態を復元します。

    rng(stream)
  6. 問題を再度実行します。同じ出力が得られます。

    [x,fval] = run(gs,problem)
     Num Pts                 Best       Current    Threshold        Local        Local                 
    Analyzed  F-count        f(x)       Penalty      Penalty         f(x)     exitflag        Procedure
           0      465       422.9                                   422.9            2    Initial Point
         200     1730  1.547e-015                              1.547e-015            1    Stage 1 Local
    
    ... Output deleted to save space ...
    
    x =
      1.0e-007 *
        0.0414    0.1298
    
    fval =
      1.5467e-015

並列処理と乱数ストリーム

逐次計算の場合と同じようにアルゴリズムを並列実行すると、MultiStart から再現可能な結果が得られます。MultiStart は疑似ランダムな開始点をローカルで生成し、その開始点を並列プロセッサに配布するため、実行は再現可能です。したがって、並列プロセッサは乱数を使用しません。

並列 MultiStart 実行を再現するには、結果を再現するための手順 で説明されている手順を使用します。MultiStart を並列で実行する方法の説明については、 Global Optimization Toolbox で並列処理を使用する方法 を参照してください。

関連するトピック