はい、また思いつき投稿です。
経緯を知らない方のためにもう一度。
発表のためにAAAI-16に来ています。知らない人も多いかと思いますが、IJCAIとならび、AIの国際学会で最も難関と言われる学会です。個人的には自分もA*の改善論文でPaper Award 密かに狙っていたのですが、Bidirectional Search 論文に取られてしまいました。
今日は、幸運にも MIT / CSAIL の Brian Williams 先生とお話することが出来ました。
(100kgを超してそうな巨体です・・・でもイケメン)
この先生は、かの有名な宇宙探査機 NASA Deep Space 1 にCommon Lispで作ったシステムを載せ、成功に導いた先生です。
Common Lisp のリアルタイムコンパイル機能のおかげで、運用中に発覚したバグを(たしか木星を過ぎたあたりで) REPLにログインし動的にhotfix することができ、無事ミッションを達成することが出来ました。(Common Lispでは、プログラム実行中に、関数単位でプログラムをコンパイルし、メモリ中の関数ポインタを差し替えることができます。プログラム全体のコンパイル&リンクは不要です。そのため、遅延が許されない宇宙航行システムでも問題なし。) 詳細は、論文 や、 動画: Remote Agent: 一億キロの彼方からのデバッグ(Debugging Code from 60 Million Miles Away) から知ることができます。
近年は、油田などの検査用の 自動 水中探査ロボット(AUV, Autonomous Underwater Vehicle)を作っています。日本ではどこかが リモコン式の 探査ロボットを作って喜んでいたような気がしますが、MIT/CSAILで作っているロボットは、ケーブル無しかつ電波もGPSも使えない視界不良の深海で、カメラからの情報を元に自力でミッションの遂行プラン立案を行い、検査を行います。
http://news.mit.edu/2015/cognitive-underwater-robots-0507
このUAVは、複数のモジュールから構成されています。
- 限られた時間・電力など、与えられた制約の中でどの観測地点をどの順序で観測するか というメタレベルの「行動計画」を行うモジュール。離散・連続混合問題を解きます。自分の研究分野です。
- 行動計画に従うためにどのような座標で移動するかという「経路計画」を行うモジュール。RRT,RRG*などをベースにした、確率的連続空間探索を行います。自分の学部時代の研究分野。
- 経路計画に従うためにどのようにモーター出力を行うかなどを細かく計算する「制御」モジュール。
- 様々なセンサーモジュールなど。忘れた
詳しい内容はいずれ以下のページにProceedingsが発表されるはずです。
http://www.inf.kcl.ac.uk/staff/danmag/planhs16.html
さて、このUAV、事前に大まかな地図や海流情報は与えられますが、どちらの情報も古い情報で、間違っている可能性が大いにあります。そのため、もしも人工知能を搭載せず、つまり間違いを察知して自力で計画を立案できなければ、予想外の状況が現れた時に回収不能になってしまいます。
例えば、海流の変化によっては、必要な電力が足りなくて全ての観測ミッションを達成できないかもしれません。行動計画モジュールは、そのような想定外の状況に対しても、自ら推論を行い、可能な限りのミッションを行った上で自力で出発地点まで戻ってきます。
で、うわさではこの先生は今でもLispで書いているとは聞いていたのですが、 本当のところどうなのかよくわからなかったので、突撃して聞いてみました!!!
Yes、つかっているよ。
学生にプログラムを書かせると、rubyやらpythonやら、ポピュラーだが仕様のコロコロ変わるおもちゃ言語で書いたり、あるいはCやC++などメモリリークを起こすようなバグのあるプログラムを書いてくる。学生は5年で卒業して入れ替わるが、するとまた別の学生が自分の好きな言語で書こうとする。高額なロボットを運用するのに毎年仕様の変わる言語など使っていられない。だから、ANSI仕様があってかつ十分なメタプログラミングができるCommon Lispを使うと決めている。
全モジュールですか?
全部だ。
そこの生徒とも話してきました。
(本人の公開している画像でしたが、よく考えるとまずいかもしれないので消しました・・・)
Lispのマクロはいいよね! VimでLisp書いてるよ。
Emacsじゃないのはちょっと残念ですが、ほんとに使われてるみたいですね。ILC (International Lisp Conference) に誘ってみたのですが、
いや、そこまでではないかな・・・
って言われました :p
というわけで、いくつかのことがわかりました!
- Lisp はリアルなアプリケーションで使われている。それも、ウェブのようなある意味サイバーな「リアル」ではなく、「リアル・ワールド」現実世界を動くロボットで使われている。
- 身の回りにLisperが少ないとしたら、それは、(そういう優秀な研究者・プログラマが)みんな宇宙か深海に行ってしまったからである。
以上。