人工知能に関する断創録

このブログでは人工知能のさまざまな分野について調査したことをまとめています(更新停止: 2019年12月31日)

倒立振子アプレット

を書いた。

pole_balancing.jar

棒を上に立てたままうまくバランスを保つ方法を自動的に獲得できる。最終的には、100000ステップ(シミュレーション内の時間では、1ステップ0.02秒なので、30分くらい)バランスを保てるようになる。もっと学習時間を長くすればもっと長くできるだろう。

強化学習のアルゴリズムの部分は、Pole-Balancing Example のC言語のコードをJavaの構文(オブジェクト指向ほとんど使わないで)に直しただけで全く同じ。描画部分のみ自分で書いた。

上のコードは、BOXES SYSTEMというので状態を粗く分割している。これは、名前が違うだけでタイルコーディングと同じと思われる(よく調べたらぜんぜん別物でした)。強化学習には、ASE(Associative Search Element)とACE(Adaptive Critic Element)というのを使っているが、Actor-Criticアルゴリズムと基本は同じに感じる。一部意味不明のまま使っているので今度調べる。

今回、一番面白かったのは、物理のシミュレーションの部分。今までいろいろ物理シミュレーションのアプレット見て、どうやるんだと疑問に思っていたのだが、少し分かった。微分方程式の扱いも少しだけ分かった。

これを実世界でやったらどうなるんだろうか。どんな問題が起こるのか。このシミュレーションは簡単化していて摩擦係数を無視しているが、実世界では摩擦係数もあるし、空気の振動など台車と棒の状態以外にも微妙な影響が入ってくる。他にもセンサの精度が悪くて棒や台車の状態を正確に測定できない。実際に0.02秒で1ステップの学習ができるかなどの問題が考えられる。