強化學習之一 QLearning

2021-10-07 11:31:07 字數 3023 閱讀 9793

在生活中,都有行為準則,好的行為會得到獎勵,不好的行為會得到懲罰。比如小時候做作業,有兩種選擇:寫作業或者看電視。如果選擇寫作業,則家長回來後寫完了作業會受到表揚;如果選擇看電視導致作業沒有寫完,那麼父母回家後發現沒有寫完作業則會受到批評。

具體可看

qlearning也是乙個決策過程。

**如下:

import numpy as np

import pandas as pd

import time

np.random.seed(2)

#隨機數列

print

(np.random.uniform())

n_states=

6#一回合有多少此選擇

actions=

['left'

,'right'

]#每次選擇

epsilon=

0.9#選擇最優的概率

alpha=

0.1#學習效率

lambda=

0.9#獎勵衰減

max_episodes=

10#回合次數

fresh_time=

0.1#步長

defbuild_q_table

(n_states,actions)

: table=pd.dataframe(np.zeros(

(n_states,

len(actions)))

,columns=actions,

)print

(table)

return table

defchoose_action

(state,q_table)

: state_actions=q_table.iloc[state,:]

#q_table按行取

if(np.random.uniform(

)>epsilon)

or(state_actions.

all()==

0): action_name=np.random.choice(actions)

#隨機選擇actions中的動作,左或者右

else

: action_name=state_actions.idxmax(

)return action_name

defget_env_feedback

(s,a)

:if a==

"right"

:if s==n_states-2:

s_="terminal"

r=1else

: s_=s+

1 r=

0else

: r=

0if s==0:

s_=s

else

: s_=s-

1return s_,r

defupdata_env

(s,episode,step_counter)

: env_list=

['-']*

(n_states-1)

+['t']

if s==

'terminal'

: interaction=

'episode %s:total_step=%s'

%(episode+

1,step_counter)

print

('\r{}'

.format

(interaction)

,end='')

time.sleep(2)

print

('\r '

,end='')

else

: env_list[s]

='0'

interaction=

''.join(env_list)

print

('\r{}'

.format

(interaction)

,end='')

time.sleep(fresh_time)

defrl()

: q_table=build_q_table(n_states,actions)

for episode in

range

(max_episodes)

: step_counter=

0 s=

0 is_terminated=

false

updata_env(s,episode,step_counter)

while

not is_terminated:

a=choose_action(s,q_table)

s_,r=get_env_feedback(s,a)

q_predict=q_table.loc[s,a]

if s_!=

'terminal'

: q_target=r+lambda*q_table.iloc[s_,:]

.max()

else

: q_target=r

is_terminated=

true

q_table.loc[s,a]

+=alpha*

(q_target-q_predict)

s=s_

updata_env(s,episode,step_counter+1)

step_counter+=

1return q_table

if __name__ ==

'__main__'

: q_table=rl(

)print

('\r\nq-table:\n'

)print

(q_table)

強化學習之Q learning

三要素 狀態 state 動作 action 獎賞 reward 更具具體情況自行進行給定。q更新公式 q是什麼?動作效用函式 action utility function 用於評價在某一狀態下採取某個動作的優劣。如果q訓練好了,之後 時就可以按照q進行選擇動作。詳解q更新函式 是學習速率 是折扣...

強化學習演算法 Q learning

q learning 演算法的步驟 1 給定引數lamda和獎勵矩陣r 2 令q為0 3 for each episode 3.1 隨機選擇初始的狀態s 3.2 未達到目標狀態,則執行以下幾步 1 在當前狀態s的所有可能行為中選取乙個行為a 2 按照q s,a r s,a lamda max,其中s...

強化學習 Q learning演算法

我們以乙個迷宮尋寶的遊戲為例來看什麼是 q learning。在這個遊戲中,agent 從乙個給定的位置開始,即起始狀態。在不穿越迷宮牆壁的前提下,在每個狀態時,都可以選擇上下左右四個方向走一步,或者原地不動,上下左右這四個動作的每乙個都會將 agent 帶到網格的乙個新的單元格,即新的狀態,在迷宮...