主要内容

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

制約付き非線形問題の解法,ソルバーベース

典型的な最适化问题

この例では、优化工具箱™ソルバーを使用して,制約付き非線形問題を解く方法を説明します。例は典型的なワークフローを示します。つまり,目的関数を作成し,制約を作成して,問題を解き,結果を調べます。

この例では,问题を解くための2つのアプローチ示します.1つは,最適化ライブエディタータスクというビジュアルアプローチを使用します。もう1つは,MATLAB®コマンドラインというテキストベースのアプローチを使用します。この種の問題は、問題ベースのアプローチを使用して解くこともできます。制約付き非線形問題の解法,問題ベースを参照してください。

Rosenbrock关关

问题は,Rosenbrock关关を小小化するです。

f x One hundred. x 2 x 1 2 2 + 1 x 1 2

"単位円板"(原点を中心とした半径 1.の円板) で最小化します。つまり、 x 1 2 + x 2 2 1 という条件で関数f(x)を最小にするxを求めます。この問題は非線形制約をもつ非線形関数の最小化です。

メモ

。関数は最適化の標準的なテスト関数であり,点[1]で一意に最小値 0に到達します。この関数は曲線の深い谷に奥行きのない最小値をもつため、最小値の検索がアルゴリズムによっては困難になります。この問題の解は、点[1]ではありません。この点は制約を満たしていないからです。

この図は単位円板内の 罗森布鲁克関数の 2.つのビューを示します。縦軸は対数、つまりプロットは对数(1+f(x))を示します。等高線は表面プロットの下に描きます。

対数で表した。関数の2つのビュー

図を生成するコード

関数f(x)は "目的関数"と呼ばれます。目的関数は,最小化する関数です。不等式 x 1 2 + x 2 2 1 "制約" と呼ばれます。制約は、ソルバーが最小値を探す xの集合の範囲を限定します。任意の数の制約 (不等式または等式) をもつことができます。

优化工具箱のすべての最適化関数は目的関数を最小化します。関数 Fを最大化するには、関数を負にして –Fを最適化ルーチンに適用します。最大化の詳細は、目的関数の最大化を参照してください。

最適化ライブエディタータスクを使用した問題の定義と解決

