Main Content

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

simulannealbnd

シミュレーテッドアニーリングアルゴリズムを使用して関数の最小値を見つける

説明

x = simulannealbnd(fun,x0) は、目的関数の値を計算する関数ハンドル fun の局所最小値 x を見つけます。x0 は、シミュレーテッド アニーリング アルゴリズムの初期点であり、実数ベクトルです。

メモ

追加パラメーターの受け渡し は、必要に応じて目的関数に追加のパラメータを渡す方法について説明します。

x = simulannealbnd(fun,x0,lb,ub) は、解が常に lb x ub の範囲に存在するように、設計変数 x に上限と下限を定義します。x(i) の下に非有界の場合は lb(i) = -Inf を設定してください。x(i) の上に非有界の場合は ub(i) = Inf を設定してください。

x = simulannealbnd(fun,x0,lb,ub,options) は、options で指定された最適化オプションを使って最小化します。optimoptions を使用して、options を作成します。範囲が存在しない場合は、lb = []ub = [] を設定します。

x = simulannealbnd(problem) は、problem で説明されている構造体 problem の最小値を求めます。

[x,fval] = simulannealbnd(___) は、どの構文でも、解 x での目的関数 fun の値を返します。

[x,fval,exitflag,output] = simulannealbnd(___) は上記に加え、simulannealbnd の終了条件を記述する値 exitflag および最適化プロセスに関する情報を含む構造体 output を返します。

すべて折りたたむ

多くの局所最小値を持つ 2 次元関数である De Jong の第 5 関数を最小化します。この関数は、この例を実行するときに使用できます。

De Jong の第 5 関数をプロットします。

dejong5fcn

[0,0] から始めて simulannealbnd を使用して De Jong の第 5 関数を最小化します。

fun = @dejong5fcn;
x0 = [0 0];
x = simulannealbnd(fun,x0)
simulannealbnd stopped because the change in best function value is less than options.FunctionTolerance.
x = 1×2

  -32.0285   -0.1280

simulannealbnd アルゴリズムは MATLAB® 乱数ストリームを使用するため、異なる結果が得られる可能性があります。

境界領域内で De Jong の第 5 関数を最小化します。この関数は、この例を実行するときに使用できます。

De Jong の第 5 関数をプロットします。

dejong5fcn

[0,0] の点から simulannealbnd を開始し、各コンポーネントの下限を -64、上限を 64 に設定します。

fun = @dejong5fcn;
x0 = [0 0];
lb = [-64 -64];
ub = [64 64];
x = simulannealbnd(fun,x0,lb,ub)
simulannealbnd stopped because the change in best function value is less than options.FunctionTolerance.
x = 1×2

  -15.9790  -31.9593

simulannealbnd アルゴリズムは MATLAB® 乱数ストリームを使用するため、異なる結果が得られる可能性があります。

いくつかのプロット関数を使用するオプションを設定して、simulannealbnd の進行状況を観察します。

いくつかのプロット関数を使用するには、シミュレーテッド アニーリング オプションを設定します。

options = optimoptions('simulannealbnd','PlotFcns',...
          {@saplotbestx,@saplotbestf,@saplotx,@saplotf});

[0,0] の点から simulannealbnd を開始し、各コンポーネントの下限を -64、上限を 64 に設定します。この例を実行するときに使用できる dejong5fcn を最小化します。

rng default % For reproducibility
fun = @dejong5fcn;
x0 = [0,0];
lb = [-64,-64];
ub = [64,64];
x = simulannealbnd(fun,x0,lb,ub,options)

simulannealbnd stopped because the change in best function value is less than options.FunctionTolerance.
x = 1×2

  -15.9790  -31.9593

シミュレーテッドアニーリング最小化のすべての出力を取得します。

この例を実行すると使用できる De Jong の第 5 関数をプロットします。

dejong5fcn

[0,0] の点から simulannealbnd を開始し、各コンポーネントの下限を -64、上限を 64 に設定します。

