このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
この例では、优化工具箱™ソルバーを使用して,制約付き非線形問題を解く方法を説明します。例は典型的なワークフローを示します。つまり,目的関数を作成し,制約を作成して,問題を解き,結果を調べます。
この例では,问题を解くための2つのアプローチ示します.1つは,最適化ライブエディタータスクというビジュアルアプローチを使用します。もう1つは,MATLAB®コマンドラインというテキストベースのアプローチを使用します。この種の問題は、問題ベースのアプローチを使用して解くこともできます。制約付き非線形問題の解法,問題ベースを参照してください。
问题は,Rosenbrock关关を小小化するです。
"単位円板"(原点を中心とした半径 1.の円板) で最小化します。つまり、 という条件で関数f(x)を最小にするxを求めます。この問題は非線形制約をもつ非線形関数の最小化です。
メモ
。関数は最適化の標準的なテスト関数であり,点[1]
で一意に最小値 0に到達します。この関数は曲線の深い谷に奥行きのない最小値をもつため、最小値の検索がアルゴリズムによっては困難になります。この問題の解は、点[1]
ではありません。この点は制約を満たしていないからです。
この図は単位円板内の 罗森布鲁克関数の 2.つのビューを示します。縦軸は対数、つまりプロットは对数(1+f(x))を示します。等高線は表面プロットの下に描きます。
対数で表した。関数の2つのビュー
関数f(x)は "目的関数"と呼ばれます。目的関数は,最小化する関数です。不等式 は"制約" と呼ばれます。制約は、ソルバーが最小値を探す xの集合の範囲を限定します。任意の数の制約 (不等式または等式) をもつことができます。
优化工具箱のすべての最適化関数は目的関数を最小化します。関数 Fを最大化するには、関数を負にして –Fを最適化ルーチンに適用します。最大化の詳細は、目的関数の最大化を参照してください。
最適化ライブ エディター タスクを使用すれば、ビジュアル アプローチで問題を設定して解くことができます。
[ホーム]タブの[ファイル]セクションで(新規ライブスクリプト]をクリックして,新しいライブスクリプトを作成します。
最適化ライブエディタータスクを挿入します。[挿入]タブをクリックしてから,[コード]セクションで、[タスク]、[最適化)を選択します。
タスクの[問題の種類の指定)セクションで、[目的]、[非線形]を選択して,[制約]、[非線形]を選択します。タスクが[fmincon -制約付き非線形最小化)
ソルバーを選択します。
。関数を目的関数として含めます。タスクの[问题のデータの选択]セクションで、[目的関数]、[ローカル関数]を選択してから、[新規...]ボタンをクリックします。新しいローカル関数がタスクの下のセクションに表示されます。
函数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;结束
この関数が 罗森布鲁克関数を実装します。
タスクの[问题のデータの选択]セクションで、(目的関数],[objectiveFcn]を選択します。
初期点x0 = (0, 0)
をMATLABワークスペースに配置します。タスクをクリックしてから,[挿入]タブで[セクション区切り]ボタンをクリックすることによって,最適化タスクの上に新しいセクションを挿入します。タスクの上の新しいセクションに、初期点の次のコードを入力します。
x0=[0;0];
按Ctrl + Enterを押してセクションを実行します。このアクションによって,x0
がワークスペースに配置されます。
タスクの[问题のデータの选択]セクションで、(初期点(x0)], [x0]を選択します。
[问题のデータの选択]セクションで、[制約]、[非線形]、[ローカル関数]を選択してから、[新規...]ボタンをクリックします。新しいローカル関数が以前のローカル関数の下に表示されます。
新しいローカル関数を次のように編集します。
函数[c,ceq]=unitdisk(x)c=x(1)^2+x(2)^2-1;ceq=[];结束
[问题のデータの选択]セクションで,制約関数として[单位磁盘]
を選択します。
ソルバーの進行状況をモニターするには、タスクの[進行状況の表示]セクションで、[テキスト表示]、[各反復]を選択します。また,プロットの[目的値と実行可能性]を選択します。
ソルバーを実行するには、タスク ウィンドウの右上にあるオプション ボタン(⁝)をクリックして,[セクションの実行]を選択します。別の 图形ウィンドウと出力領域にプロットが表示されます。
出力領域には,結果の解釈で説明する反復の表が表示されます。
解を見つけるには,タスクの一番上を確認します。
ソルバーは、変数の解决方案
と客观价值
をワークスペースに配置します。タスクの下に新しいセクション区切りを挿入して次の行を入力することによって、変数の値を確認します。
按Ctrl + Enterを押してセクションを実行します。
結果を取得するための铁铬镍铁合金
プロセスを理解するには,結果の解釈を参照してください。
問題を解くために最適化が生成するコードを表示するには,タスクウィンドウの右上にあるオプションボタン(⁝)をクリックして,[コントロールおよびコード]を選択します。
タスクの一番下に、次のコードが表示されます。
设置非默认解算器选项选项= Optimoptions('粉丝',“显示”,“通路”,“PlotFcn”,...“optimplotfvalconstr”);%解决[解决方案,objectiveValue]=fmincon(@objectiveFcn,x0,[],[],[],[],[],[],[],[],[],...@单位磁盘(可选);
このコードは,後述するようにコマンドラインで問題を解くために使用するコードです。
コマンドラインでで化问题解く最初最初のステップソルバー选択选択ですですですです。最適化の意思決定表を参照してください。非線形目的関数と非線形制約を伴う問題の場合は,铁铬镍铁合金
ソルバーを使用するのが一般的です。
铁铬镍铁合金
関数のリファレンス ページを参照してください。ソルバー構文は次のとおりです。
[x,fval]=fmincon(趣味、x0、A、b、Aeq、beq、lb、ub、非LCON、选项)
有趣的
入力と非LCON
入力は,それぞれ,目的関数と非線形制約関数を表します。
問題は次のように表されます。
目的関数をMATLAB言語で,関数ファイルまたは無名関数として定義します。この例では関数ファイルを使用します。
制約を別の関数ファイルまたは無名関数として定義します。
関数ファイルは、MATLABコマンドを含むテキスト ファイルで、拡張子は00
です。任意のテキスト エディターまたは組み込みの MATLABエディターを使用して以下のように関数ファイルを作成します。
コマンドラインで,以下を入力します。
编辑。
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;
ファイルを罗森布鲁克
という名前で保存します。
制約関数の形式は,c (x)≤0またはceq(x)=0。です。制約 はソルバーが処理する形式ではありません。正しい構文にするには,制約を として再定式化します。
非線形制約の構文は,等式と不等式の両方の制約を返します。この例には不等式制約のみが含まれるため、等式の制約関数 ceq として空の配列[]
を渡さなければなりません。
これらを考慮して,非線形制約の関数ファイルを記述します。
以下のコードを含むunitdisk.m
という名前のファイルを作成します。
函数[c,ceq]=unitdisk(x)c=x(1)^2+x(2)^2-1;ceq=[];
ファイルunitdisk.m
を保存します。
これで、目的関数と制約関数を定義したため、他の铁铬镍铁合金
入力を作成します。
“optimplotfvalconstr”
プロット関数を使用して反復表示を返す铁铬镍铁合金
用のオプションを作成します。
选项= Optimoptions('粉丝',...“PlotFcn”,“optimplotfvalconstr”,...“显示”,“通路”);
初期点を作成します。
X0 = [0 0];
この例では使用しない制約用の空のエントリを作成します。
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.
の値は負であったため,どの反復でも制約は満たされています。
反復の表の他の列は反复表示で説明されています。