実装上のヒント
まずは,課題に取り組む前に人工知能の内容の復習をしておくこと.また,Pythonの基本的な実装方法を自主学習しながら進めること.
アルゴリズムをどう実装していいかわからないときは,教科書の例題や演習問題を自分で紙に書いてやってみてアルゴリズムの流れを把握しよう.
Pythonの構文,演算子や関数の挙動がわからないときは,最低限の簡単なコードを別で書いて実行し,引数の中身や条件などを変えてみながら挙動を確認してみるとよい.
Pythonの基本的な書き方などに関するヒント
ヒントページ「Python3の基本的な書き方・使い方」を参考にしてみよう.
参考サイトのリンクにあるページも見てみよう.
迷路の描画に関するヒント
ヒントページ「迷路を表示するには」を参考にしてみよう.
※迷路を描画すれば探索の結果などが視覚的にわかるため,課題の実装がうまくできているかの確認に役立つが,課題のチェックには必ずしも必要ではない.
描画しない場合は,プロンプト(端末)上に課題の結果が確認できるような形で座標や数値を示し,チェックの際は表示した内容を必ず説明すること.
補足情報
迷路のサイズ(高さ,幅)を知りたい
height, width = maze.shape
迷路の左上をスタート,右下をゴールにしたい.
start = (1, 1)
goal = (height-2, width-2)
作成した迷路において,指定した座標が通路(0)になっているか確認しよう.
ランダム関数を使いたい,乱数を生成したい
乱数を得るためには,Python標準ライブラリのrandomをインポートして使用するか,numpy.random(np.random)を使用する方法がある.
import random
代表的なランダム関数として,以下がある.(標準ライブラリとnumpyでは仕様が異なるので注意しよう.)
random.random()
random.randint(a,b)
random.choice(list)
random.choices(list, k=N, weights=prob)
粒子フィルタのリサンプリングに活用するとよい.
np.random.randint(N)
np.random.random()
np.random.choice(N, p=prob)
強化学習
Q(s,a)を記録するテーブル(Q_table)は,全ての状態 s における全ての行動 a ごとに値を格納する.
また,Q値の初期値は任意の値で良い.一般的には,すべての要素の値を 0.0 として初期化する.
例えば,heightを迷路の高さ,widthを幅,action_Nをエージェントの行動の種類数としたとき,以下のようにすると初期値0.0の3次元配列を作ることができる.
Q_table = np.zeros((height, width, action_N))
状態価値関数 V(s) は,迷路と同様のサイズのnp.ndarray変数を用意し,ある状態 s について全ての行動 a の中から最大のQ値を取得すればよい.
必須課題4-2 における方策は,必須課題4-1に従えば自然と ランダム法 になるはずである.
ベイズフィルタ
必須課題5-1は,教科書8.4節(p.113~)の例と同じなので,教科書と同様の結果が出力されるかを一つずつ確認するとよい.
各ステップにおける行動が 右,右,左 であるとき,最大ステップ数 T=3 である(ベイズフィルタのアルゴリズムの2行目).つまり3ステップ目で終了.
このとき,数式の変数の添え字 t は現在のステップ数を表す.
状態遷移 P(St | St-1, at-1)
確率0.8 移動する
ただし,もし 移動先が壁 ならば,移動しない
確率0.2 移動しない(その場に留まる)
観測確率(センサ情報の確率) P(ot | St)
確率0.7 正しい観測( St の位置で得られる観測)
確率0.3 誤った観測
それぞれ確率0.02で残り15 個の観測の選択肢の中から誤った観測が得られるものとする.