强化学习第一个小例子
小例子import numpy as npimport pandas as pdimport timeN_STATES=6 #1维世界的宽度ACTIONS=['left','right'] #探索者的可用动作EPSILON=0.9 #贪婪度 greedyALPHA=0.1 #学习率GAMMA=0.9 #奖励递减值MAX_EPISODES=13 #最大回合数FRESH_TIME=0.001 #移动间
·
小例子
import numpy as np
import pandas as pd
import time
N_STATES=6 #1维世界的宽度
ACTIONS=['left','right'] #探索者的可用动作
EPSILON=0.9 #贪婪度 greedy
ALPHA=0.1 #学习率
GAMMA=0.9 #奖励递减值
MAX_EPISODES=13 #最大回合数
FRESH_TIME=0.001 #移动间隔时间
def build_q_table(n_states,actions):
table=pd.DataFrame(
np.zeros((n_states,len(actions))),
columns=actions
)
return table
#在某个state地点,选择行为
def choose_action(state,q_table):
state_actions=q_table.iloc[state,:] #选出这个state的所有行为
if (np.random.uniform()>EPSILON) or (state_actions.all()==0):
action_name=np.random.choice(ACTIONS)
else:
action_name=state_actions.argmax() #贪婪模式
return action_name
#环境反馈S_,R
#做出行为后,环境也要给我们行为一个反馈
def get_env_feedback(S,A):
if A =='right':
if S==N_STATES -2:
S_='terminal'
R=1
else:
S_=S+1
R=0
else:
R=0
if S==0:
S_=S
else:
S_=S-1
return S_,R
#环境更新
def update_env(S, episode, step_counter):
# This is how environment be updated
env_list = ['-']*(N_STATES-1) + ['T'] # '---------T' our environment
if 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) #初始化q table
for episode in range(MAX_EPISODES):#回合
step_counter=0
S=0 #回合初始位置
is_terminated=False #是否回合结束
update_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+ GAMMA * q_table.iloc[S_, :].max() #实际的(状态-行为)值(回合没结束)
else:
q_target=R
is_terminated=True
q_table.loc[S,A]+=ALPHA * (q_target - q_predict) #q_table更新
S=S_ #探索者移动到下一个state
update_env(S,episode,step_counter+1) #环境更新
step_counter+=1
return q_table
if __name__ == '__main__':
q_table=rl()
print('\r\nQ-table:\n')
print(q_table)
更多推荐
所有评论(0)