Main Content

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

GlobalSearch

グローバル最小値を見つける

説明

GlobalSearch オブジェクトには、run がローカル ソルバーを繰り返し実行して GlobalOptimSolution オブジェクトを生成する方法に影響するプロパティ (オプション) が含まれています。実行すると、ソルバーは目的関数の値が最小となるソリューションを見つけようとします。

作成

説明

gs = GlobalSearch は、プロパティがデフォルトに設定された GlobalSearch ソルバーである gs を作成します。

gs = GlobalSearch(Name,Value) は、名前と値のペアを使用してプロパティを設定します。

gs = GlobalSearch(oldGS,Name,Value)oldGS GlobalSearch ソルバーのコピーを作成し、名前と値のペアを使用してプロパティを設定します。

gs = GlobalSearch(ms) は、ms MultiStart ソルバーの共通プロパティ値を持つ GlobalSearch ソルバーである gs を作成します。

プロパティ

すべて展開する

流域半径の減少係数。0 から 1 までのスカラーとして指定されます。連続する開始点が MaxWaitCycle 個盆地内に入ると、盆地の半径は減少します。盆地の半径は 1 - BasinRadiusFactor 倍に減少します。

流域半径の更新を無効にするには、BasinRadiusFactor0 に設定します。

例: 0.5

データ型: double

コマンド ウィンドウへの表示レベル。次の文字ベクトルまたは文字列のいずれかとして指定します。

  • 'final'run が終了した後に概要結果を報告します。

  • 'iter' – 最終サマリーに加えて、最初の fmincon 実行後、ステージ 1 後、200 の開始ポイント後、および fmincon の実行後に結果を報告します。

  • 'off' – 表示なし。

例: 'iter'

データ型: char | string

試行ポイントが既存の吸引域内にあるかどうかを判断するための乗数。非負のスカラーとして指定されます。詳細については、ステージ2のトライアルポイントを調べてfminconが実行されるかどうかを確認します を参照してください。

例: 0.5

データ型: double

ソリューションが等しいと見なす関数値の許容値。非負のスカラーとして指定します。ソルバーは、2 つのソリューションが互いに XTolerance 相対距離内にあり、目的関数値が互いに FunctionTolerance 相対差内にある場合、それらのソリューションを同一と見なします。両方の条件が満たされない場合、ソルバーはソリューションを別個のものとして報告します。すべてのローカル ソルバー実行の結果を取得するには、FunctionTolerance0 に設定します。結果を少なくするには、FunctionTolerance を大きい値に設定します。GlobalSearch の詳細については、fmincon の実行時Update Solution Set を参照してください。MultiStart の詳細については、 GlobalOptimSolution オブジェクトを作成する を参照してください。

例: 1e-4

データ型: double

GlobalSearch が実行される最大時間 (秒単位)。正のスカラーとして指定します。GlobalSearch とそのローカル ソルバーは、実行開始から tictoc で測定された MaxTime 秒が経過すると停止します。

MaxTime は実行中にローカル ソルバーを中断しないため、合計時間は MaxTime を超える場合があります。

例: 180 は、180 秒後にローカル ソルバーの呼び出しが初めて終了したときにソルバーを停止します。

データ型: double

アルゴリズム制御パラメータ。正の整数として指定されます。

  • MaxWaitCycle 回の連続試行ポイントの観測されたペナルティ関数が少なくともペナルティしきい値である場合は、ペナルティしきい値を上げます (PenaltyThresholdFactor を参照)。

  • MaxWaitCycle 連続する試行ポイントが盆地内にある場合は、その盆地の半径を更新します (BasinRadiusFactor を参照)。

例: 40

データ型: double

ステージ 1 ポイントの数。正の整数として指定されます。詳細については、ステージ1スタートポイントを取得して実行 を参照してください。

例: 1000

データ型: double

潜在的な開始点の数。正の整数として指定されます。

例: 3e4

データ型: double

関数ハンドルまたは関数ハンドルのセル配列として指定され、ソルバーの進行状況を報告したり、ソルバーを停止したりします。出力関数は、各ローカル ソルバー呼び出しの後に実行されます。これらは、グローバル ソルバーの開始時と終了時にも実行されます。出力関数 で説明されている構文を使用して出力関数を記述します。カスタム GlobalSearch 出力関数を参照してください。

