。
この例では,問題ベースのアプローチを使用して制約付き非線形最適化問題を解く方法を示します。例は典型的なワークフローを示します。つまり,目的関数を作成し,制約を作成して,問題を解き,結果を調べます。
メモ:
目的关节数または非形制约初等关有关部ででさてていない合成,fcn2optimexpr
を使用して,その非線形関数を最適化式に変換しなければなりません。この例の終わりにあるFCN2OPTIMEXPRをををたた代替化,または非線形関数から最適化式への変換を参照してください。
この问题に対するソルバーベースのアプローチについてについては,制约付き绕线形问题の解法,ソルバーベースを参照してください。
RosenBrock关关をを小气する问题考えます。
“単位円板”(原点を中心ととた半径1の円板)で, という条件で関数 を最小にする を求めます。この問題は非線形制約付きの非線形関数の最小化です。
RosenBrock关关はは最适最适标准的なテスト关键词关键词关键词,点[1]
で一意に最小値0に到達します。この关节は曲線の深い谷に奥行きのない最小値をもつため、最小値の検索がアルゴリズムによっては困難になります。この問題の解は、点[1]
ではありません。この点は制約を満たしていないからです。
このこの図は単位円板円板内rosenbrock关节2つのビューを示します。縦轴縦轴次数,つまりプロットは を示します。等高線は表面プロットの下に描きます。
Rosenbrock = @(x)100*(x(:,2) - x(:,1).^2)。^2 + (1 - x(:,1))%矢量化函数图1 =图(“位置”,[1 200 600 300]);Colormap('灰色的');轴广场;r = 0:.002:1;th = 2 * pi *(0:.002:1);x = r'* cos(th);y = r'* sin(th);z = log(1 + rosenbrock([x(:),y(:)]));z =重塑(z,size(x));%创建子图子平板=子图(1,2,1,“父”,图1);查看([124 34]);网格('在');持有在;%建立表面冲浪(x,y,z,“父”,subplot1,“线型”那'没有任何');%创建轮廓轮廓(X, Y, Z,“父”,子平板1);%创建子图子平板2 =子图(1,2,2,“父”,图1);查看([234 34]);网格('在');持有在%建立表面冲浪(x,y,z,“父”,子平板2,“线型”那'没有任何');%创建轮廓轮廓(X, Y, Z,“父”,子平板2);%创建textarrow.注释(图1,'textarrow',[0.4 0.31],......[0.055 0.16],......'细绳',{的最低(0.7864,0.6177)});%创建箭头注释(图1,'箭',[0.59 0.62],......[0.065 0.34]);标题(“Rosenbrock的功能:两个视图”)举行从
関数ハンドル。
は,任意の数の二维点での。関数を同時に計算します。このベクトル化また,その他のでますのーで
关节 は“目的关关”と呼ばれます。附近,最小化学有关部。不错 は“制约”と呼ばれます。制约は,ソルバーが最小値を探す の结合の范囲を限制します。任意の数量制约(不夹式方程式)をもつをもつます。
最適化に対する問題ベースのアプローチでは,最適化変数を使用して目的関数と制約を定義します。これらの変数を使用して式を作成するには,2つのアプローチがあります。
多項式関数または有理関数の場合,変数で式を直接記述します。
他他タイプの关键词,fcn2optimexpr
をを使最适式あるししし最适最适最适最适最适ますあるし最适最适使使最适最适し最适最适使使最适使しししし最适fcn2optimexpr
をを用しした代替代替化“を参照してください。
このこのでで,目的关键词がががであるのの変でためであるを直接记述できできである直接记述できできであるを直接记述できできである直接直接记述でき'X'
という名の2次元最适适変分数をし。
x = Optimvar('X'、1、2);
最最化学数量不多数式として目的关节。
obj = 100 *(x(2) - x(1)^ 2)^ 2 +(1 - x(1))^ 2;
obj.
を目的关节概率
という名前の最適化問題を作成します。
概率= optimproblem ('客观的',obj);
最最化学数量の项式
nlcons = x(1)^ 2 + x(2)^ 2 <= 1;
非非制约制约问题に含めます。
prob.constraints.circlecons = nlcons;
问题を确认します。
展示(prob)
优化问题:解决:x最小化:((100. *(x(2) - x(1)。^ 2)。^ 2)+(1 - x(1))。^ 2)受Circlecons:(x(1)。^ 2 + x(2)。^ 2)<= 1
最最化问题を解くににに,解决
をには点点,つまり最适化学数量の初値をを指定する构造构造必要必要必要必要必要をををを构造必要必要必要[0 0]
という
値を持つ初点点体X0.
を作成します。
x0.x = [0 0];[SOL,FVAL,EXITFLAG,输出] =求解(prob,x0)
使用Fmincon解决问题。发现满足约束的本地最小值。优化完成,因为目标函数在可行的方向上不降低,到在最优性公差的值内,并且对约束公差的值满足约束。
sol =结构与字段:X:[0.7864 0.6177]
FVAL = 0.0457.
ExitFlag = OptimalAllyolution.
输出=结构与字段:迭代:24 Funccount:34 CounterViroation:0步骤:6.9161E-06算法:'内部点'FirstOrderopt:2.1625E-08 Cgiterations:4消息:'...'最佳:[1x1 struct]求解器:'fmincon'
解にはExitFlag = OptimalAllyolution.
この终了フラグは,解が局所的最であるを示します。ソルバーが成功する場合を参照してください。
終了メッセージは,解が制約を満たしていることを示します。解が実際に実行可能であることをいくつかの方法で確認できます。
输出
構造体のconstrviolation
フィールドで报告され実行不可能性を确认。
Infeas = output.ConstRviroation.
Infeas = 0.
実行不可能性が0の場合,解が実行可能であることを示します。
解での実行不可能性を计算する。
infeas =不可行性(nlcons sol)
Infeas = 0.
ここでも,実行不可能性が0の場合,解が実行可能であることを示します。
X
ののノルムを计算してて以であるであるであること确认确认
nx = norm(sol.x)
nx = 1.0000.
输出
构造体は,反复反复の数(24),ソルバー(粉刺
),および関数評価の回数(84)など,解法プロセスに関する詳細を示します。これらの統計量の詳細は,许容误差と停止条件を参照してください。
fcn2optimexpr
をを用しした代替代替化より複雑な式の場合,目的関数または制約関数の関数ファイルを記述し,fcn2optimexpr
たとえばを使使して最适式変换します。たとえば,disk.m.
ファイルに绕线形关联物关关节ががとますますます。
类型磁盘
函数RadSQR =磁盘(x)Radsqr = x(1)^ 2 + x(2)^ 2;
この关关ファイル最适最适式変换します。
radsqexpr = fcn2optimexpr(@ disk,x);
さらに,プロットプロットルーチンのの最初にされ关键。
をを化式に変换します。
rosenexpr = fcn2optimexpr(rosenbrock,x);
これらの変换変换后のの最适式ををををててててて最适问题最适て问题最适
convprob = OptimProblem('客观的',罗森普,'限制',Radsqexpr <= 1);
新しい問題を表示します。
展示(Commprob)
优化问题:求解:x最小化:anonymousfunction2(x)其中:anonymousfunction2 = @(x)100 *(x(:,2)-x(:,1)。^ 2)。^ 2+(1-x(1-x(:,1))。^ 2;受:磁盘(x)<= 1
新闻问题を解きます。解は基本的に以前と同じです。
[SOL,FVAL,EXITFLAG,输出] =求解(CONDPROB,X0)
使用Fmincon解决问题。发现满足约束的本地最小值。优化完成,因为目标函数在可行的方向上不降低,到在最优性公差的值内,并且对约束公差的值满足约束。
sol =结构与字段:X:[0.7864 0.6177]
FVAL = 0.0457.
ExitFlag = OptimalAllyolution.
输出=结构与字段:迭代:24 Funccount:84 CounterViroation:0 STAPTION:6.9162E-06算法:'内部点'Firstordopt:2.4373E-08 Cgiterations:4消息:'...'最佳:[1x1 struct]求解器:'fmincon'
サポートされている関数の一覧については,最適化変数および式でサポートされる演算を参照してください。