ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

最適化アプリの代替方法

アプリを使用せずに最適化する

最適化アプリはオプションを設定して問題を実行するための便利な方法を提供していますが、将来のリリースで削除される予定です。このトピックは、アプリを使用せずにタスクを実行するその他の方法を説明します。

ライブ スクリプトを使用したオプションの設定

R2018a から、ライブ スクリプトで optimoptions 名および値の提案が表示されるようになりました。

  1. [ホーム] タブの [ファイル] セクションで、[新規ライブ スクリプト] をクリックして、ライブ スクリプトを作成します。

  2. ライブ エディターで、options = optimoptions( を入力してオプションを設定します。MATLAB® がソルバーのリストを表示します。

  3. ソルバーを選択し、その後、コンマを入力します。MATLAB がソルバーの名前と値のペアのリストを表示します。

    以下のいずれかの方法で名前と値のペアを選択します。

    • 名前と値のペアをクリックします。

    • 方向キーを使用して名前と値のペアを強調表示し、その後、Tab を押します。

    • 名前と値のペアの最初の 1 文字以上を入力して、Tab を押します。

  4. 選択した名前に適した値を入力します。値をリストから選択した場合は、名前を選択した場合と同様に値を選択できます。

  5. オプションが完了するまで、名前と値のペアの追加を続行します。

  6. オプションを必ずソルバーに渡してください。

    [x,fval,exitflag,output] = ...
        fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nlcon,options)

ヒント

オプションの設定: コマンド ラインまたは標準スクリプト

R2018a から、MATLAB コマンド ラインと標準エディターで optimoptions 名および値の提案が表示されるようになりました。

  1. options = optimoptions(' と入力し、Tab を押して、オプションを設定します。MATLAB がソルバーのリストを表示します。

  2. いずれかの方法でソルバーを選択します。

    • ソルバーをダブルクリックします。

    • 方向キーを使用してソルバーを強調表示し、その後、Tab を押します。

    • ソルバーの最初の 1 文字以上を入力して、Tab を押します。

  3. ',' を入力して、Tab を押します。MATLAB がソルバーの名前と値のペアのリストを表示します。

    名前と値のペアを選択するには、ステップ 2 で説明した方法のいずれかを使用します。

  4. 選択した名前に適した値を入力します。値をリストから選択した場合は、名前を選択した場合と同様に値を選択できます。

  5. オプションが完了するまで、名前と値のペアの追加を続行します。

  6. オプションを必ずソルバーに渡してください。

    [x,fval,exitflag,output] = ...
        fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nlcon,options)

ヒント

プロット関数の選択

最適化を実行しながら監視するには、プロット関数を使用します。ソルバーには一連の組み込みプロット関数があります。optimoptions を使用して 'PlotFcn' の名前と値のペアを、組み込みプロット関数、組込みプロット関数のセル配列、またはプロット関数への関数ハンドルもしくは関数ハンドルの cell 配列に設定します。

ライブ スクリプトを使用したプロット関数の選択:

エディターまたはコマンド ラインを使用してプロット関数を選択するには、options = optimoptions('solvername','PlotFcn',{' と入力して、Tab を押します。

カスタム プロット関数を選択するには、@myplotfun などの関数ハンドルを渡します。カスタム プロット関数の記述についての詳細は、プロット関数の構文を参照してください。

linproglsqlinquadprog、および lsqnonneg は、プロット関数をサポートしていません。これらのソルバーは通常、あっという間に実行されるためです。進行状況を監視するためには、linprog の反復表示、lsqlin 'interior-point' アルゴリズム、および quadprog 'interior-point-convex' アルゴリズムが使用できます。'Display' オプションを 'iter' に設定します。

fminbndfminsearchfzero の各ソルバーは、optimoptions によって作成されたオプションを使用せず、optimset によって作成されたオプションのみを使用します。これらのソルバーがどのプロット関数を使用するかを確認するには、それぞれのリファレンス ページを参照してください。

ソルバーの引数を渡す

ソルバーは位置関数の引数を使用します。たとえば、fmincon 引数の構文は以下のとおりです。

fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)

funx0lboptions の引数のみを含める場合、適切な構文は以下のとおりです。

fmincon(fun,x0,[],[],[],[],lb,[],[],options)

不慣れな場合、代わりに次のように記述されます。

fmincon(fun,x0,lb,options) % This is incorrect!

この呼び出しはエラーをスローします。この不適切なコマンドでは、fmincon によって lb 引数が行列 A を表し、options 引数がベクトル b を表すものとして解釈されます。3 番目の引数は常に行列 A を表し、4 番目の引数は常にベクトル b を表します。

コマンドの入力時に位置引数の追跡が困難になる場合があります。以下は、正しい構文を取得するための提案事項です。

  • ライブ スクリプトを使用する。コマンドを入力すると、各位置に正しい引数を入力できるようガイドする関数のヒントが表示されます。使用しない引数には [] を入力します。

  • MATLAB エディターまたはコマンド ラインを使用する。コマンドを入力すると、各位置に正しい引数を入力できるようガイドする適切な構文のリストが表示されます。使用しない引数には [] を入力します。

  • problem 構造体を作成する。この方法では、渡す引数の数を減らし、位置引数の代わりに名前付き引数を渡すことができます。fmincon の場合、problem 構造体には、少なくとも objectivex0solveroptions の各フィールドが必要です。そこで、funx0lboptions の引数のみを提供するために、以下のように problem 構造体を作成します。

    % These commands assume that fun, x0, lb, and opts exist
    prob.objective = fun;
    prob.x0 = x0;
    prob.lb = lb;
    prob.options = opts;
    prob.solver = 'fmincon';

    また、1 つの struct コマンドを使用して problem 構造体を作成することもできます。

    % This command assumes that fun, x0, lb, and opts exist
    prob = struct('objective',fun,'x0',x0,'lb',lb,...
        'options',opts,'solver','fmincon')
  • Global Optimization Toolbox をお持ちの場合は、createOptimProblem を使用して、fminconfminunclsqcurvefit および lsqnonlin 用の問題構造体を作成することができます。

関連するトピック