Q-学習アルゴリズム:
(1)Qテーブルを初期化し、ライン数が状態Qテーブル番号で、列の数は、アクションの数です。
(2)最初のランダムに選択されたアクションを想定し、いくつかのポリシーは、そのような貪欲戦略によれば、初期状態S1を、この状態で選択操作として選択A1です。
状態が終了した場合に動作が報酬を返す、A1状態を終了していない後のない最終的な状態は、状態S2は、この場合、選択された場合(3)宝、ゲームの終わりを見つけるために対応する、状態S2によって決定されるので、Qの最大値アクションのアクションの次のステップとして。Qは、実際の値にすることができます。Q(S1、A1)= R +λ* MAXQ(S2)。Q(S1、A1)のQテーブルを更新します。Q(S1、A1)= Q(S1、A1)+α* [R +λ* MAXQ(S2)-Q(S1、A1)]、[]は、実際の値 - 推定Q Q値。
シンプルなコードは次のよう:
1 #のコーディング8 = UTF- 2 インポートNP AS numpyの 3 インポートPD AS PANDAS 。4 インポート時間 。5 #のコンピュータは、いくつかの擬似乱数を生成し、それぞれの実行によって生成された乱数は同じである 。6 np.random.seed(2 ) 7 位いくつかのグローバル変数を作成 8 N_STATES = 6 #状態の数、6つの状態の状態0~5の合計 9操作] = [ 「左」、「右」 ] #のアクションのみ2つの左と右の 10 EPSILON = 0.9 #貪欲なストラテジ 11 ALPHA = 0.1 #学習率 12を= 0.9 LAMBDA #割引率 13 MAX_EPISODEs = 10 #総訓練10回 14 FRESH_TIME = 0.1 15 位Q-テーブルを初期化し、私は値が最終結果に影響はならないものに初期化されているQ-テーブルだと思う 16 DEFのbuild_q_table(n_statesを、アクション) 。17 表= pd.DataFrame( 18れる np.zeros((n_states、LEN(アクション)))、 19 列= アクション、 20である ) 21は #1 を印刷(表) 22は、 リターン(表) 23である #1 build_q_table(N_STATES、 ACTIONS) 24 DEFのchoose_action(州、q_table): 25 state_action = q_table.iloc [状態,:] 26 であれば(np.random.uniform()> EPSILON)又は(state_action.all()== 0): 27 ACTION_NAME = np.random.choice(対応) 28 他: 29 ACTION_NAME = state_action.idxmax() 30 リターンACTION_NAME 31 DEF get_env_feedback(S、A): 32 であれば == " 右" : 33 であれば、S == N_STATES-2 : 34 S_ = " 端末" 35 R = 1 36 他: 37 S_ =秒+ 1 38 R = 0 39 他: 40 R = 0 41 であれば S == 0: 42 S_ = S 43 他: 44 S_ =のS-1 45 リターンS_を、R 46 DEF update_env(S、エピソード、step_couter): 47 env_list = [ " - " ] *(N_STATES-1)+ [ " T " ] 48 もし S ==" 端末" : 49 対話= " :TOTAL_STEPS =%sのエピソード%S "%(エピソード+ 1 、step_couter) 50 プリント(" \ rを{} " .format(相互作用)、終了= '' ) 51 (time.sleep 2 ) 52 プリント(' \のR '、末端= '' ) 53 他: 54 env_list [S] = ' 0 ' 55 対話= '' 。 参加(env_list)56は プリント(" \のR&LT {} " .format(相互作用)、終了= '' ) 57である time.sleep(FRESH_TIME) 58 DEFのRLは、()である: 59の #が表Qの初期化 60 q_table = build_q_table(N_STATES、アクションは) 61であります ためエピソードにレンジ(MAX_EPISODEs): 62である step_counter = 0 63である #初期S選択 64 S = 0 65 is_terminal = Falseの 66 update_env(S、エピソード、step_counter) 67 位Sが最終状態ではない場合は、環境を与えるためにアクションを選択すると、S_のフィードバックを与える(新しい状態)とR(報酬) 68 一方 ませんis_terminal: 69 A = choose_action(S、q_table) 70 S_のは、R = get_env_feedback(S 、A) 71である q_predict = q_table.ix [S、A] 72 IF!S _ = " ターミナル" : 73である #計算された実際の値Q 74 q_target LAMBDA + * = R&LT q_table.iloc [S _、:] MAX()。 75 他: 76 q_target = R&LT 77 is_terminal = Trueの 78 q_table.ix [S、A] + = ALPHA *(q_target- q_predict) 79 S = S_ 80 update_env( 81 S、エピソード、step_counter + 1 82 ) 83 step_counter = step_counter + 1 84 戻りq_table 85 86 なら __name__ == " __main__ " : 87 q_table =のRL() 88 プリント(" \ R \ NQ-表:の\ n " ) 89 プリント(q_table)