«
»

付録2 サンプルコードのコマンドの使い方

本書のサンプルコードのコマンドは、さまざまなオプション引数を提供しています。オプション引数の値を変更することで、実験や機能の挙動を細かく変更し、挙動の違いを確認することができます。各章でもサンプルコードのコマンドの使い方を説明していますが、そこで紹介しきれなかった使い方を紹介します。

1章で使われているコマンド

experiments/Chapter2/run_evogym_ppo.py

このコマンドはEvolution Gym上にロボットを表示し、PPOアルゴリズムを用いて動きを学習します。 用意されているオプションは次の通りです。

オプション短縮表記(abbrev)デフォルト値詳細
--name-n"{task}"実験の名前。デフォルトではタスク名が設定される。
--task-tWalker-v0タスク名。デフォルトでは Walker-v0 タスクが設定される。
--robot-rdefaultenvs/evogym/roboto_files/ ディレクトリ内のファイルで設定しているロボットを指定できる。 task ごとにデフォルトのロボットが設定されている。
--num-processes-p4並列プロセス数。デフォルトでは4に設定されている。
--steps-s256学習データをサンプリングする回数を設定する。デフォルトでは256に設定されている。
--num-mini-batch-b8バッチサイズ。デフォルトでは8に設定されている。
--epochs-e8エポック数。デフォルトでは8に設定されている。
--train-iters-i2500学習のイテレーション回数。デフォルトでは2500に設定されている。
--evaluation-interval-ei25学習したポリシーを評価するインターバル。デフォルトでは、イテレーションが25回実行されるごとにポリシーが評価されるように設定されている。
--learning-rate-lr3e-4強化学習PPOにおける学習率。デフォルトでは3e-4に設定されている
--gamma0.99適応度の割引率。デフォルトでは、0.99に設定されている。
--clip-range-c0.3クリップパラメータ。デフォルトでは0.3に設定されている。
--init-log-std-std0.1行動分布の初期対数標準偏差の値。デフォルトでは0.1に設定されている。
--probabilisticfalse学習を確率的に行うためのオプション。デフォルトでは決定論的(deterministic)に評価されるようになっている。
--no-viewfalse評価されたロボットの結果を表示するウィンドウを開かないように設定するオプション。デフォルトでは false に設定されておりウィンドウが開くようになっている。

ここではバッチサイズを32、エポック数を10、適応度の割引率を0.99、学習率を1e-3で指定し、コマンドを実行します。

$ cd リポジトリのルートディレクトリ/experiments/Chapter2
$ python run_evogym_ppo.py --robot cat --num-mini-batch 32 --epoch 10 --gamma 0.99 --learning-rate 1e-3

experiments/Chapter2/draw_evogym_ppo.py

このコマンドはexperiments/Chapter2/run_evogym_ppo.py で行った実験の結果を可視化するため、画像ファイルを生成します。そのため事前に実験を実行しておく必要があります。 用意されているオプションは次の通りです。

