主要内容

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

カスタムの制約と目的関数を使用した操作点の計算

通常,最適化ベースの探索を使用して仿金宝app真软件®モデルの定常状態の操作点を計算するには,既知の固定値または範囲を指定してモデルの状態,入力,または出力を制約します。ただし,一部のシステムやアプリケーションでは,最適化探索のパラメーター定義においてさらに柔軟性が必要となります。

そのそのなシステムのの合,カスタムの制约制约追加ののその両方を指定することができますますますます。ソフトウェアソフトウェア,定常状态操操点をするときに,标准にに,标准の状态,入力,および出力仕様に加入てこれらカスタムカスタムの制约と目ます适适。

カスタムの等式制約と不等式制約は,モデルの状態,入力,および出力の代数的組み合わせとして指定できます。これらの制約では,入力,出力,および状態間の既知の関係を指定することで操作点の探索空間を制限できます。たとえば,モデルのある状態が他の2つの状態の和となるように指定できます。

また,カスタムのスカラースカラー目的关节,モデルモデル状态,入力,およびおよび出の代できますとして指定するもますて,アプリケーションアプリケーション要件基于てて,アプリケーションのに基于ますて操のに基于ます,可能性ある平衡点がモデルにあるとしますし,入入エネルギーを小の状态安防点を検出状态。

複雑なモデルの場合,モデルの入力,出力,および状態のサブセットを選択してカスタムのコスト関数および制約関数へ渡す,カスタムのマッピング関数を指定できます。

モデルを平衡化する場合,次の方法でカスタムの最適化関数を指定できます。

  • コマンドライン:Operspec.を使用して操作点の仕様を作成し,仕様のCustomConstrFcnCustomCostFcn,およびCustomMappingFcnプロパティを使ってカスタム関数を指定します。

  • 定常状态マネージャーの使用:[仕様]タブで,(平衡化オプション]をクリックします。(平衡化オプション]ダイアログボックスの[カスタム最適化関数)セクションで,关节名词をします。

  • モデル线形化器の使用:[線形解析]タブの[操作点]ドロップダウンリストで,[モデルモデル平面化]をクリックします。[モデルモデル平面化]ダイアログ ボックスで、[オプション]タブの[カスタム最適化関数)セクションで関数名を指定します。

次次例で,カスタムカスタム型关键词作物作物と,コマンドラインラインのカスタムカスタムをしててを平等化学方法を明しし

金宝app仿真软件モデル

この例では,オリフィスで相互に连结さた3つのタンクをもつモデル使し。

mdl ='scdtanks';Open_System(MDL)

Tank1とTank2間のフローは望ましい状態です。Tank2とTank3間のフローは望ましくない回避不可能な漏れです。

このシステムの予想される定常状態は次のようになります。

  • Tank1とTank2のの力がである。

  • Tank2とTank3の间に负荷をするほぼ一切のの力差1がある。

Tank1とTank2の連結が弱いため,Tank1とTank2の圧力が等しくなるようにモデルを平衡化するのは困難です。

カスタマイズカスタマイズなしでののモデルのの化

モデルの既定の操作作作作作作者:所しをははさタンク圧を,平台化さタンクタンク操を定常状态になければならないますな设定なければならないます。

opspec = operspec(mdl);

モデルを平面化するセットを作品成面,作业点探索レポートコマンドウィンドウ非表示に设定しはアプリケーションによって异なりこのこの异なりなりこのなりなりなりなりなりなりなりなりなりなり小小小小最最最小小形形形形最形形形形形形形形形形形を形形ます。

选择= findopOptions ('Optimizertype''lsqnonlin');opt.displayReport =.'off'

モデルを平衡化し,平衡化されたタンク圧力を表示します。

[op0,rpt0] =查找(MDL,OPSPEC,OPT);op0.states.
(1.)SCDTANKS /惯性X:0(2.)SCDTANKS / TANK1 X:9(3)SCDTANKS / TANK2 X:9.5(4)SCDTANKS / TANK3 X:10.5