組み込みの @savelocalsolutions 出力関数は、すべてのローカル ソリューションをベース ワークスペースの localSolTable 変数に保存します。この出力関数は、実行可能なローカル ソリューションだけでなく、実行不可能なローカル ソリューションも保存します。例については、すべてのローカルソリューションを収集を参照してください。

データ型: cell | function_handle

ペナルティしきい値の増加。正のスカラーとして指定されます。詳細については、「大きなカウンター値への対応」を参照してください。

例: 0.4

データ型: double

関数ハンドルまたは関数ハンドルのセル配列として指定された、ソルバーの進行状況をプロットします。プロット関数は、各ローカル ソルバー呼び出しの後に実行されます。これらは、グローバル ソルバーの開始時と終了時にも実行されます。出力関数 で説明されている構文を使用してプロット関数を記述します。

組み込みのプロット関数が 2 つあります。

  • @gsplotbestf は最適な目的関数値をプロットします。

  • @gsplotfunccount は関数評価の回数をプロットします。

MultiStart プロット関数を参照してください。

例: @gsplotbestf

データ型: cell | function_handle

実行の開始ポイントは次のように指定します:

  • 'all' — すべてのスタートポイントを実行します。

  • 'bounds' — 境界を満たす開始点のみを実行します。

  • 'bounds-ineqs' — 境界と不等式制約を満たす開始点のみを実行します。

GlobalSearch は、GlobalSearch アルゴリズムのステージ 2 (メイン ループ) でのみ StartPointsToRun プロパティをチェックします。詳細については、グローバルサーチアルゴリズムを参照してください。

例: 'bounds' は、すべての境界を満たすポイントのみを実行します。

データ型: char | string

ソリューションが等しいと見なすための距離の許容値。非負のスカラーとして指定します。ソルバーは、2 つのソリューションが互いに XTolerance 相対距離内にあり、目的関数値が互いに FunctionTolerance 相対差内にある場合、それらのソリューションを同一と見なします。両方の条件が満たされない場合、ソルバーはソリューションを別個のものとして報告します。すべてのローカル ソルバー実行の結果を取得するには、XTolerance0 に設定します。結果を少なくするには、XTolerance を大きい値に設定します。GlobalSearch の詳細については、fmincon の実行時Update Solution Set を参照してください。MultiStart の詳細については、 GlobalOptimSolution オブジェクトを作成する を参照してください。

例: 2e-4

データ型: double

オブジェクト関数

runマルチスタートソルバーを実行する

すべて折りたたむ

複数の局所最小値を持つ最適化問題を作成し、GlobalSearch を使用して大域最小値を見つけてみます。目的は、6 つのこぶを持つラクダの背中の問題です (ソルバーを実行する を参照)。

rng default % For reproducibility
gs = GlobalSearch;
sixmin = @(x)(4*x(1)^2 - 2.1*x(1)^4 + x(1)^6/3 ...
    + x(1)*x(2) - 4*x(2)^2 + 4*x(2)^4);
problem = createOptimProblem('fmincon','x0',[-1,2],...
    'objective',sixmin,'lb',[-3,-3],'ub',[3,3]);
x = run(gs,problem)
GlobalSearch stopped because it analyzed all the trial points.

All 8 local solver runs converged with a positive local solver exit flag.
x = 1×2

   -0.0898    0.7127

次の構文を使用して、run を呼び出すときに x の目的関数値を要求できます。

[x,fval] = run(gs,problem)

ただし、fval を要求しなかった場合、x で目的関数の値を計算できます。

fval = sixmin(x)
fval = -1.0316

いくつかの局所最小値を持つ関数を考えてみましょう。

fun = @(x) x.^2 + 4*sin(5*x);
fplot(fun,[-5,5])

グローバル最小値を検索するには、fmincon 'sqp' アルゴリズムを使用して GlobalSearch を実行します。

rng default % For reproducibility
opts = optimoptions(@fmincon,'Algorithm','sqp');
problem = createOptimProblem('fmincon','objective',...
    fun,'x0',3,'lb',-5,'ub',5,'options',opts);