オプション短縮表記(abbrev)デフォルト値詳細
可視化する対象のフォルダ名(タスク名_ロボット名)を指定する。
--specified-sロボットIDを指定して結果を作成する。
--save-type-stgifgifかjpg形式を指定する。デフォルトはgif形式。
--track-robot-trfalsegif形式のみに有効なオプション。ロボットを画面で追跡した結果を出力する。デフォルトでは false に設定されており地形全体を写した結果が出力される。
--interval-itimestepjpg形式のみに有効なオプション。timestepdistance を選択することができる。デフォルトは timesteptimestep-intervalで指定した時間間隔でロボットが描画される。 distance を指定すると distance-interval で指定した距離間隔でロボットが描画される。
--resolution-scale-rs32.0jpg形式のみに有効なオプション。JPG画像サイズを指定する。デフォルトでは32.0。もし結果が白黒で表示される場合は、この値を変更してみる。
--start-timestep0jpg形式のみに有効なオプション。可視化対象とする開始ステップ数。デフォルトでは0に設定されており、最初から可視化される。
--timestep-interval-ti80jpg形式のみに有効なオプション。ロボットを描画する時間間隔( steps 数間隔)を指定する。デフォルトは80 steps ごとに描画される。
--blur-b0jpg形式のみに有効なオプション。ロボットの残像を描画する timesteps を指定する。デフォルトは0に設定されており、軌跡は表示されない。
--blur-temperature-bt0.6jpg形式のみに有効なオプション。残像の残り具合を調整する。0〜1の値を設定できる。デフォルトでは0.6に設定されている。1.0に近いほどスッキリと消え、0.0に近いほどしつこく残る。
--distance-interval-di0.8jpg形式のみに有効なオプション。 distance ベースで描画する際の間隔を指定する。デフォルトは0.8。
--display-timestepfalsejpg形式のみに有効なオプション。ロボットを描画したタイミングの timestep を表示する。デフォルトでは false に設定されている。表示したい場合は true に設定する。
--draw-trajectoryfalsejpg形式のみに有効なオプション。ロボットの重心の軌跡を線で描画する。
--probabilisticfalsePPOによる学習を確率的(probabilistic)に行った場合は、 true に設定することで確率的に評価した結果を描画することができる。デフォルトでは決定論的(deterministic)に評価された可視化結果を描画する。
--num-cores-c1並列プロセス数。デフォルトでは1に設定されている。
--not-overwritefalse既に描画したロボットIDをスキップして描画するためのオプション。デフォルトでは false に設定されている。既にある結果を上書きしたくない場合は true に設定する。
--no-multifalse並列処理を無効にするオプション。デフォルトでは false に設定されている。並列処理に関するエラーが起きた際は true に設定する。

出力形式により指摘可能なオプションが異なります。

GIFで出力する場合、--track-robotを指定すると画面がロボットを追跡した結果を描画できます。

$ cd リポジトリのルートディレクトリ/experiments/Chapter2
$ python draw_evogym_ppo.py --save-type gif --track-robot Walker-v0_cat

JPEGで出力する場合、--draw-trajectoryを指定することでロボットの重心を描画したり、--blurに数値を指定することで残像を描画できます。

$ cd リポジトリのルートディレクトリ/experiments/Chapter2
$ python draw_evogym_ppo.py --save-type jpg --draw-trajectory --blur 10  Walker-v0_cat

2章で使われているコマンド

experiments/Chapter2/run_circuit_neat.py

このコマンドはNEATアルゴリズムを用いてXOR演算子の挙動を学習する実験を行います。 用意されているオプションは次の通りです。

オプション短縮表記(abbrev)デフォルト値詳細
--name-n"{task}"実験の名前。デフォルトではタスク名が設定される。
--task-txorタスク名。デフォルトではXOR演算子のタスクが設定される。
--pop-size-p150NEATアルゴリズムの集団数。デフォルトでは150に設定されている。
--generation-g300NEATアルゴリズムの世代数。デフォルトでは300に設定されている。
--error-emse正解との誤差を計算する関数。デフォルトでは平均二乗誤差に設定されている。他には平均絶対誤差(mae)が設定できる。
--num-cores-c4並列プロセス数。デフォルトでは4に設定されている。

ここでは集団数を1000、世代数を2000で指定し、コマンドを実行します。

cd リポジトリのルートディレクトリ/experiments/Chapter2
python run_circuit_neat.py --pop-size 1000 --generation 2000 --error mae

experiments/Chapter2/run_maze_neat.py

このコマンドはNEATアルゴリズムを用いて迷路を解く実験を行います。 用意されているオプションは次の通りです。

