MindStormsで強化学習
MindStormsで作成した以下のようなロボットに機械学習法の1種である
強化学習
を実装し、実験を行いました。
ロボット本体は、Jin Sato氏の
虫虫4号
を利用しています。
実験結果等の詳細は、人工知能学会誌 Vol.14 No.5(1999年9月発行)の
「Profit Sharingに基づく強化学習の理論と応用」
をご参照下さい。
ロボットはMove(前進)、Turn(方向転換)、Hand(手を動かす)の3つの
コマンドを出力できます。ロボットの目的は、
任意の場所に置かれた光源を発見し、その光源に接触した状態でHandコマン
ドを出力することです。強化学習器を使えば、目標達成時(光源
に接触しHandコマンド出力した時)に報酬という形でご褒美を与えるのみで、
「光源の発見方法」「光源への接近方法」「光源への接触方法」を予
め人間がプログラムすることなしにロボット自らが学習してくれます。
今回、強化学習手法としては、私のProfit Sharing(PS)および合理的政策
形成アルゴリズム(RPM)のふたつを併用しました。手法の詳細は、
上に述べた
「Profit Sharingに基づく強化学習の理論と応用」,
上記の論文
をご参照下さい。また、プログラムはNQCというC言語に
似た言語で作成いたしました。
但し、種々の制約から、PS中心の実装になっており、
RPMは完全には実装されておりません。
ご了承ください。
(ソースはこちら)
[1999年時点のNQCのversionを想定したプログラムです。
最新版のNQCで動作させるには修正が必要です。]
プログラム作成上、最も苦労した点は、変数の個数の制約です。
今回は、RPMとPSというふたつの学習手法を併用しているのですが、
変数の制約からRPMは少々トリッキーな実装
となっています。
PSの方も学習のための強化区間が最低限必要な3つしか取れず、
少々、窮屈な実装になってしまっています。
もうひとつ、実数が使えない点にも苦労しました。そのため、本
来、実数値であるPSの学習結果を整数化するために、
正規化もどき
を行っています。本来の学習部分よりも、これらの工夫が
プログラムの大部分を占めています。但し、サブルーチンやdefine文をうま
く使えばもう少し綺麗なプログラムになると思います。また、
原稿を書いた時点では、motorを2個しか持っておらず、Handコマンド
を音で代用してます。
学習結果は、Datalogを利用して、学習結果をPCに転送するようにして
います。一度報酬を得た(光源に接触しHandコマンドを出力した)後、
おしり部分につけた接触センサーを手でタッチすると学
習が継続されます。その場合、本体はどこかランダムな場所に人間が
配置します。当初は、報酬獲得後は、勝手なランダムな動作をさせる
ようにもしていました。
プログラム作成に多くの制約がありましたが、目標達成時(光源に接触
しHandコマンド出力)に与えた報酬のみで、「光源の発見方法」
「光源への接近方法」「光源への接触方法」をロボット自らが正しく
学習いたしました。