fun = @dejong5fcn;
x0 = [0,0];
lb = [-64,-64];
ub = [64,64];
[x,fval,exitflag,output] = simulannealbnd(fun,x0,lb,ub)
simulannealbnd stopped because the change in best function value is less than options.FunctionTolerance.
x = 1×2

  -15.9790  -31.9593

fval = 1.9920
exitflag = 1
output = struct with fields:
     iterations: 1762
      funccount: 1779
        message: 'simulannealbnd stopped because the change in best function value is less than options.FunctionTolerance.'
       rngstate: [1x1 struct]
    problemtype: 'boundconstraints'
    temperature: [2x1 double]
      totaltime: 0.8077

simulannealbnd アルゴリズムは MATLAB® 乱数ストリームを使用するため、異なる結果が得られる可能性があります。

入力引数

すべて折りたたむ

最小化される関数。関数ハンドルまたは関数名として指定されます。fun は、ベクトル x を受け取り、実数スカラー f (目的関数が x で評価された値) を返す関数です。

fun はファイルの関数ハンドルとして指定できます。

x = simulannealbnd(@myfun,x0)

ここで myfun は次のような MATLAB® 関数です。

function f = myfun(x)
f = ...            % Compute function value at x

fun は無名関数の関数ハンドルにもなります。

x = simulannealbnd(@(x)norm(x)^2,x0,lb,ub);

例: fun = @(x)sin(x(1))*cos(x(2))

データ型: char | function_handle | string

初期点。実数ベクトルとして指定されます。simulannealbnd は、x0 の要素数を使用して、fun が受け入れる変数の数を決定します。

例: x0 = [1,2,3,4]

データ型: double

下限。実数ベクトルまたは実数配列として指定されます。x0の要素数がlbの要素数と等しい場合、lb

x(i) >= lb(i) (すべての i について)

numel(lb) < numel(x0) の場合、lb は次を指定します。

x(i) >= lb(i) (1 <= i <= numel(lb))

この場合、ソルバーによって警告が発行されます。

例: すべての制御変数が正であることを指定するには、lb = zeros(size(x0))

データ型: double

実数ベクトルまたは実数配列として指定される上限です。x0の要素数がubの要素数と等しい場合、ub

x(i) <= ub(i) (すべての i について)

numel(ub) < numel(x0) の場合、ub は次を指定します。

x(i) <= ub(i) (1 <= i <= numel(ub))

この場合、ソルバーによって警告が発行されます。

例: すべての制御変数が1未満であることを指定するには、ub = ones(size(x0))

データ型: double

最適化オプション。optimoptions によって返されるオブジェクトまたは構造体として指定されます。詳細については、シミュレーテッドアニーリングオプション を参照してください。

optimoptions は、斜体 でリストされているオプションを非表示にします。optimoptions で非表示になっているオプション を参照してください。

{} はデフォルト値を示します。オプションの詳細については、シミュレーテッドアニーリングオプション を参照してください。

オプション説明

AcceptanceFcn

新しいポイントが受け入れられるかどうかを判断するためにアルゴリズムが使用する関数。'acceptancesa' または関数ハンドルとして指定します。

関数ハンドル | {'acceptancesa'}

AnnealingFcn

アルゴリズムが新しいポイントを生成するために使用する関数。組み込みのアニーリング関数または関数ハンドルの名前として指定します。

関数ハンドル | 関数名 | 'annealingboltz' | {'annealingfast'}

DataType

決定変数の種類

'custom' | {'double'}

Display

表示レベル

'off' | 'iter' | 'diagnose' | {'final'}

DisplayInterval

繰り返し表示の間隔

正の整数 | {10}

FunctionTolerance

関数値の終了許容誤差

オプション構造の場合は、TolFun を使用します。

非負のスカラー | {1e-6}

HybridFcn

ソルバーの反復中または反復終了時に、HybridFcn (別の最適化関数) を自動的に実行します。名前または関数ハンドルとして指定します。

ハイブリッド関数を使用する場合を参照してください。

'fminsearch' | 'patternsearch' | 'fminunc' | 'fmincon' | {[]}

または

1行2列のセル配列 | {@solver, hybridoptions}、ただしsolver = fminsearchpatternsearchfminunc、またはfmincon {[]}