TANK1とTANK2の平面衡れた圧はししませませませませませではは待される定常状态要件を満たすされるををませを満たす満たすんをませませませませませ制约ませんんんんんんんんんんんんんんんんんんんんんんんんんんんんんんん许容许容opt.optimizationOptions.tolcon.を小さくしたた综合,罐子2と罐3の间に漏れがある,実行可な定常状态解がられません。

カスタムの制约の追加

カスタムの制约を指定するにはは,现处于作业フォルダーかmatlabパス上に,次次の力量引もつ关键词关键

  • x- 操作点のの状态。

  • u——操作点の仕様の入力。ベクトルとして指定します。

  • y- 操作品点仕様のの力。ベクトルとして指定し。

出力量はは次のです。

  • c_ineq- 平坦化中にc_ineq < = 0を満たさなければならない不锈钢。ベクトルとして返されます。

  • c_eq- 平坦化中にc_eq = 0をを満たさなければならない等式ベクトルベクトルとして返されれ。

c_ineqc_eqの各要素は単一の制約を指定します。アプリケーションの具体的な制約を、状態、入力、および出力の代数的な組み合わせとして定義します。カスタムの等式制約や不等式制約がない場合は、対応する出力引数を[]としてとしてます。

このこのでは,予期される定常状态のをため,次のカスタムの关键。

功能[c_ineq, c_eq] = myConstraints (x, y) c_ineq = [];c_eq = [x (2) - x (3);%Tank1压力 -  Tank2压力x(3)-x(4)+1];%油箱2压力-油箱3压力+ 1结束

c_eqの最初のは,罐子1とtank2のの力量が値になるよう制约ます.2番目の等式制约はます.2番目の等式は,tank2とtank3间のの力量低を定义ます。

操作点の仕様にカスタムの制約関数を追加します。

opspec。CustomConstrFcn = @myConstraints;

カスタムの制約を含む修正された操作点の仕様を使用してモデルを平衡化し,平衡化された状態値を表示します。

[op1,rpt1] =查找(MDL,OPSPEC,OPT);op1.states.
(1.) scdTanks/惯性x: 0 (2.) scdTanks/Tank1 x: 9.33 (3.) scdTanks/Tank2 x: 9.33 (4.) scdTanks/Tank3 x: 10.3

カスタムの制約関数を使ってモデルを平衡化すると,予期したとおりに最初と2番目のタンクの圧力が等しい操作点が生成されます。また,想定のとおり,3番目と2番目のタンク間には1の圧力差があります。

指定指定されたた制约の最终値を调べるに,操作业探索レポートのCustomequalityConstr.プロパティとCustomInequalityConstrプロパティをチェックできます。

RPT1.CustomeQualityConstr.
ANS = 1.0E-06 * -0.0001-0.1540

ゼロに近い値は等式制約が満たされていることを示します。

カスタムの目的関数の追加

カスタムの目的关关をを指定には,カスタムの制约关键と同じ力次数(xu,およびy)と出力引数Fをもつ关节数をします。Fは,平面化中にに小音される目的关键词で,スカラーとして返され。

アプリケーション用の目的関数を,状態,入力,および出力の代数的な組み合わせとして定義します。

この例では,Tank3の圧力を[16、20]の範囲内に保持すると仮定します。ただし,この条件が常に可能であるとは限りません。したがって,厳密な制約を課すのではなく,圧力が[16、20]の範囲に収まらない場合にペナルティを課す目的関数を追加します。そのためには,次のカスタムの目的関数を定義します。

功能f = myobjective(x,u,y)f = max(x(4)-20,0)+ max(16-x(4),0);结束

操作点の仕様オブジェクトにカスタムの目的関数を追加します。

opspec.customobjfcn = @myobjective;

カスタムの制约と目目的关关の源をををして操操れししを表示しし化し表示表示し化しを表示しし化化を表示しし化し表示表示しししを表示表示し

