莫烦python学习笔记1
生活随笔
收集整理的這篇文章主要介紹了
莫烦python学习笔记1
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
什么是Q Learning
Q Learning也是一個決策過程
小例子
用tabular Q-learning的方法實現一個小例子,例子的環境是一個一維世界,在世界的右邊有寶藏,探索者只要得到了寶藏嘗到了甜頭,然后以后就記住了得到寶藏的方法,這就是他用強化學習所學習到的行為。
-o---T # T 就是寶藏的位置, o 是探索者的位置Q-learing是一種記錄行為值(Q value)的方法,每種在一定狀態的行為都會有一個值Q(s,a),就是說行為a在s狀態的值是Q(s,a).s在上面的探索游戲中,就是o所咋的地點。而每個地點探索者都能做出兩個行為left/right,這就是探索者的所有可行的a
如果在某個地點s1,探索者計算了他能有的兩種行為,哪個行為的Q值大則選擇哪個行為。
預設值
import numpy as np import pandas as pd import timeN_STATES=6 #1維世界的寬度 ACTION=['left','right'] #探索者的的可用動作 EPSILON=0.9 #貪婪度 greedy ALPHA=0.1 #學習率 GAMMA=0.9 #獎勵遞減值 MAX_EPISODES=13 #最大回合數 FRESH_TIME=0.3 #移動間隔時間Q表
def build_q_table(n_states,actions):table=pd.DataFrame(np.zeros((n_states,len(actions))),columns=actions,) #columns對應的是行為名稱return table定義動作
接著是定義探索者是如何挑選行為的,引入epsilon greedy的概念。因為在初始階段,隨機的探索環境,往往比固定的行為模式要好,所以這也是累計經驗的階段,我們希望探索者不會那么貪婪(greedy),所以EPSILON就是用來控制貪婪程度的值。EPSILON可以隨著探索時間不斷提升(越來越貪婪),不過這個例子中,我們就固定成EPSILON=0.9,90%的時間是選擇最優策略,10%的時間用來探索。
#在某個state地點,選擇行為 def choose_action(state,q_table):state_actions=q.table.iloc[state,:] #選出這個state的所有action值if (np.random.uniform() > EPSILON) or (state_actions.all() == 0): # 非貪婪 or 或者這個 state 還沒有探索過action_name = np.random.choice(ACTIONS)else:action_name=state_actions.argmax()#貪婪度return action_name環境反饋
做出行為后,環境也要給我們的行為一個反饋,反饋出下個state,以及reward
def get_env_feedback(S, A):# This is how agent will interact with the environmentif A == 'right': # move rightif S == N_STATES - 2: # terminateS_ = 'terminal'R = 1else:S_ = S + 1R = 0else: # move leftR = 0if S == 0:S_ = S # reach the wallelse:S_ = S - 1return S_, R環境更新
def update_env(S, episode, step_counter):# This is how environment be updatedenv_list = ['-']*(N_STATES-1) + ['T'] # '---------T' our environmentif S == 'terminal':interaction = 'Episode %s: total_steps = %s' % (episode+1, step_counter)print('\r{}'.format(interaction), end='')time.sleep(2)print('\r ', end='')else:env_list[S] = 'o'interaction = ''.join(env_list)print('\r{}'.format(interaction), end='')time.sleep(FRESH_TIME)強化學習主循環
def rl():q_table=build_q_table(N_STATES,ACTIONS) #初始 qtablefor episode in range(MAX_EPISODES):#回合step_counter=0S=0 #回合初始位置is_terminated=False #是否回合結束update_env(S,episode,step_counter) #環境更新while not is_terminated:A=choose_action(S,q_table) #選擇行為S_,R=get_env_feeback(S,A) #實施行為并得到環境的反饋q_predict=q_table.loc[S,A] #估算得到的(狀態-行為)值if S_!='terminal':q_target = R + GAMMA * q_table.iloc[S_, :].max() # 實際的(狀態-行為)值 (回合沒結束)else:q_target=R #實際的(狀態-行為值)回合結束is_terminated=Trueq_table.loc[S,A]+=ALPHA*(q_target-q_predict) #q_table更新S=S_ #探索者移動到下一個stateupdata_env(S,episode,step_counter+1) #環境更新step_counter+=1return q_table總結
以上是生活随笔為你收集整理的莫烦python学习笔记1的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: static关键字 void和void指
- 下一篇: g++和gcc的区别