オプション短縮表記(abbrev)デフォルト値詳細
--name-n"{task}"実験の名前。デフォルトではタスク名が設定される。
--task-tmediumタスク名。デフォルトでは meduim の迷路が指定されている。 hard も指定可能(envs/maze/maze_files/以下のファイルを指定)
--pop-size-p500NEATアルゴリズムの集団数。デフォルトでは500に設定されている。
--generation-g500NEATアルゴリズムの世代数。デフォルトでは300に設定されている。
--timesteps4001回の実行でロボットが動くことのできるステップ数。デフォルトでは400に設定されている。値が大きいほど長い距離をロボットは動くことができる。
--num-cores-c4並列プロセス数。デフォルトでは4に設定されている。
--no-plotfalse1世代の実行が終わるたびに迷路とロボットの辿った軌跡が表示される。表示させたくない場合は -no-plot を指定して実行する。

ここでは集団数を100、世代数を200、ロボットが1回の実行で動くステップ数を500で指定し、コマンドを実行します。

cd リポジトリのルートディレクトリ/experiments/Chapter2
python run_maze_neat.py --pop-size 100 --generation 200 --timestep 500

experiments/Chapter2/run_evogym_neat.py

このコマンドはEvolution Gym上にロボットを表示し、NEATアルゴリズムを用いて動きを学習します。 用意されているオプションは次の通りです。

オプション短縮表記(abbrev)デフォルト値詳細
--name-n"{task}"実験の名前。デフォルトではタスク名_ロボット名が設定される。
--task-tWalker-v0タスク名。デフォルトでは Walker-v0 タスクが指定されている。
--robot-rcatロボットの形態。デフォルトでは、猫型の形態 cat が設定されている。ロボットの形態は、envs/evogym/robot_files/ディレクトリに保存されている。
--pop-size-p200NEATアルゴリズムの集団数。デフォルトでは200に設定されている。
--generation-g500NEATアルゴリズムの世代数。デフォルトでは500に設定されている。
--eval-num1評価回数。デフォルトでは1に設定されている。 Catcher-v0 だけは物体の落ちてくる位置が毎回異なっているため評価回数を増やす。
--num-cores-c4並列プロセス数。デフォルトでは4に設定されている。
--no-viewfalse一世代の実行が終わるたびに最大適応度の結果が表示される。表示させたくない場合は -no-view を指定して実行する。

ここでは集団数を100、世代数を40で指定し、コマンドを実行します。

$ cd リポジトリのルートディレクトリ/experiments/Chapter2
$ python run_evogym_neat.py --pop-size 100 --generation 40

3章で使われているコマンド

experiments/Chapter3/run_maze_ns_neat.py

このコマンドは新規性探索アルゴリズムを用いて迷路を解く実験を行います。

用意されているオプションは次の通りです。

オプション短縮表記(abbrev)デフォルト値詳細
--name-n"{task}"実験の名前。デフォルトではタスク名が設定される。
--task-tmedium迷路の名前。“envs/maze/maze_files/” ディレクトリ内のファイルで設定している迷路を指定できる。
--pop-size-p500NEATアルゴリズムの集団数。デフォルトでは200に設定されている。
--generation-g500NEATアルゴリズムの世代数。デフォルトでは500に設定されている。
--ns-threshold6.0新規性のアーカイブに追加する初期値の閾値。
--num-knn15新規性を計算する最近傍のエージェント数。
--mcns0.01最低限満たすべき評価値。この値を下回った個体は死ぬ。
--timesteps400ロボット(エージェント)のステップ数。
--num-cores-c4並列プロセス数。デフォルトでは4に設定されている。
--no-plotfalse途中結果を表示するオプション。デフォルトでは false に設定されているので、非表示にしたい場合は、このオプションを付ける。

ここでは難易度中のタスク、集団数を100、ロボットのステップ数を500で指定し、コマンドを実行します。

cd リポジトリのルートディレクトリ/experiments/Chapter3
python run_maze_ns_neat.py --task medium --pop-size 100 --timestep 500

experiments/Chapter3/run_evogym_ns_neat.py