(《凤凰社》第2章,rpt2) = findop (mdl opspec,选择);《凤凰社》第2章。州
(1.) scdTanks/惯性x: 0 (2.) scdTanks/Tank1 x: 15 (3.) scdTanks/Tank2 x: 15 (4.) scdTanks/Tank3 x: 16 (3.) scdTanks/Tank2 x: 15 (4.) scdTanks/Tank3 x: 16

平衡化された操作点では,Tank3の圧力がカスタムの目的関数で指定された[16、20]の範囲内にあります。

スカラー目的関数の最終値を表示するには,操作点探索レポートのCustomObjプロパティをチェックします。

rpt2。CustomObj
ans = 0

カスタムのマッピングの追加

,入力,およびおよび力が排除れ,制约と目的关节简介されます。

カスタムのマッピングを指定するには,操作点の仕様opspecを源力量とし,以下をを力引と关键词关键

  • indx- マッピングマッピングされれた状态の

  • indu——マッピングされた入力のインデックス

  • 印第- マッピングマッピングされたたた出のの

ブロックパスと状態名に基づいて状態,入力,および出力のインデックスを取得するには,getStateIndex.getInputIndex,およびgetOutputIndexをのコマンドの使は,モデルの状态追に対して,モデル,インデックスの変更に対してです。indxindu,および印第の形式の详细については,getStateIndex.getInputIndex,およびgetOutputIndexを参照してください。

カスタムの制約と目的関数によって使用される状態,入力,出力がない場合は,対応する出力引数を[]としてとしてます。

このつののは,3つのタンクのの状态状态をには,次ためは,次のカスタムの关键。

功能[Indx,Indu,Indy] = MyMapping(opspec)indx = [getstateindex(opspec,“scdTanks / Tank1”);getStateIndex(OPSPEC,“scdTanks / Tank2”);getStateIndex(OPSPEC,'scdtanks / tank3'));indu = [];印地赛车= [];结束

操作业点のにカスタムマッピングマッピングをマッピングをマッピング。

opspec。CustomMappingFcn = @myMapping;

カスタムのマッピング関数を使用する場合,カスタムの制約および目的関数内の状態,入力,および出力のインデックスは,マッピング関数に指定された順序に対して相対的でなければなりません。カスタムの制約と目的関数を新しいマッピングで更新します。

功能[c_ineq,c_eq] = myConstraintsMap(x,u,y)c_eq = [x - x (1) (2);%Tank1压力 -  Tank2压力x(2)-x(3)+1];%油箱2压力-油箱3压力+ 1结束
功能f = myObjectiveMap(x,u,y)f = max(x(3)-20,0)+ max(16-x(3),0);结束

ここでxu,およびyは,それぞれマッピングされた状態,入力,出力のベクトルです。これらのベクトルは,indxindu,および印第で指定さされるマッピングマッピングれた値ををそれぞれ含み含み

更新されたカスタム関数を操作点の仕様に追加します。

opspec.customconstrfcn = @myconstraintsmap;opspec.customobjfcn = @myobjectivemap;

カスタムマッピングを使用してモデルを平衡化し,平衡化された状態を表示します。これは《凤凰社》第2章での前の結果と一致します。

[op3, rpt3] = findop (mdl opspec,选择);op3。州
(1.) scdTanks/惯性x: 0 (2.) scdTanks/Tank1 x: 15 (3.) scdTanks/Tank2 x: 15 (4.) scdTanks/Tank3 x: 16 (3.) scdTanks/Tank2 x: 15 (4.) scdTanks/Tank3 x: 16

カスタム関数への解析勾配の追加

計算の速度や信頼性を高めるため,カスタムの制約および目的関数に解析勾配を追加できます。勾配を追加することで最適化時の関数呼び出しの回数を減らし,最適化の結果の精度を改善できることがあります。勾配を指定する場合,これはカスタムの制約と目的関数の両方に指定しなければなりません(カスタムの平衡化での勾配はSimscape™モデルではサポートされていません)。

