Pythonで 倒立振子のシミュレータ を実装する

Mar 15, 2016   #Python  #NumPy 

Neural Fitted Q Iterationの実験で使う倒立振子のシミュレータを書きました。
論文ではCLSquareというシステムを使って実験が行われているのですが、
頑張ってインストールしたものの上手く動かせなかったので自分で書きました。

倒立振子の運動方程式についてはこちらのスライドが詳しいです。
今回は摩擦を無視するのでスライドでいう B と C が 0 になります。

台車の重さやポールの長さなどの各種定数は、NFQの論文に倣い、
これのInverted Pendulumの実験と同じにしました。

コードはこんな感じ。

アクションは[-50N, 50N, 0N]の3種類で、[0, 1, 2]で表現しました。
do_action(a)でアクションが実行され t だけ時間が進みます。

matplotlibでビジュアライズできるようにしたので、
実行すると次のようなアニメーションが表示されます。
inverted pendulum

加速度がこの式で与えられるのは微分してみたらわかるけど、
速度や位置(角速度や角度)をどうやって更新していいのかわからなかったので、
tが小さければ高校物理のvt+12*at^2で大丈夫でしょって感じで
t_sum回ループ回して細かく更新することでそれっぽい結果を得ました。

ちゃんと検索してみるとC言語での実装が見つかったので、
これを真似してupdate_stateを書き換えてみるとこんな感じ。 物理が分からない自分が書いたコードより安心なので、実験ではこっちを使おうと思います。

このエントリーをはてなブックマークに追加