Main Content

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

メッシュオプションの設定

メッシュの拡張と収縮

MeshExpansionFactor および MeshContractionFactor オプションは、各反復でメッシュ サイズがどれだけ拡大または縮小されるかを制御します。デフォルトの MeshExpansionFactor 値が 2 の場合、パターン検索では、ポーリングが成功するたびにメッシュ サイズが 2 倍になります。デフォルトの MeshContractionFactor 値が 0.5 の場合、パターン検索では、ポーリングが失敗するたびにメッシュ サイズが 0.5 倍になります。

@psplotmeshsizePlotFcn オプションとして設定すると、パターン検索中にメッシュ サイズの拡大と縮小を表示できます。メッシュ サイズと目的関数の値もコマンド ラインに表示するには、Display オプションを 'iter' に設定します。

たとえば、patternsearch と Optimize を使用した制約付き最小化ライブ エディター タスク で説明されている問題を次のように設定します。

  1. コマンドラインに次のように入力します。

    x0 = [2 1 0 9 1 0]';
    Aineq = [-8 7 3 -4 9 0];
    bineq = 7;
    Aeq = [7 1 8 3 3 3; 5 0 -5 1 -5 8; -2 -6 7 1 1 9; 1 -1 2 -2 3 -3];
    beq = [84 62 65 1];
    H = [36 17 19 12  8 15; 
         17 33 18 11  7 14; 
         19 18 43 13  8 16;
         12 11 13 18  6 11; 
          8  7  8  6  9  8; 
         15 14 16 11  8 29];
    
    f = [ 20 15 21 18 29 24 ]';
     
    F = @(x)0.5*x'*H*x + f'*x;
  2. GSSPositiveBasis2N ポーリング メソッドを使用し、反復表示を行い、メッシュ サイズをプロットするためのオプションを作成します。

    options = optimoptions('patternsearch',...
        'PollMethod','GSSPositiveBasis2N',...
        'PlotFcn',@psplotmeshsize,...
        'Display','iter');
  3. 最適化を実行します。

    [x,fval,exitflag,output] = patternsearch(F,x0,...
        Aineq,bineq,Aeq,beq,[],[],[],options);

メッシュ サイズの変化をより明確に確認するには、次のように y 軸を対数スケーリングに変更します。

  1. プロット ウィンドウの Edit メニューから Axes Properties を選択します。

  2. プロパティ エディターで、Rulers タブを選択します。

  3. YScaleLog に設定します。

MATLAB® プロパティ エディターでこれらの設定を更新すると、次の図のようなプロットが表示されます。

最初の 5 回の反復では投票が成功するので、この間メッシュ サイズは着実に増加します。コマンドラインの表示を見ると、最初の失敗したポーリングが反復 6 で発生したことがわかります。

Iter     f-count          f(x)      MeshSize     Method
    0        1        2273.76             1      
    1        2        2251.69             2     Successful Poll
    2        3        2209.86             4     Successful Poll
    3        4        2135.43             8     Successful Poll
    4        5        2023.48            16     Successful Poll
    5        6        1947.23            32     Successful Poll
    6       15        1947.23            16     Refine Mesh

成功した反復 5 では、次の反復のメッシュ サイズが 2 倍になることに注意してください。しかし、失敗した反復 6 では、メッシュ サイズが 0.5 倍になります。

MeshExpansionFactorMeshContractionFactor がパターン検索にどのように影響するかを確認するには、MeshExpansionFactor3.0 に設定し、MeshContractionFactor2/3 に設定します。

options = optimoptions(options,'MeshExpansionFactor',3.0,...
    'MeshContractionFactor',2/3);
[x,fval,exitflag,output] = patternsearch(F,x0,...
    Aineq,bineq,Aeq,beq,[],[],[],options);

最終的な目的関数の値は以前の設定とほぼ同じですが、ソルバーがそのポイントに到達するまでに時間がかかります。

y 軸のスケーリングを対数に変更すると、メッシュ サイズ プロットは次の図のように表示されます。

MeshExpansionFactor3.0 に設定すると、デフォルト値の 2.0 と比較してメッシュ サイズの増加が速くなり、MeshContractionFactor2/3 に設定すると、デフォルト値の 0.5 と比較してメッシュ サイズがゆっくりと減少することに注意してください。

メッシュアクセラレータ

メッシュ アクセラレータは、メッシュ許容値に到達するために必要な反復回数を減らすことで、パターン検索をより速く最適なポイントに収束させることができます。メッシュ サイズが特定の値を下回る場合、パターン検索ではメッシュ サイズが MeshContractionFactor 係数よりも小さい係数で縮小されます。メッシュ アクセラレータは、GPS および GSS アルゴリズムにのみ適用されます。

メモ

最良の結果を得るには、目的関数が最適点の近くでそれほど急峻でない問題にメッシュ アクセラレータを使用してください。そうしないと、精度が多少低下する可能性があります。微分可能な問題の場合、これは導関数の絶対値が解の近くでそれほど大きくないことを意味します。

メッシュ アクセラレータを使用するには、AccelerateMesh オプションを true に設定します。

たとえば、patternsearch と Optimize を使用した制約付き最小化ライブ エディター タスク で説明されている問題を次のように設定します。

  1. コマンドラインに次のように入力します。

    x0 = [2 1 0 9 1 0];
    Aineq = [-8 7 3 -4 9 0];
    bineq = 7;
    Aeq = [7 1 8 3 3 3; 5 0 -5 1 -5 8; -2 -6 7 1 1 9; 1 -1 2 -2 3 -3];
    beq = [84 62 65 1];
    H = [36 17 19 12  8 15; 
         17 33 18 11  7 14; 
         19 18 43 13  8 16;
         12 11 13 18  6 11; 
          8  7  8  6  9  8; 
         15 14 16 11  8 29];
    
    f = [ 20 15 21 18 29 24 ]';
     
    F = @(x)0.5*x'*H*x + f'*x;
  2. メッシュ アクセラレータを含むオプションを作成します。

    options = optimoptions('patternsearch',...
        'PollMethod','GSSPositiveBasis2N',...
        'Display','iter','AccelerateMesh',true);
  3. 最適化を実行します。

    [x,fval,exitflag,output] = patternsearch(F,x0,... 
       Aineq,bineq,Aeq,beq,[],[],[],options);

patternsearch は 78 回の反復で完了しますが、メッシュ アクセラレータがオンでない場合は 84 回の反復で完了します。メッシュ アクセラレータの効果は反復表示で確認できます。メッシュ アクセラレーションありとなしで例を実行します。メッシュ サイズは反復 70 までは同じですが、反復 71 では異なります。MATLAB コマンド ウィンドウには、アクセラレータなしの反復 70 および 71 に対して次の行が表示されます。

Iter     f-count        f(x)       MeshSize      Method
   70      618        1919.54     6.104e-05     Refine Mesh
   71      630        1919.54     3.052e-05     Refine Mesh

メッシュ サイズは 0.5 (デフォルト値は MeshContractionFactor) で乗算されることに注意してください。

比較のために、コマンド ウィンドウには、アクセラレータを使用した同じ反復回数の次の行が表示されます。

Iter     f-count        f(x)       MeshSize      Method
   70      618        1919.54     6.104e-05     Refine Mesh
   71      630        1919.54     1.526e-05     Refine Mesh

この場合、メッシュ サイズは 0.25 倍になります。

関連するトピック