付録3 ロボットタスクを新規性探索アルゴリズムで解く
本書の3章では新規性探索アルゴリズムを紹介し、迷路タスクやロボットタスクを紹介しました。それぞれのタスクの実行には、さまざまなオプションが用意されており、オプションを細かく指定することで、結果が変化します。ここでは、ロボットタスクの実行オプションを変更すると、どのように結果に影響を与えることができるのかを説明します。
run\_evogym\_ns\_neat.py
プログラムに用意されているオプションを変化させ実行します。迷路タスクと同様に、結果に大きく影響するパラメータは、p
、g
に加え、num-knn
、mcns
、ns-threshold
です。
num-knn
は、新しさを計算するために比べる近傍のエージェント数を指定します。大きな数を指定するほど、よりたくさんのエージェントと比べることになり、より厳しい基準を新しさに求めることになります。デフォルトでは5に設定してあります。
mcns
は、エージェントをそもそも評価するかしないか足切りするためのパラメータです。デフォルトでは、0.00に設定されているため評価値がマイナスとなる(エージェントが後退する)ときのみ足切りされます。0.01と設定すると評価値が0.01以下のエージェントは新規性スコアを与えず、死んだエージェントとみなします。
ns-threshold
は、エージェントをアーカイブに保存するか否かを決定するときの、新規性スコアの初期値です。値が高いほど、アーカイブに保存する基準が厳しくなります。ただ、この値はプログラムの中で、アーカイブに保存されていくエージェントによって自動的に調整されるので、初期値の値を変化させてもそれほど結果には影響がありません。
たとえば、集団の個体数p
、世代数g
、num-knn
、mcns
を変化させることで、どのように振る舞いが変わるかを試してみるといいでしょう。
たとえば、個体数を100( -p 100
)に減らしますが、より厳しい基準を新しさに求め( --num-knn 10
)、最低限の評価値に達しないエージェントは脚切りする( --mcns 0.05
)という条件で実行してみます。個体数を減らしているためより少ない計算時間で実行が終わるはずです。
$ python run_evogym_ns_neat.py -t PlatformJumper-v0 -r cat -p 100 --num-knn 10 --mcns 0.05
結果は、個体数200で探索したときと同様の評価値に達する次のような個体が複数個見つかるという結果になりました。
この他にもより少ない計算時間で同様の評価値、あるいはそれ以上の評価値に達する多様な個体が見つかるかもしれません。ぜひ試行錯誤して見つけてみてください。