Q学習の簡単な宝探し次元の世界の一つ

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)

 

おすすめ

転載: www.cnblogs.com/hellojiaojiao/p/11352796.html