Main Content

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

MultiStart

複数の局所最小値を見つける

説明

MultiStart オブジェクトには、run がローカル ソルバーを繰り返し実行して GlobalOptimSolution オブジェクトを生成する方法に影響するプロパティ (オプション) が含まれています。実行すると、ソルバーはさまざまなポイントから開始して、問題に対する複数のローカル ソリューションを見つけようとします。

作成

説明

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

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

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

ms = MultiStart(gs) は、gs GlobalSearch ソルバーの共通パラメータ値を使用して、MultiStart ソルバーである ms を作成します。

プロパティ

すべて展開する

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

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

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

  • 'off' – 表示なし。

例: 'iter'

データ型: char | string

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

例: 1e-4

データ型: double

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

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

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

データ型: double

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

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

データ型: cell | function_handle

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

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

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

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

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

例: @gsplotbestf

データ型: cell | function_handle

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

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

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

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

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

データ型: char | string

ローカル ソルバーの呼び出しを、false または true として指定された複数のプロセッサに分散します。

  • false — 並行して実行しないでください。

  • true — ローカル ソルバーの呼び出しを複数のプロセッサに分散します。

例: true

データ型: logical

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

例: 2e-4

データ型: double

オブジェクト関数

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

すべて折りたたむ

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

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

グローバル最小値を検索するには、fmincon 'sqp' アルゴリズムを使用して、問題の 20 個のインスタンスに対して MultiStart を実行します。

rng default % For reproducibility
opts = optimoptions(@fmincon,'Algorithm','sqp');
problem = createOptimProblem('fmincon','objective',...
    fun,'x0',3,'lb',-5,'ub',5,'options',opts);
ms = MultiStart;
[x,f] = run(ms,problem,20)
MultiStart completed the runs from all start points. 

All 20 local solver runs converged with a positive local solver exitflag.
x = -0.3080
f = -3.9032

デフォルトのプロパティを持つ MultiStart オブジェクトを作成します。

ms = MultiStart
ms = 
  MultiStart with properties:

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

デフォルトよりも緩い許容値を持つ MultiStart オブジェクトを作成します。これにより、ソルバーは互いに近いソリューションをより少なく返します。また、MultiStart では、境界と不等式制約に関して実行可能な初期点のみを実行します。

ms = MultiStart('FunctionTolerance',2e-4,'XTolerance',5e-3,...
    'StartPointsToRun','bounds-ineqs')
ms = 
  MultiStart with properties:

          UseParallel: 0
              Display: 'final'
    FunctionTolerance: 2.0000e-04
              MaxTime: Inf
            OutputFcn: []
              PlotFcn: []
     StartPointsToRun: 'bounds-ineqs'
           XTolerance: 0.0050

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

gs = GlobalSearch('FunctionTolerance',2e-4,'NumTrialPoints',2000)
gs = 
  GlobalSearch with properties:

             NumTrialPoints: 2000
          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

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

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

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

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

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

ms = MultiStart('FunctionTolerance',1e-4)
ms = 
  MultiStart with properties:

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

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

ms = MultiStart(ms,'XTolerance',1e-3,'StartPointsToRun','bounds')
ms = 
  MultiStart with properties:

          UseParallel: 0
              Display: 'final'
    FunctionTolerance: 1.0000e-04
              MaxTime: Inf
            OutputFcn: []
              PlotFcn: []
     StartPointsToRun: 'bounds'
           XTolerance: 1.0000e-03

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

ms.MaxTime = 1800
ms = 
  MultiStart with properties:

          UseParallel: 0
              Display: 'final'
    FunctionTolerance: 1.0000e-04
              MaxTime: 1800
            OutputFcn: []
              PlotFcn: []
     StartPointsToRun: 'bounds'
           XTolerance: 1.0000e-03

アルゴリズム

アルゴリズムの詳細な説明については、マルチスタートアルゴリズム を参照してください。

拡張機能

バージョン履歴

R2010a で導入

すべて展開する