# Python 3.6.5 :: Anaconda, Inc.

import numpy as np
import pandas as pd
import time np.random.seed(2) N_STATUS = 5
ACTIONS = ['left', 'right']
EPSILON = 0.9
ALPHA = 0.1
LAMBDA = 0.9
MAX_EPISODES = 13
FRESH_TIME = 0.1 def 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_name def 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_, R def 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_table if __name__ == "__main__":
q_table = rl()
print('\r\nQ-table:\n')
print(q_table)

  

莫烦RL-01小例子的更多相关文章

  1. JavaScript小例子:复选框全选

    JavaScript小例子:复选框全选 这只是一个小例子,很简单,但是这个功能还是很常用的: 实现后效果如图: JavaScript代码: <script type="text/jav ...

  2. oracle数据库包package小例子

    为了把某一个模块的函数.存储过程等方便查询维护,可以把它们打到一个包里.下面给出一个简单的小例子. 1.创建包头 create or replace package chen_pack is func ...

  3. spring-mvc-两个个小例子

    1.用Eclipse创建一个工程,命名为spring2.0 并添加相应的jar包(我用的是4.0.5的版本)到 lib 包下: spring-webmvc-4.0.5.RELEASE.jar spri ...

  4. 【莫烦Pytorch】【P1】人工神经网络VS. 生物神经网络

    滴:转载引用请注明哦[握爪] https://www.cnblogs.com/zyrb/p/9700343.html 莫烦教程是一个免费的机器学习(不限于)的学习教程,幽默风俗的语言让我们这些刚刚起步 ...

  5. tensorflow 莫烦教程

    1,感谢莫烦 2,第一个实例:用tf拟合线性函数 import tensorflow as tf import numpy as np # create data x_data = np.random ...

  6. 稍稍乱入的CNN,本文依然是学习周莫烦视频的笔记。

    稍稍乱入的CNN,本文依然是学习周莫烦视频的笔记. 还有 google 在 udacity 上的 CNN 教程. CNN(Convolutional Neural Networks) 卷积神经网络简单 ...

  7. JSP小例子——实现用户登录小例子(不涉及DB操作)

    实现用户登录小例子用户名和密码都为"admin",登陆成功使用服务器内部转发到login_success.jsp页面,并且提示登陆成功的用户名.如果登陆失败则请求重定向到login ...

  8. python2.7练习小例子(十五)

        15):题目:输出指定格式的日期.     程序分析:使用 datetime 模块.     程序源代码: #!/usr/bin/python # -*- coding: UTF-8 -*- ...

  9. Python-正则表达式及实战小例子

    注意Python的字符串本身也用'\'转义,所以要特别注意,一般我们都建议使用Python的r前缀,就不用考虑转义的问题了  1,行的起始 例子:匹配‘cat’ 开头 patt=re.compile( ...

  10. Struts2 小例子 --第二弹

    struts-2.5.14.1-all.zip  下载后文件夹说明 apps:war格式的例子文件 lib:引用jar包文件 src:源码文件 docs:帮助文档 小例子: 1.创建web工程:str ...

随机推荐

  1. fis3 相关

    fis3 静态资源存放 windows: C:\Users\Administrator\AppData\Local\.fis3-tmp

  2. 2019 SDN阅读作业

    2019 SDN阅读作业 1.为什么需要SDN?SDN特点? 答:因为随着网络规模的不断扩大,封闭的网络设备内置了过多的复杂协议,增加了运营商定制优化网络的难度,科研人员无法在真实环境中规模部署新协议 ...

  3. 【BZOJ3534】[SDOI2014] 重建(矩阵树定理)

    点此看题面 大致题意: 给你一张图,每条边有一定存在概率.求存在的图刚好为一棵树的概率. 矩阵树定理是什么 如果您不会矩阵树定理,可以看看蒟蒻的这篇博客:初学矩阵树定理. 矩阵树定理的应用 此题中,直 ...

  4. a 标签 pointer-events

    a 标签渲染到也页面之后,由于某些原因需要,禁用. 有两种方法可以设置禁用效果. 1.使用 CSS 属性 pointer-events ,设置此属性为 none 之后,元素将不会成为鼠标事件的 tar ...

  5. netstat查看端口状态

    netstat netstat -tunlp 用于显示 tcp,udp 的端口和进程等相关情况. netstat 查看端口占用语法格式: netstat -tunlp | grep 端口号 -t (t ...

  6. 关于lambda总结-持续更新

    阅读:https://blog.csdn.net/u013541140/article/details/102710138 1 public static void main(String[] arg ...

  7. WPF Xaml中创建集合

    首先在xaml中创建集合是一个不可取的方法. 本方法仅作为xaml的学习. 本文略微无聊,主要是编写的东西都是老玩意. 首先是定义一个类,作为你要加载集合的模型. 结构如下 internal clas ...

  8. Java代码开发之《安全规约》

    安全规约 1. [强制]隶属于用户个人的页面或者功能必须进行权限控制校验.     说明:防止没有做水平权限校验就可随意访问.修改.删除别人的数据,比如查看他人的私信内容.修改 他人的订单. 2. [ ...

  9. 2019-7-29-win10-UWP-使用-MD5算法

    原文:2019-7-29-win10-UWP-使用-MD5算法 title author date CreateTime categories win10 UWP 使用 MD5算法 lindexi 2 ...

  10. 2019-11-23-WPF-使用-RawInput-接收裸数据

    原文:2019-11-23-WPF-使用-RawInput-接收裸数据 title author date CreateTime categories WPF 使用 RawInput 接收裸数据 li ...