HybridInterval

HybridFcn が呼び出される間隔('end' または 'never' でない場合)

正の整数 | 'never' | {'end'}

InitialTemperature

温度の初期値

非負スカラー | 正のベクトル | {100}

MaxFunctionEvaluations

許可される目的関数評価の最大数

オプション構造の場合は、MaxFunEvals を使用します。

非負整数 | {3000*numberOfVariables}

MaxIterations

許容される反復の最大回数

オプション構造の場合は、MaxIter を使用します。

非負整数 | {Inf}

MaxStallIterations

現在の時点での適応度関数値の平均変化がoptions.FunctionTolerance未満となる反復回数

オプション構造の場合は、StallIterLimit を使用します。

非負整数 | {500*numberOfVariables}

MaxTime

アルゴリズムはMaxTime秒間実行された後に停止します

オプション構造の場合は、TimeLimit を使用します。

非負のスカラー | {Inf}

ObjectiveLimit

必要な最小目的関数値

スカラー | {-Inf}

OutputFcn

関数は反復データを取得し、実行時にオプションを変更できます。

オプション構造の場合は、OutputFcns を使用します。

関数ハンドル | 関数ハンドルのセル配列 | {[]}

PlotFcn

反復中に呼び出されるプロット関数

オプション構造の場合は、PlotFcns を使用します。

関数ハンドル | 組み込みプロット関数名 | 関数ハンドルのセル配列 | 組み込みプロット関数名のセル配列 | 'saplotbestf' | 'saplotbestx' | 'saplotf' | 'saplotstopping' | 'saplottemperature' | {[]}

PlotInterval

プロット関数は間隔ごとに呼び出されます

正の整数 | {1}

ReannealInterval

再アニーリング間隔

非負整数 | {100}

TemperatureFcn

温度スケジュールの更新に使用する関数

関数ハンドル | 組み込み温度関数名 | 'temperatureboltz' | 'temperaturefast' | {'temperatureexp'}

例: options = optimoptions(@simulannealbnd,'MaxIterations',150)

データ型: struct

次のフィールドをもつ構造体として指定される問題構造体です。

  • objective — 目的関数

  • x0 — 出発点

  • lbx の下限

  • ubx の上限

  • solver'simulannealbnd'

  • optionsoptimoptions またはオプション構造で作成されたオプション

  • rngstate — 乱数ジェネレータの状態をリセットするためのオプションフィールド

メモ

problem には、上記で指定したすべてのフィールドが含まれている必要があります。

データ型: struct

出力引数

すべて折りたたむ

解。実数ベクトルとして返されます。x のサイズは、x0 と同じサイズです。一般的に、exitflag が正の場合、x は問題の局所解です。

解での目的関数値。実数として返されます。一般的に、fval = fun(x) になります。

simulannealbnd の停止理由。整数として返されます。

終了フラグ意味
1

options.MaxStallIterations 回の反復で目的関数値の変化の平均が options.FunctionTolerance より小さくなっていることを示します。

5

目的関数値が options.ObjectiveLimit より小さくなっていることを示します。

0

関数の評価または反復の最大数に達しました。

-1

出力関数またはプロット関数によって最適化が停止したことを示します。

-2

実行可能点が検出されませんでした。

-5

制限時間を超えたことを示します。

最適化プロセスに関する情報。次のフィールドをもつ構造体として返されます。

  • problemtype — 問題の種類: 制約なしまたは境界制約あり。

  • iterations — 計算された反復回数。

  • funccount — 目的関数の評価回数。

  • message — アルゴリズムが終了した理由。

  • temperature — ソルバーが終了したときの温度。

  • totaltime — ソルバーの実行にかかる合計時間。

  • rngstate — アルゴリズムが開始する直前の MATLAB 乱数ジェネレーターの状態。rngstate の値を使用して、 simulannealbnd の出力を再現できます。結果を再現するを参照してください。

代替機能

アプリ

[最適化] ライブ エディター タスクが simulannealbnd にビジュアル インターフェイスを提供します。

バージョン履歴

R2007a で導入