このコマンドはEvolution Gym上にロボットを表示し、新規性探索アルゴリズムを用いて動きを学習します。 用意されているオプションは次の通りです。

オプション短縮表記(abbrev)デフォルト値詳細
--name-n"{task}"実験の名前。デフォルトではタスク名が設定される。
--task-tWalker-v0タスク名。デフォルトでは Walker-v0 タスクが設定される。
--robot-rcat“envs/evogym/roboto_files/” ディレクトリ内のファイルで設定しているロボットを指定できる。デフォルトでは cat 型のロボットが設定される。「 default 」と指定した場合は、ロボットごとに指定されているデフォルトのロボットが設定される。
--pop-size-p200NEATアルゴリズムの集団数。デフォルトでは200に設定されている。
--generation-g500NEATアルゴリズムの世代数。デフォルトでは500に設定されている。
--ns-threshold0.1新規性のアーカイブに追加する初期値の閾値。
--num-knn5新規性を計算する最近傍のエージェント数。
--mcns0.0最低限満たすべき評価値。この値を下回った個体は死ぬ。
--eval-num1ロボット(エージェント)の評価回数。デフォルトでは1に設定されている。 Cathcer-v0 タスクは物体の落ちてくる位置が毎回異なるため評価回数を増やす方がよい。
--num-cores-c4並列プロセス数。デフォルトでは4に設定されている。
--no-viewfalse途中結果を表示するオプション。デフォルトでは false に設定されているので、非表示にしたい場合は、このオプションを付ける。

ここでは難易度中のタスク、集団数を100、ロボットのステップ数を500で指定し、コマンドを実行します。

$ cd リポジトリのルートディレクトリ/experiments/Chapter3
$ python run_evogym_ns_neat.py -r cat --pop-size 100 --ns-threshold 0.5 --num-knn 10 --mcns 0.3

4章で使われているコマンド

experiments/Chapter4/run_evogym_me_cppn.py

このコマンドはEvolution Gym上にロボットを表示し、品質多様性アルゴリズムを用いて動きを学習します。 用意されているオプションは次の通りです。

オプション短縮表記(abbrev)デフォルト値詳細
--name-n"{task}"実験の名前。デフォルトではタスク名が設定される。
--task-tWalker-v0タスク名。デフォルトでは Walker-v0 タスクが設定される。
--shape-s(5,5)ロボットサイズを指定する。デフォルトは5×5。 -s {height} {widht} で高さと幅を指定できる。
--batch-size-b4各世代で評価する個体の数。デフォルトでは4つの個体が1つの世代で評価される。
--generation-g500CPPN NEATアルゴリズムで形態を進化させる世代数。デフォルトでは500に設定されている。
--ppo-iters-i500PPOアルゴリズムの評価回数。デフォルトでは500に設定されているが、複雑なタスクにはより多く必要。
--evaluation-interval-ei20ポリシーを評価するインターバル。デフォルトでは20に設定されている。
--probabilisticfalseエージェントの評価を決定論的に行う。デフォルトはprobabilistic(確率的)。決定論的(deterministic)に評価したいときは、このオプションを付ける。
--num-cores-c1並列プロセス数。デフォルトでは1に設定されている。
--no-plotfalseBD Mapの途中結果を表示するオプション。デフォルトでは false に設定されているので、非表示にしたい場合は、このオプションを付ける。
--no-viewfalse各世代のベストな個体を示すオプション。デフォルトでは false に設定されているので、非表示にしたい場合は、このオプションを付ける。

実験を開始するには次のコマンドを実行します。

$ cd リポジトリのルートディレクトリ/experiments/Chapter4
$ python run_evogym_me_cppn.py

5章で使われているコマンド

experiments/Chapter5/bootstrap_maze_mcc.py

MCCアルゴリズムで迷路を解く実験のための初期集団として、迷路とエージェントを作成します。 用意されているオプションは次の通りです。

