GAでのモデルの出力値の最適化
2 ビュー (過去 30 日間)
古いコメントを表示
optimtoolのGAによってsimulink(simmechanics)によって作成したモデルの出力値が最小になるように最適化を行いたいです. 現在のコマンドが以下の通りになります.
function trqfuka=GArensyu01(x,ScopeData2)
y1=[0 x(1)]
y2=[0 x(2)]
open('GArensyu2')
sim('GArensyu2')
trq=ScopeData2(:,2)
trq_int=(trq*0.022222).^2
trqfuka=sum(trq_int)
GArensyu2というのはモデルの名前です. y1,y2はモデルの入力値でScopeData2がモデルの出力値です. ワークスペースに何もない状態でこのコマンドのGAを実行すると,エラーで
「パラメーター 'VariableName' に対する 'GArensyu2/Subsystem3/From Workspace' 内の設定が無効です。」
と表示されます.これの解決策は何かないでしょうか. また,仮の値をy1,y2に与えてGAを実行するとエラーは出ないんですが,モデルが永遠に回り続け,全くGAの計算がされません.この解決策も教えて頂きたいです.よろしくお願いします.
採用された回答
michio
2017 年 2 月 1 日
編集済み: michio
2017 年 2 月 1 日
まとめます。
まず Simulink モデルで参照しているワークスペースがデフォルトでは、”ベースワークスペース” であるため、関数ワークスペース(simコマンドの呼び出し元)で定義されている変数 y1,y2 にアクセスできず、エラーが生じていました。
解決方法として、sim 関数実行時に、SrcWorkspace プロパティを 'current' に 設定し、モデルが参照するワークスペースを呼び出し元のワークスペース(GArensyu01関数内)に設定すること紹介しました。
sim('GArensyu2','SrcWorkspace','current');
この時、スコープから出力されるはずの変数 ScopeData2 は sim 関数から出力される構造体に保存され、ScopeData2 という変数は単体としては、関数ワークスペース、ベースワークスペースどちらにも保存されません。詳細は下記 URL を確認ください。
上記のURLで説明されている通り、sim コマンドの出力変数を
simOut = sim('GArensyu2','SrcWorkspace','current');
と simOut で受けた上で、simOut 構造体内の ScopeData2 の値を
trq= simOut.ScopeData2(:,2)
という様に使用できるのではと考えています。
また、
[X,Y]=ga(@(x) GArensyu01(x, ScopeData2), 2)
との実行をされた場合(ベースワークスペースでの実行と想定)、この実行時に ScopeData2 変数が定義されていない場合エラーが発生します。
既に上述の様に ScopeData2 は simOut という構造体の一部として sim 関数の呼び出し元で定義されベースワークスペースには登場しないので、実際は
[X,Y]=ga(@(x) GArensyu01(x), 2)
との実行で十分だと考えられます。
12 件のコメント
mizuki
2017 年 2 月 2 日
System Error の方は、頻繁に出るようであれば Technical Support にお問い合わせください。MATLAB が強制終了されてしまう状況であれば、全てではありませんが可能な限りのヘルプは Technical Support でできるということでした。計算結果が正常に得られるといいですね。
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Prepare Model Inputs and Outputs についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!