特定の制約または目的関数の勾配を定義するには,その関数の,特定の状態,入力,または出力についての導関数を使用します。たとえば,次の目的関数があるとします。

f =(U(1)+3)^ 2 + y(1)^ 2

このこの合,U(1)についてのFの勾配は次のですです。

g = 2 *(U(1)+3)

カスタムカスタムの制约勾配を追追しししをししし。

  • g_ineq.——不等式制約の勾配配列

  • G_EQ.- 等式制约の勾配配列

g_ineq.G_EQ.の各列に1つの制约の勾配勾配含まれ,列の顺序は対応するベクトルの行のにににし。g_ineq.G_EQ.の両方で,行数はxu,およびyのの,入力,およびおよび力の计に等しくなります。xの状態についての勾配,続いてuのの力量yの出力についての勾配が含まれます。

この例では,カスタムマッピングを使用する制約関数に勾配を追加します。勾配を使用するときにカスタムマッピングを指定する必要はありません。ただし,状態,入力,および出力のマッピングされた部分集合を使用すると,勾配の定義がより簡単です。

功能[c_ineq,c_eq,G_ineq,G_eq] = myConstraintsGrad(x,u,y) c_ineq = [];c_eq = [x - x (1) (2);%Tank1压力 -  Tank2压力x(2)-x(3)+1];%油箱2压力-油箱3压力+ 1g_ineq = [];g_eq = [1 0;-1 1;0 -1];结束

この関数ではG_EQ.行目に状態x(i)についての勾配が含まれています。

同様同様,カスタムの目的关节にをを加するにに,Fの勾配を含む追加の出力引数Gを指定します。Gは,g_ineq.およびG_EQ.の列と同じ形式の列ベクトルとして返されます。

功能(F, G) = myObjectiveGrad (x, y) F = max (x(3) -20,0) +马克斯(16 x (3), 0);如果x(3) >= 20 G = [0 0 1]';elseifx(3) <= 16 G = [0 0 -1]';别的g = [0 0 0]';结束结束

この例の目的関数は区分的に微分可能なので,Gの値はTank3の圧力の値によって異なります。

更新されたカスタム関数を操作点の仕様に追加します。

opspec.customconstrfcn = @myconstraintsgrad;opspec.customobjfcn = @myobjectivegrad;

最适化解で勾配を有效にするは,雅可比矩阵最适化学オプションを有效にし。

opt.optimizationOptions.jacobian =.“上”

定常状态マネージャーまたはモデル线形化器をを用してモデルを平等化化ときに解析ヤコビアン使をにははははは,[解析ヤコビアンを有色化]平坦化学オプションをします。

勾配をもつカスタム関数を使用してモデルを平衡化し,平衡化された状態を表示します。

[op4, rpt4] = findop (mdl opspec,选择);op4。州
(1.) scdTanks/惯性x: 0 (2.) scdTanks/Tank1 x: 15 (3.) scdTanks/Tank2 x: 15 (4.) scdTanks/Tank3 x: 16 (3.) scdTanks/Tank2 x: 15 (4.) scdTanks/Tank3 x: 16

最最化のは,勾配勾配をもたない解结果と同じ同じ同じとと同じ

たとえば,解たとえばますますししするするますますするするするするにしするするにににしするするにはますしするににが改善するにににが改善改善改善改善改善改善にが改善がががするするににがし改善改善にますし改善改善改善改善しし改善改善改善ににます改善するするしししする改善改善改善するするするするするするするし改善するたとえば改善たとえばたとえばたとえばたとえば改善たとえばたとえばたとえばするするするたとえばl

  • 勾配なし:

RPT3.OptimizationOutput.funccount.
ans = 25
  • 勾配あり:

rpt4.OptimizationOutput.funcCount
ans = 5

この例では,解析勾配の追加によって,最適化時の関数呼び出しの回数が減ります。

参考

||||

关键词トピック