Q値を記録する配列を作成しましたので、今度はQ値を元にして車の「次の行動を決める」ブロックを作ってみましょう。
まず「行動」という変数と「Q値の最大値」という変数を作成します。
では「次の行動を決める」ブロックをブロック定義から作ってください。このブロックは繰り返し実行されますので「画面を再描画せずに実行する」は必ずチェックして下さい。
このブロックは車の現在の座標において上→左→下→左の行動順にQ値を比較して、Q値が最大になる行動を変数「行動」、その時のQ値の最大値を変数「Q値の最大値」に入れるという動作をしています。
チャレンジ
「〜回繰り返す」制御ブロックを使ってもっとシンプルなプログラムにしてみましょう。
ではこのブロックのテストをしましょう。まず「緑の旗」を押した時に実行するテストプログラムを次の様に変更します。
では「緑の旗」ボタンを押してテストしてみましょう。車の現在の座標つまりスタート地点における上方向(行動=1)のQ値を10にセットしてから「次の行動を決める」ブロックを実行しますので、変数「行動」と「Q値の最大値」の値が次の様になっていれば正常動作となります。
うまく動きましたら「Q値をセットする」の行動とQ値の数値を色々変えるとどの様に変数「行動」と「Q値の最大値」の値が変化するのか試して下さい。 確認が終わったら変数「行動」と「Q値の最大値」は非表示に戻しておいて下さい。
チャレンジ
今回は上→左→下→左の順に行動のQ値を比較していましたので、もし同じQ値の行動が2つ以上ある場合は必ず上→左→下→左の優先順で選択してしまいます。本来のQ学習では同じ値の行動が2つ以上ある場合はランダムに行動を選択しますので、その様にプログラムを改造してみましょう。