最適化ライブ エディター タスクを使用すれば、ビジュアル アプローチで問題を設定して解くことができます。

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

    新建实时脚本按钮

  2. 最適化ライブエディタータスクを挿入します。[挿入]タブをクリックしてから,[コード]セクションで、[タスク]、[最適化)を選択します。

    优化实时编辑器任务

  3. タスクの[問題の種類の指定)セクションで、[目的]、[非線形]を選択して,[制約]、[非線形]を選択します。タスクが[fmincon -制約付き非線形最小化)ソルバーを選択します。

  4. 。関数を目的関数として含めます。タスクの[问题のデータの选択]セクションで、[目的関数]、[ローカル関数]を選択してから、[新規...]ボタンをクリックします。新しいローカル関数がタスクの下のセクションに表示されます。

    函数f=目标FCN(最佳输入)%例如:%最小化Rosenbrock函数% f = 100*(y - x)^2 + (1 - x)^2%编辑下面的线路随着计算x = optimInput (1);y = optimInput (2);F = 100*(y - x)^2 + (1 - x)^2;结束

    この関数が 罗森布鲁克関数を実装します。

  5. タスクの[问题のデータの选択]セクションで、(目的関数],[objectiveFcn]を選択します。

  6. 初期点x0 = (0, 0)をMATLABワークスペースに配置します。タスクをクリックしてから,[挿入]タブで[セクション区切り]ボタンをクリックすることによって,最適化タスクの上に新しいセクションを挿入します。タスクの上の新しいセクションに、初期点の次のコードを入力します。

    x0=[0;0];
  7. 按Ctrl + Enterを押してセクションを実行します。このアクションによって,x0がワークスペースに配置されます。

  8. タスクの[问题のデータの选択]セクションで、(初期点(x0)], [x0]を選択します。

    目标函数与x0

  9. [问题のデータの选択]セクションで、[制約]、[非線形]、[ローカル関数]を選択してから、[新規...]ボタンをクリックします。新しいローカル関数が以前のローカル関数の下に表示されます。

  10. 新しいローカル関数を次のように編集します。

    函数[c,ceq]=unitdisk(x)c=x(1)^2+x(2)^2-1;ceq=[];结束
  11. [问题のデータの选択]セクションで,制約関数として[单位磁盘]を選択します。

    问题数据:目标、初始点、非线性约束

  12. ソルバーの進行状況をモニターするには、タスクの[進行状況の表示]セクションで、[テキスト表示]、[各反復]を選択します。また,プロットの[目的値と実行可能性]を選択します。

    迭代显示和目标值及可行性图函数

  13. ソルバーを実行するには、タスク ウィンドウの右上にあるオプション ボタン(⁝)をクリックして,[セクションの実行]を選択します。別の 图形ウィンドウと出力領域にプロットが表示されます。

    函数值通常会随着迭代的进行而减少

    出力領域には,結果の解釈で説明する反復の表が表示されます。

  14. 解を見つけるには,タスクの一番上を確認します。

    从fmincon返回

    ソルバーは、変数の解决方案客观价值をワークスペースに配置します。タスクの下に新しいセクション区切りを挿入して次の行を入力することによって、変数の値を確認します。

    disp(解决方案);disp (objectiveValue)

  15. 按Ctrl + Enterを押してセクションを実行します。

    解决方案=[0.7864,0.6177]。objectiveValue=0.0457。

    結果を取得するための铁铬镍铁合金プロセスを理解するには,結果の解釈を参照してください。

  16. 問題を解くために最適化が生成するコードを表示するには,タスクウィンドウの右上にあるオプションボタン(⁝)をクリックして,[コントロールおよびコード]を選択します。

    控制和代码

    タスクの一番下に、次のコードが表示されます。

    设置非默认解算器选项选项= Optimoptions('粉丝'“显示”“通路”“PlotFcn”...“optimplotfvalconstr”);%解决[解决方案,objectiveValue]=fmincon(@objectiveFcn,x0,[],[],[],[],[],[],[],[],[],...@单位磁盘(可选);

    このコードは,後述するようにコマンドラインで問題を解くために使用するコードです。

コマンド ラインでの問題の定義と解決

コマンドラインでで化问题解く最初最初のステップソルバー选択选択ですですですです。最適化の意思決定表を参照してください。非線形目的関数と非線形制約を伴う問題の場合は,铁铬镍铁合金ソルバーを使用するのが一般的です。

铁铬镍铁合金関数のリファレンス ページを参照してください。ソルバー構文は次のとおりです。

[x,fval]=fmincon(趣味、x0、A、b、Aeq、beq、lb、ub、非LCON、选项)

有趣的入力と非LCON入力は,それぞれ,目的関数と非線形制約関数を表します。

問題は次のように表されます。

  1. 目的関数をMATLAB言語で,関数ファイルまたは無名関数として定義します。この例では関数ファイルを使用します。

  2. 制約を別の関数ファイルまたは無名関数として定義します。

関数ファイルは、MATLABコマンドを含むテキスト ファイルで、拡張子は00です。任意のテキスト エディターまたは組み込みの MATLABエディターを使用して以下のように関数ファイルを作成します。

  1. コマンドラインで,以下を入力します。

    编辑
  2. MATLABエディター上で以下を入力します。

    %%ROSENBROCK(x)需要一个两列矩阵并返回一个列向量%输出为Rosenbrock函数,其最小值为%(1,1)的值为0,并且在其他地方严格为正。函数F = 100*(x(:,2) - x(:,1).^2)^2 + (1 - x(:,1))

    メモ

    は、同時にいくつかの点の値を計算できるベクトル関数です。詳細は、ベクトル化を参照してください。ベクトル関数は,プロットに最適です。非ベクトルバージョンの場合は,以下を入力します。

    %% ROSENBROCK1(x)期望一个二元向量并返回一个标量%输出为Rosenbrock函数,其最小值为%(1,1)的值为0,并且在其他地方严格为正。函数f = rosenbrock1 f (x) = 100 * (x (2) - x (1) ^ 2) ^ 2 + (1 - x (1)) ^ 2;
  3. ファイルを罗森布鲁克という名前で保存します。

制約関数の形式は,c (x)≤0またはceq(x)=0。です。制約 x 1 2 + x 2 2 1 はソルバーが処理する形式ではありません。正しい構文にするには,制約を x 1 2 + x 2 2 1 0 として再定式化します。

非線形制約の構文は,等式と不等式の両方の制約を返します。この例には不等式制約のみが含まれるため、等式の制約関数 ceq として空の配列[]を渡さなければなりません。

これらを考慮して,非線形制約の関数ファイルを記述します。

  1. 以下のコードを含むunitdisk.mという名前のファイルを作成します。

    函数[c,ceq]=unitdisk(x)c=x(1)^2+x(2)^2-1;ceq=[];
  2. ファイルunitdisk.mを保存します。

これで、目的関数と制約関数を定義したため、他の铁铬镍铁合金入力を作成します。

  1. “optimplotfvalconstr”プロット関数を使用して反復表示を返す铁铬镍铁合金用のオプションを作成します。

    选项= Optimoptions('粉丝'...“PlotFcn”“optimplotfvalconstr”...“显示”“通路”);
  2. 初期点を作成します。

    X0 = [0 0];
  3. この例では使用しない制約用の空のエントリを作成します。

    A=[];b=[];Aeq=[];beq=[];lb=[];ub=[];

铁铬镍铁合金を呼び出して問題を解きます。

[x,fval]=fmincon(趣味、x0、A、b、Aeq、beq、lb、ub、非LCON、选项)
Iter F计数F(x)的一阶范数(3)一般英语英语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇1.311e+001.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.2.2.8 8 8.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0级级级级(1 1 1 0.000e+00 1.883e-02 3.774e-035.4.964194e-02 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8+00 3.136e-03 3.379e-03 21 754.568281e-02 0.000e+00 6.440e-05 3.974e-05 22 78 4.568281e-02 0.000e+00 8.000e-06 1.084e-07 23 81 4.567641e-02 0.000e+00 1.601e-06 2.793e-05 24 84 4.567482e-02 0.000e+00 2.023e-08 6.916e-06满足约束条件的局部最小值。优化已完成,因为目标函数在可行方向上不递减,在最优性公差值范围内,且约束满足在约束公差值范围内。x=0.7864 0.6177 fval=0.0457

函数值通常会随着迭代的进行而减少

この終了メッセージは,目的関数の導関数が制約で認められた方向でほぼ0となるため制約付き最適解の検索は終了したこと,および制約は必要な精度で満たされていることを示します。メッセージの中のフレーズのいくつかは,メッセージ内で使用される用語に関するより多くの情報へのリンクを含んでいます。このリンクの詳細は,より詳細な終了メッセージを参照してください。

結果の解釈

ライブエディタータスクの出力領域とMATLABコマンドウィンドウの両方の反復表に,MATLABがどのように単位円板内で。関数の最小値を検索したかが表示されます。この表はツールボックスのバージョンや計算プラットフォームによって異なる場合があります。次の説明がこの例で示す表に適用されます。

  • 1.列目はIterとラベル付けされ0から24までの反復数を示します。铁铬镍铁合金は収束するために24回反復を行いました。

  • 2.列目はF-countとラベル付けされ、罗森布鲁克関数が評価された累積回数を示します。最後の行は 84のF-countを示し,铁铬镍铁合金が最小値を検索する過程で84回。関数を計算したことを示します。

  • 3.列目はf(x)とラベル付けされ、目的関数の値を表示します。最終値4.567482e-2は,最適化の実行で報告される最小値で、コマンド ウィンドウの終了メッセージの最後に表示されます。

  • 4列目の可行性は,すべての反復に対して0です。この列は、制約が正となる各反復での制約関数UnitDisk.の値を示します。すべての反復でUnitDisk.の値は負であったため,どの反復でも制約は満たされています。

反復の表の他の列は反复表示で説明されています。

参考

|

関連するトピック