オプション短縮表記(abbrev)デフォルト値詳細
--name-ndefault作成する初期集団の名前。デフォルトでは「 default 」が設定されている。
--agent-num20初期集団で用意するエージェント数。デフォルトでは20に設定されている。
--maze-num10初期集団で用意する迷路の数。デフォルトでは10に設定されている。
--wall-gene-num2迷路の「壁」の初期数。デフォルトでは2に設定されている。
--path-gene-num2迷路の「経路」の初期数。デフォルトでは2に設定されている。
--exit-range5.0ゴールに到達したかを判断するための範囲。デフォルトでは5.0に設定されている。
--radius5.0エージェントの半径。デフォルトでは5.0に設定されている。
--range-finder100.0エージェントが見渡せる範囲。デフォルトでは100.0に設定されている。
--max-speed5.0エージェントの最高スピード。デフォルトでは5.0に設定されている。
--max-angular-vel8.0エージェントの最大角速度。デフォルトでは8.0に設定されている。
--speed-scale2.0ニューラルネットワークの速度に関する出力。デフォルトでは2.0に設定されている。
--angular-scale3.0ニューラルネットワークの角速度に関する出力。デフォルトでは3.0に設定されている。
--num-cores-c4並列プロセス数。デフォルトでは4に設定されている。

作成を開始するには次のコマンドを実行します。

cd リポジトリのルートディレクトリ/experiments/Chapter5
python bootstrap_maze_mcc.py

experiments/Chapter5/run_maze_mcc.py

このコマンドはMCCアルゴリズムを用いて迷路を解く実験を行います。 用意されているオプションは次の通りです。

オプション短縮表記(abbrev)デフォルト値詳細
--name-n「bootstrap」実験の名前。デフォルトでは --bootstrap オプションで指定された名前が使われる。
--bootstrap-bdefault初期集団を指定する。デフォルトでは「default」という名前の迷路とエージェントの初期集団が読み込まれる。
--generation-g1000実行する世代数。デフォルトでは1000が設定されている。
--agent-criterion1エージェントが生き残るために必要な迷路の解答数。デフォルトでは1が設定されている。
--maze-criterion1迷路が生き残るために必要なエージェントの解答数。デフォルトでは1が設定されている。
--agent-pop160エージェント集団の最大数。デフォルトでは160が設定されている。
--maze-pop40迷路集団の最大数。デフォルトでは40が設定されている。
--agent-limit0エージェント資源の制限数。デフォルトでは0が設定されている。0は制限がないことを示す。
--maze-limit4迷路資源の制限数。デフォルトでは4が設定されている。4つのエージェントに迷路が解かれると資源を使い切る。
--agent-batch40一世代で評価される最大のエージェント数。デフォルトでは40が設定されている。
--maze-batch10一世代で評価される最大の迷路数。デフォルトでは10が設定されている。
--num-cores-c4並列プロセス数。デフォルトでは4に設定されている。
--print-mazefalse一世代ごとに生き残った迷路の詳細を画面に表示する。デフォルトでは非表示になっている。

実験を開始するには次のコマンドを実行します。

cd リポジトリのルートディレクトリ/experiments/Chapter5
python run_maze_mcc.py

6章で使われているコマンド

experiments/Chapter6/run_evogym_poet.py

このスクリプトはEvolution Gym上にロボットを表示し、POETを用いて学習します。 用意されているオプションは次の通りです。

