遺伝的アルゴリズムを回すために、simulinkにおいてローカル関数から全体のシミュレーションを回したい。
Show older comments
タイトルの通りです。
simulinkにおいて、下記画像1つ目のようなモデルを組みました。
そして、このモデルに対して遺伝的アルゴリズムを行おうとしています。具体的には、GAというmatlabファイル内にて定義されているevaluation という名前のローカル関数を回すたびに、この下記画像1つ目のPath_Planにevaluationから値を渡し、シミュレーションを最後まで回して、いくつかのデータを収集するという操作を行いたいと考えています。シミュレーションが終わったあとは、evaluationに戻り、再びpath_planにevaluationから変数を渡す ということを任意回繰り返します。(下記画像2つ目はGAとPath_Planの画像です。)
しかし以下のような問題が発生しました。
①evaluationを回すたびに、他のmatlabファイルに変数を渡す方法が分からない。
②evaluationを回すたびに、他のmatlabファイルに変数を渡したとしても、またGAというmatlabファイルに戻る方法が分からない。
コードの中身は事情によりお見せ出来ません。
もし解決策がある方がいらっしゃればご教授いただければ幸いです。


11 Comments
Atsushi Ueno
on 25 Sep 2021
MATLAB(evaluation関数)を中心に動かせば、他のMATLABファイル(関数)にデータを渡して実行する事も可能ですし、自分で決めた通りの順序で実行出来ますよ。
- evaluation関数を実行する
- 他のmatlabファイルに変数を渡す
- 実行結果を引数として入力し、モデルをsimで実行
- モデル実行結果(データ)を収集する
- 1に戻る
稔彦 廣瀬
on 25 Sep 2021
Atsushi Ueno
on 25 Sep 2021
Edited: Atsushi Ueno
on 25 Sep 2021
つまり「GAの各世代をevaluation関数で評価するのにこのモデルを回したい」って事ですよね。
やっぱりGAのプログラムをMATLABで動かして、sim関数経由で「走行」モデルにパラメータを与えて、結果を受け取るのが良いと思いますよ。プロセスの例を挙げるとこんな感じ
- 1.選択/淘汰/突然変異等、次世代の遺伝子を作る
- 2.evaluation関数を実行する
- 2-1.モデルをsim関数で実行
- 2-1-1.モデルにresult(遺伝子によるパラメータ)を渡す
- 2-1-2.モデルが回る(走行する)
- 2-1-3.モデルから結果のデータを収集する
- 2-2.結果から適合度を計算する
- 3.適合度が終了条件を満たせば終了、そうでなければ1に戻る
Atsushi Ueno
on 25 Sep 2021
Edited: Atsushi Ueno
on 25 Sep 2021
>というのは、matlabのコマンドウインドウからGAを実行するという意味でしょうか?
⇒そうです
>全体を動かすのではなく、GAという一部を動かして、「sim関数経由」で「走行」モデルにパラメーターを渡すという認識で合っていますか?
⇒合っています。MATLAB Function ブロックを含む「走行」モデルは、一つの塊(システム)とみなして下さい。下の図において、Simulinkモデルは「走行」をシミュレーションし適合値を得る為の評価手段の一部になったのです。下の図において、一つのシステム(四角)はMATLAB関数でもSimulinkモデルでもどちらでも良いのです。
>sim関数経由で「走行」モデルにパラメータを与えて というのは、set_paramでPath_Planへパラメータを渡せば良い。ということでしょうか?(パラメータを渡す場合はset_paramを使うものと認識しております。)
⇒set_paramは一度忘れてください。「sim関数経由で「走行」モデルにパラメータを与えて」とは下図で言うと、「走行」モデルに対し遺伝子から作った入力パラメータを渡す事で、具体的にはsim関数の引数として渡します。MATLABプログラム内でモデルを関数と同じ様に動かす手段がsim関数です。
>ここによると、simOut = sim(model,Name,Value) によってパラメータを指定できるとありますね。こちらを使うということですね。
⇒そうです
>matlabからGAを単体で実行し、パラメータを生成した後、それをsim関数を使って渡すということですね。
⇒そうです
>つまり、全体としてはfor文などで、GAの実行によるパラメータ生成とsim関数によるパラメータの受け渡しを繰り返すような操作をするmatlabファイルを別に作り、それを実行すれば任意の世代だけ回すことができるということでしょうか?
⇒そうです。プログラムを書いた通りに動きます
絵を描けば分かり易くなるかなと思いましたが、なんか余計に分かり難くなったかも・・・simulinkモデルを一つの塊(システム)とみなして、それに外から時系列データを与えて実行する概念が伝われば良いのですが。

Atsushi Ueno
on 25 Sep 2021
コメントを読み直して、私のコメントも追記修正しました
Atsushi Ueno
on 25 Sep 2021
Simulinkモデルの中でGAのパラメータを最適化しながら実行を進める方法も勿論やろうと思えば実現すると思いますが、なにぶんややこしくなると思います。
set_paramを実行している時点で貴方はもうSimulinkマニアです。
稔彦 廣瀬
on 25 Sep 2021
Accepted Answer
More Answers (0)
Categories
Find more on BeagleBone Black in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!