博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
莫烦RL-01小例子
阅读量:5336 次
发布时间:2019-06-15

本文共 2270 字,大约阅读时间需要 7 分钟。

# Python 3.6.5 :: Anaconda, Inc.import numpy as npimport pandas as pdimport timenp.random.seed(2)N_STATUS = 5ACTIONS = ['left', 'right']EPSILON = 0.9ALPHA = 0.1LAMBDA = 0.9MAX_EPISODES = 13FRESH_TIME = 0.1def build_q_table(n_status, actions):    table = pd.DataFrame(        np.zeros((n_status, len(actions))),        columns=actions,    )    #print(table)    return table#build_q_table(5,[1])def choose_action(state, q_table):    state_actions = q_table.iloc[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_namedef get_env_feedback(S, A):    if A == 'right':        if S == N_STATUS - 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_, Rdef update_env(S, episode, step_counter):    env_list = ['-']*(N_STATUS-1)+['T']    if S == 'terminal':        interaction = 'Episode %d: total_steps = %s' % (episode+1, step_counter)        print('\r{}'.format(interaction), end='')        time.sleep(1)        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_STATUS, ACTIONS)    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.ix[S, A]            if S_ != 'terminal':                q_target = R + LAMBDA*q_table.iloc[S_, :].max()            else:                q_target = R                is_terminated = True                        q_table.ix[S, A] += ALPHA*(q_target - q_predict)            S = S_            update_env(S, episode, step_counter+1)            step_counter += 1    return q_tableif __name__ == "__main__":    q_table = rl()    print('\r\nQ-table:\n')    print(q_table)

  

转载于:https://www.cnblogs.com/alexYuin/p/9522078.html

你可能感兴趣的文章
sql server 2008 不允许保存更改,您所做的更改要求删除并重新创建以下表 的解决办法(转)...
查看>>
[转]iOS学习笔记(2)--Xcode6.1创建仅xib文件无storyboard的hello world应用
查看>>
Spring mvc初学
查看>>
python标准库学习7
查看>>
有意思的代码片段
查看>>
C8051开发环境
查看>>
VTKMY 3.3 VS 2010 Configuration 配置
查看>>
255. Verify Preorder Sequence in Binary Search Tree
查看>>
01_1_准备ibatis环境
查看>>
windows中修改catalina.sh上传到linux执行报错This file is needed to run this program解决
查看>>
[fowarding]Ubuntu jsp平台使用JDBC来连接MySQL数据库
查看>>
JavaScript中的BOM和DOM
查看>>
注册表操作
查看>>
360浏览器兼容模式 不能$.post (不是a 连接 onclick的问题!!)
查看>>
Yii安装使用教程(转)
查看>>
Java四种引用包括强引用,软引用,弱引用,虚引用。
查看>>
spring注入Properties
查看>>
微信小程序开发之从相册获取图片 使用相机拍照 本地图片上传
查看>>
【BZOJ-2295】我爱你啊 暴力
查看>>
【BZOJ-1055】玩具取名 区间DP
查看>>