gs = GlobalSearch;
[x,f] = run(gs,problem)
GlobalSearch stopped because it analyzed all the trial points.

All 23 local solver runs converged with a positive local solver exit flag.
x = -0.3080
f = -3.9032

デフォルト以外の MultiStart オブジェクトを作成します。

ms = MultiStart('FunctionTolerance',2e-4,'UseParallel',true)
ms = 
  MultiStart with properties:

          UseParallel: 1
              Display: 'final'
    FunctionTolerance: 2.0000e-04
              MaxTime: Inf
            OutputFcn: []
              PlotFcn: []
     StartPointsToRun: 'all'
           XTolerance: 1.0000e-06

ms から利用可能なプロパティを使用する GlobalSearch オブジェクトを作成します。

gs = GlobalSearch(ms)
gs = 
  GlobalSearch with properties:

             NumTrialPoints: 1000
          BasinRadiusFactor: 0.2000
    DistanceThresholdFactor: 0.7500
               MaxWaitCycle: 20
          NumStageOnePoints: 200
     PenaltyThresholdFactor: 0.2000
                    Display: 'final'
          FunctionTolerance: 2.0000e-04
                    MaxTime: Inf
                  OutputFcn: []
                    PlotFcn: []
           StartPointsToRun: 'all'
                 XTolerance: 1.0000e-06

gsms と同じ非デフォルトの値 FunctionTolerance を持ちます。しかし、gsUseParallel プロパティを使用しません。

FunctionTolerance が「1e-4」の GlobalSearch オブジェクトを作成します。

gs = GlobalSearch('FunctionTolerance',1e-4)
gs = 
  GlobalSearch with properties:

             NumTrialPoints: 1000
          BasinRadiusFactor: 0.2000
    DistanceThresholdFactor: 0.7500
               MaxWaitCycle: 20
          NumStageOnePoints: 200
     PenaltyThresholdFactor: 0.2000
                    Display: 'final'
          FunctionTolerance: 1.0000e-04
                    MaxTime: Inf
                  OutputFcn: []
                    PlotFcn: []
           StartPointsToRun: 'all'
                 XTolerance: 1.0000e-06

XTolerance プロパティを 1e-3 に更新し、 StartPointsToRun プロパティを 'bounds' に更新します。

gs = GlobalSearch(gs,'XTolerance',1e-3,'StartPointsToRun','bounds')
gs = 
  GlobalSearch with properties:

             NumTrialPoints: 1000
          BasinRadiusFactor: 0.2000
    DistanceThresholdFactor: 0.7500
               MaxWaitCycle: 20
          NumStageOnePoints: 200
     PenaltyThresholdFactor: 0.2000
                    Display: 'final'
          FunctionTolerance: 1.0000e-04
                    MaxTime: Inf
                  OutputFcn: []
                    PlotFcn: []
           StartPointsToRun: 'bounds'
                 XTolerance: 1.0000e-03

ドット表記を使用して、プロパティを 1 つずつ更新することもできます。

gs.MaxTime = 1800
gs = 
  GlobalSearch with properties:

             NumTrialPoints: 1000
          BasinRadiusFactor: 0.2000
    DistanceThresholdFactor: 0.7500
               MaxWaitCycle: 20
          NumStageOnePoints: 200
     PenaltyThresholdFactor: 0.2000
                    Display: 'final'
          FunctionTolerance: 1.0000e-04
                    MaxTime: 1800
                  OutputFcn: []
                    PlotFcn: []
           StartPointsToRun: 'bounds'
                 XTolerance: 1.0000e-03

アルゴリズム

アルゴリズムの詳細な説明については、グローバルサーチアルゴリズム を参照してください。Ugray ら [1] は、試行ポイントを生成するアルゴリズムと散布探索法の両方について説明しています。

参照

[1] Ugray, Zsolt, Leon Lasdon, John Plummer, Fred Glover, James Kelly, and Rafael Martí. Scatter Search and Local NLP Solvers: A Multistart Framework for Global Optimization. INFORMS Journal on Computing, Vol. 19, No. 3, 2007, pp. 328–340.

バージョン履歴

R2010a で導入

すべて展開する