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

fmincon におけるコード生成

コード生成とは

コード生成とは、MATLAB® Coder™ を使用した、MATLAB コードから C コードへの変換です。コード生成には、MATLABCoder ライセンスが必要です。

コード生成は通常、MATLAB を実行していないハードウェアにコードを配布するために使用します。たとえば、動きや計画を最適化するために fmincon を使用して、ロボットにコードを配布できます。

例については、最適化のためのコード生成の基本を参照してください。

コード生成の要件

  • fmincon は、関数 codegen または MATLAB Coder アプリを使用したコード生成をサポートしています。コードを生成するには MATLAB Coder ライセンスが必要です。

  • ターゲット ハードウェアは、標準的な倍精度浮動小数点計算をサポートしていなければなりません。単精度計算や固定小数点計算のコードは生成できません。

  • 生成用のコードはすべて、MATLAB コードでなければなりません。特に、カスタム ブラックボックス関数を fmincon の目的関数として使用することはできません。coder.ceval を使用して、C または C++ でコード化されたカスタム関数を評価することはできます。ただし、そのカスタム関数は MATLAB 関数内で呼び出さなければなりません。

  • コード生成の場合、fminconproblem 引数をサポートしていません。

    [x,fval] = fmincon(problem) % Not supported
  • string や文字名ではなく、関数ハンドルを使用して、目的関数と非線形制約関数を指定しなければなりません。

    x = fmincon(@fun,x0,A,b,Aeq,beq,lb,ub,@nonlcon) % Supported
    % Not supported: fmincon('fun',...) or fmincon("fun",...)
  • fmincon の入力行列 (AAeqlbub など) はすべてフル (非スパース) でなければなりません。関数 full を使用することで、スパース行列を非スパースに変換できます。

  • lb 引数と ub 引数は、x0 引数と同じ数のエントリをもつか、空 [] でなければなりません。

  • 組み込みプロセッサを使用する高度なコード最適化には、Embedded Coder® ライセンスも必要です。

  • fmincon のオプションを含め、関数 optimoptions を使用して指定しなければなりません。オプションには Algorithm オプションを含め、'sqp' または 'sqp-legacy' に設定しなければなりません。

    options = optimoptions('fmincon','Algorithm','sqp');
    [x,fval,exitflag] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options);
  • コード生成では次のオプションをサポートしています。

    • Algorithm'sqp' または 'sqp-legacy' でなければなりません

    • ConstraintTolerance

    • FiniteDifferenceStepSize

    • FiniteDifferenceType

    • MaxFunctionEvaluations

    • MaxIterations

    • ObjectiveLimit

    • OptimalityTolerance

    • ScaleProblem

    • SpecifyConstraintGradient

    • SpecifyObjectiveGradient

    • StepTolerance

    • TypicalX

  • 生成コードでは、オプションに対して限られたエラー チェックしか行われません。そのため、オプションの更新方法として、ドット表記ではなく、optimoptions を使用することを推奨します。

    opts = optimoptions('fmincon','Algorithm','sqp');
    opts = optimoptions(opts,'MaxIterations',1e4); % Recommended
    opts.MaxIterations = 1e4; % Not recommended
  • オプションはファイルから読み込まないでください。そうした場合、コード生成に失敗することがあります。代わりに、コード内でオプションを作成してください。

  • 通常、サポートされていないオプションを指定すると、コード生成の際にそのオプションは暗黙的に無視されます。しかし、ドット表記を使用してプロット関数や出力関数を指定すると、コード生成でエラーが発生することがあります。信頼性を確保するために、サポートされているオプションのみを指定してください。

  • 出力関数とプロット関数はサポートされていないため、fmincon は終了フラグ –1 を返しません。

参考

| |

関連するトピック