日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

莫烦python学习笔记1

發(fā)布時(shí)間:2023/12/20 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 莫烦python学习笔记1 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

什么是Q Learning

Q Learning也是一個(gè)決策過程

小例子

用tabular Q-learning的方法實(shí)現(xiàn)一個(gè)小例子,例子的環(huán)境是一個(gè)一維世界,在世界的右邊有寶藏,探索者只要得到了寶藏嘗到了甜頭,然后以后就記住了得到寶藏的方法,這就是他用強(qiáng)化學(xué)習(xí)所學(xué)習(xí)到的行為。

-o---T # T 就是寶藏的位置, o 是探索者的位置

Q-learing是一種記錄行為值(Q value)的方法,每種在一定狀態(tài)的行為都會(huì)有一個(gè)值Q(s,a),就是說行為a在s狀態(tài)的值是Q(s,a).s在上面的探索游戲中,就是o所咋的地點(diǎn)。而每個(gè)地點(diǎn)探索者都能做出兩個(gè)行為left/right,這就是探索者的所有可行的a

如果在某個(gè)地點(diǎn)s1,探索者計(jì)算了他能有的兩種行為,哪個(gè)行為的Q值大則選擇哪個(gè)行為。

預(yù)設(shè)值

import numpy as np import pandas as pd import timeN_STATES=6 #1維世界的寬度 ACTION=['left','right'] #探索者的的可用動(dòng)作 EPSILON=0.9 #貪婪度 greedy ALPHA=0.1 #學(xué)習(xí)率 GAMMA=0.9 #獎(jiǎng)勵(lì)遞減值 MAX_EPISODES=13 #最大回合數(shù) FRESH_TIME=0.3 #移動(dòng)間隔時(shí)間

Q表

def build_q_table(n_states,actions):table=pd.DataFrame(np.zeros((n_states,len(actions))),columns=actions,) #columns對(duì)應(yīng)的是行為名稱return table

定義動(dòng)作

接著是定義探索者是如何挑選行為的,引入epsilon greedy的概念。因?yàn)樵诔跏茧A段,隨機(jī)的探索環(huán)境,往往比固定的行為模式要好,所以這也是累計(jì)經(jīng)驗(yàn)的階段,我們希望探索者不會(huì)那么貪婪(greedy),所以EPSILON就是用來控制貪婪程度的值。EPSILON可以隨著探索時(shí)間不斷提升(越來越貪婪),不過這個(gè)例子中,我們就固定成EPSILON=0.9,90%的時(shí)間是選擇最優(yōu)策略,10%的時(shí)間用來探索。

#在某個(gè)state地點(diǎn),選擇行為 def choose_action(state,q_table):state_actions=q.table.iloc[state,:] #選出這個(gè)state的所有action值if (np.random.uniform() > EPSILON) or (state_actions.all() == 0): # 非貪婪 or 或者這個(gè) state 還沒有探索過action_name = np.random.choice(ACTIONS)else:action_name=state_actions.argmax()#貪婪度return action_name

環(huán)境反饋

做出行為后,環(huán)境也要給我們的行為一個(gè)反饋,反饋出下個(gè)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

環(huán)境更新

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)

強(qiáng)化學(xué)習(xí)主循環(huán)

def rl():q_table=build_q_table(N_STATES,ACTIONS) #初始 qtablefor episode in range(MAX_EPISODES):#回合step_counter=0S=0 #回合初始位置is_terminated=False #是否回合結(jié)束update_env(S,episode,step_counter) #環(huán)境更新while not is_terminated:A=choose_action(S,q_table) #選擇行為S_,R=get_env_feeback(S,A) #實(shí)施行為并得到環(huán)境的反饋q_predict=q_table.loc[S,A] #估算得到的(狀態(tài)-行為)值if S_!='terminal':q_target = R + GAMMA * q_table.iloc[S_, :].max() # 實(shí)際的(狀態(tài)-行為)值 (回合沒結(jié)束)else:q_target=R #實(shí)際的(狀態(tài)-行為值)回合結(jié)束is_terminated=Trueq_table.loc[S,A]+=ALPHA*(q_target-q_predict) #q_table更新S=S_ #探索者移動(dòng)到下一個(gè)stateupdata_env(S,episode,step_counter+1) #環(huán)境更新step_counter+=1return q_table

總結(jié)

以上是生活随笔為你收集整理的莫烦python学习笔记1的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。