オプション短縮表記(abbrev)デフォルト値詳細
--name-ndefault実験の名前。デフォルトでは「 default 」が設定されている。
--task-tParkour-v0タスクを指定する。 Parkour-v0Parkour-v1 の指定が可能。デフォルトでは Parkour-v0 が指定されている。
--robot-rcatエージェントの形態を与える。デフォルトでは猫のような形の形態が与えられる。“envs/evogym/robot_files/“以下に保存しているファイルを入力として与えることができる。
--iteration-i3000イテレーションの数。デフォルトでは3,000に設定されている。
--niche-num-n-num10保持する niche の最大数。デフォルトでは10に設定されている。
--reproduce-num-r-num101回のイテレーションで作る「候補子孫」の数。デフォルトでは10に設定されている。
--admit-child-num-ac-num1新たに集団に加える niche 数。デフォルトでは1に設定されている。
--reproduce-interval-r-iv30子孫を作る間隔。デフォルトでは30イテレーションごとに子孫を作る。
--transfer-interval-t-iv15エージェントを転送させる間隔。デフォルトでは15イテレーションごとに転送させる。
--save-interval-s-iv0行動学習の途中経過を保存するインターバル。これとは別にスコアが最大のときのものを上書きで保存していく。途中経過を使用して分析(可視化)するということがなければデフォルトの0(no save)でよい。
--reproduce-threshold-r-th0.5新しい環境を作る候補となる環境の生成を制限するための閾値。タスクに設定された最大スコアに対する割合を表す。既存の niche によるスコアがこの値を上回ったときのみ新しい環境が生成される。デフォルトでは、0.5に設定されている。タスクに設定された最大スコアは10のため、既存の niche によるスコアが5を超えないと新しい環境は作られない。
--mc-lower-mc-l0.1新しく作られた環境を集団に加えるか否かを決める閾値の最低スコア比率。このスコアを下回っている環境は、現在の集団のエージェントにとって簡単すぎる環境と判断され、集団に加えられない。デフォルトでは0.1に設定されている。 mc-lower スコアをより小さく設定すると、より簡単な環境でも集団に加えられるようになる。
--mc-upper-mc-u0.8新しく作られた環境を集団に加えるか否かを決める閾値の最高スコア比率。このスコアを上回っている環境は、現在の集団のエージェントにとって難しすぎる環境と判断され、集団に加えられない。デフォルトでは0.8に設定されている。 mc-upper スコアをより大きく設定すると、より難しい環境でも集団に加えられるようになる。
--width-w100Evogymにおける地面の長さを設定する。デフォルトでは100に設定されている。長い設定するほど、長い環境が用意される。
--first-platform-fp10Evogymの最初の平坦な足場の最低保証の長さになる。最初から穴や段差がないようにするためのもの。一応オプションにしたが、変更して結果が面白く変わるものでもないはず。
--steps-per-iteration-si-ppo4POETの一度のiterationでPPOの学習を何回繰り返す(進める)かということを指定している。POETの(学習の)進行速度に関わる。評価にも時間がかかることと、transfer時にシミュレーション1周分(500 timestep)は学習させたいこともあり、4(4\*128で1周分の500を超える)をデフォルトとしている。
--learning-rate-lr-ppo2.5e-4強化学習PPOにおける学習率。デフォルトでは2.5e-4に設定されている。
--epoch-e-ppo4強化学習PPOにおけるエポック数。デフォルトでは4に設定されている。
--num-mini-batch-b-ppo4強化学習PPOにおけるバッチ数。デフォルトでは4に設定されている。
--clip-range-c-ppo0.1強化学習PPOにおけるクリップパラメータ。デフォルトでは0.1に設定されている。
--steps-s-ppo128PPOはシミュレーションをn回stepして学習データをサンプリングし、 --epoch 回数 --num-mini-batch でそのデータを学習する。これを繰り返していくのがPPO。このときのnが --steps
--num-processes-p-ppo4強化学習PPOにおける並列プロセス数。デフォルトでは4に設定されている。
--init-log-std-std-ppo0行動分布の初期対数標準偏差の値。デフォルトでは0.0に設定されている。
--num-cores-c4並列プロセス数。デフォルトでは4に設定されている。
--reset-poolfalseイテレーションごとにプールインスタンスをリセットする。

実験を開始するには次のコマンドを実行します。

cd リポジトリのルートディレクトリ/experiments/Chapter6
python run_evogym_poet.py
最終更新: 2023-07-15
«
»
© 2023, O’Reilly Japan, Inc.