「仮想生物」を動かしてみる
「仮想生物」といえばKarl SimsのVirtual Creaturesが有名です。物理法則に従った仮想世界の中で、泳いだり、歩いたり、跳ねたりする、驚くほど多様で生き生きとした仮想生物をみることができます。
1994年に提案されたこの研究から28年の時を経て、誰でも手軽に手元のコンピュータで、仮想生物を自由にデザインして動かせるプラットフォームが誕生しました。
Evolution Gym
MITが開発したEvolution Gymというプラットフォームです。このプラットフォームを使うことで、仮想生物をデザインしたり、タスクを設定したり、仮想生物を進化させたりすることができます。
ウェブサイトでは、歩いたり、モノを押したり、運んだり、障害物を乗り越えたり、浮き台を渡ったりといった30個のタスクと、それらのタスクを解くように自動的に進化させた仮想生物が紹介されています。
仮想生物を進化させる
動画の仮想生物は、「歩く」や「モノを運ぶ」という解くべきタスクが与えられた時に、より遠くへ歩ける仮想生物、モノ落とさずにより遠くへ運べるような仮想生物の形や動き方を、コンピュータが自動的に見つけたものです。
Evolution Gymをダウンロードし、実行してみることで、その進化の過程を可視化することができます。
Evolution Gymをダウンロードする
Evolution Gymをインストールして、試してみましょう。ウェブサイトに書いてある手順に従うことで、比較的簡単にインストールすることができます。
まず、GitHubで公開されているコードをダウンロードします。
git clone --recurse-submodules https://github.com/EvolutionGym/evogym.git
もしgitコマンドのインストールをしていない場合は、以下を参考にインストールしてみましょう。あるいは、Evolution GymのGithubサイトにアクセスし、手動でダウンロードすることも可能です。
実行に必要なプログラムはevogymフォルダの中に全て入っています。
環境を構築する
Evolution Gymがダウンロードできたら、プログラムを実行するために必要なライブラリなどをインストールします。ダウンロードしたecogymフォルダに移動し、次のコマンドを実行すると、environment.yml で指定されているライブラリなど、Evolution Gymの実行に必要なもの一式がインストールされた仮想環境「evogym」が作成されます。
$ conda env create -f environment.yml
condaコマンドを使うためには、Anacondaというソフトウェアをインストールする必要があります。もしAnacondaをインストールしていない場合は、以下を参考にインストールしてみましょう。
実行すると、pipコマンドでコケるかもしれません。その場合は、environment.yml ファイルを開いて、git+git:// となっている部分を、git+https:// に変更して保存し、再度実行してみてください。その際、evogymの仮想環境を削除してあげる必要があるので、
$ conda remove -n evogym --all
を実行してから、再度試します。
環境の構築が終了したら、次のコマンドを実行し、evogym環境をアクティベートします。
$ conda activate evogym
その後、Evolution Gymを次のコマンドを実行してインストールします。
$ python setup.py install
必要なものを全てインストールするのに、少し時間がかかるので終わるまでコーヒーでも飲みながら待ちましょう☕。
テストプログラムを実行する
さて、これでEvolution Gymが使える環境が整いました。早速、テストプログラムを走らせて、動作を確認しましょう。
examplesフォルダの中にgym_test.py というテストプログラムが入っているので、実行します。
$ cd examples
$ python gym_test.py
図のような仮想生物が表示されたら成功です。5x5のブロックからなる、歩く仮想生物が表示されます。ブロックの構成はランダムに設定されるので、表示される仮想生物は毎回異なります。
遺伝的アルゴリズムで進化させる
このサンプルプログラムでは、ランダムに配置されたブロックがランダムに動くだけです。この仮想生物を、生物進化を模倣したアルゴリズム「遺伝的アルゴリズム(Genetic Algorithm, GA)を使うと、歩くように進化させることができます。具体的には、60個のランダムにつくられた仮想生物を用意し、世代を経る度に、性能の良い仮想生物のみを次世代に残していくという操作を繰り返します。そして、生き残った仮想生物の中から、10%の確率でボックスを変化させるように突然変異させ、新たな形をした仮想生物を作ります。
遺伝的プログラムのプログラムも、examplesフォルダの中に含まれているので、実行させて、どのように進化していくかを見ていきましょう。
$ python run_ga.py --env-name "Walker-v0" --algo ppo --use-gae --lr 2.5e-4 --clip-param 0.1 --value-loss-coef 0.5 --num-processes 4 --num-steps 128 --num-mini-batch 4 --log-interval 100 --use-linear-lr-decay --entropy-coef 0.01 --eval-interval 50
なにやら呪文のような長いコマンドですが、ランダムな形にランダムな動きしかしない仮想生物が、世代を追うごとに、遠くまで歩くように進化していきます。make_gifs.pyプログラムを実行させると、作成された仮想生物のgifファイルを作成することができます。
$ python make_gifs.py
歩くように進化する仮想生物
0世代目から3世代目まで進化させた結果は次の通りです。
0世代目
0世代目から前に進む仮想生物が出現していますね。
1世代目
2世代目
1世代目や2世代目は、0世代目よりも前に進まない仮想生物も突然変異によって出現していますね。
3世代目
3世代目になると、平均的により前に進む仮想生物へと進化している様子がみてとれます。
仮想生物の進化は誰でも取り組める研究課題に
Karl Simsの研究が発表された1994年は、物理法則に従う仮想世界の構築から、仮想生物の設計、それを動かすニューラルネットワークの設計や実装まで、全てイチから作る必要がありました。また、遺伝的アルゴリズムのような進化計算と呼ばれる方法を使って、動く仮想生物を探索するには、一般的に多くの計算パワーが必要です。つまり、実装能力が高く、計算リソースへのアクセスが可能な、一部の限られた研究者やエンジニアのみが取り組める研究課題だったのです。
しかし、その後の計算機の発展や、プログラミング環境の発展が、こうした状況を一変しました。誰でもが、取り組める研究課題となっているのです。Evolution Gymの登場は、それを象徴する出来事だと思います。
コンピュータの中で、さまざまな仮想生物の形や動きをシミュレートし、現実世界で構築する。またそのフィードバックをもとに、仮想世界で実験し精度を高めていく方法が注目されています。たとえば、カエルの幹細胞からつくられた、モノを運んだり、自己再生する生体ロボットとして注目された「Xenobot」も、仮想世界と実世界を行ったり来たりすることで作られたロボットの一例です。
仮想世界での自動シミュレーションを通して、モノのデザインをしていくという流れは、今後ますます加速していくと思います。そうした世界の背景にあるのが、Karl Simsの研究にはじまる「仮想生物」の研究です。Evolution Gymを通して、そうした世界のフレーバーを感じ取っていただけるのではないかと思います。