python代码阅读_莫烦Python RL 代码阅读一
算法分析
不分析如何实现 environment
def build_q_table(n_states, actions)
def build_q_table(n_states, actions):
table = pd.DataFrame(
np.zeros((n_states, len(actions))), # q_table initial values
columns=actions, # actions's name
)
# print(table) # show table
return table
pd.DataFrame()
np.zeros(a,b)
在下方版块有整理
此函数用于构建n行,len(actions)列的Q-table,算是典型的表格型方法
def choose_action(state, q_table)
def choose_action(state, q_table):
# This is how to choose an action
state_actions = q_table.iloc[state, :]
if (np.random.uniform() > EPSILON) or ((state_actions == 0).all()): # act non-greedy or state-action have no value
action_name = np.random.choice(ACTIONS)
else: # act greedy
action_name = state_actions.idxmax() # replace argmax to idxmax as argmax means a different function in newer version of pandas
return action_name
q_table.iloc()---------------------此处为输出当前S所对应的1*len(actions)的矩阵
np.random.uniform() ----------从0到1等概率随机取值为实现epslon贪心探索功能
(state_actions == 0).all()-----矩阵全为0也触发非贪心的随机策略
state_actions.idxmax()-------获取此状态下的最高q值所对应的action
def rl()
def rl():
# main part of RL loop
q_table = build_q_table(N_STATES, 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) # take action & get next state and reward
q_predict = q_table.loc[S, A]
if S_ != 'terminal':
q_target = R + GAMMA * q_table.iloc[S_, :].max() # next state is not terminal
else:
q_target = R # next state is terminal
is_terminated = True # terminate this episode
q_table.loc[S, A] += ALPHA * (q_target - q_predict) # update
S = S_ # move to next state
update_env(S, episode, step_counter+1)
step_counter += 1
return q_table
上述代码为下图伪代码的实现,基础思路为:
利用估值与现实值的偏差对于动作价值进行更新,类似于控制论中用偏差消除偏差的思路,最后逼近真实的动作价值。是一种TD(0)方法。
算法改进思路及疑问:
1.改变回报的表达形式,可以加入多步的视野
2.随时间降低epsilon,后期减少探索
3.疑问:此处表格型方法是否可以引入资格迹,使其变为后向试图
小贴士:
众所周知,Q-Learning相较Sarsa更为冒险,是因为Q-Learning唯利是图,Sarsa相对保守~
Python函数功能补漏
np.random.seed() 函数
seed( ) 用于指定随机数生成时所用算法开始的整数值。
1.如果使用相同的seed( )值,则每次生成的随即数都相同;
2.如果不设置这个值,则系统根据时间来自己选择这个值,此时每次生成的随机数因时间差异而不同。
3.设置的seed()值仅一次有效
np.zeros(a,b)函数
用法:zeros(shape, dtype=float,order=‘C’)
返回:返回来一个给定形状和类型的用0填充的数组;
参数:shape:形状 EX:(n,m) — n行m列
dtype:数据类型,可选参数,默认numpy.float64
pd.DataFrame()函数
pandas.DataFrame( data, index, columns, dtype, copy)
DataFrame是一种表格型数据结构,它含有一组有序的列,每列可以是不同的值。DataFrame既有行索引,也有列索引,它可以看作是由Series组成的字典,不过这些Series公用一个索引。
DataFrame的创建有多种方式,不过最重要的还是根据dict进行创建,以及读取csv或者txt文件来创建。这里主要介绍这两种方式
功能:创建一个DataFrame对象(带索引的表格)
data:表示要传入的数据 ,包括 ndarray,series,map,lists,dict,constant和另一个DataFrame
index: 行索引 (可初始化如:index=[‘one’,‘two’,‘three’,‘four’,‘five’])
columns: 列索引 (可初始化如:columns=[‘year’,‘state’,‘pop’,‘debt’])
dtype:每列的类型
copy: 查了api,才知道意思是从input输入中拷贝数据。默认是false,不拷贝
功能函数
函数
功能
df.axes
获取行及列索引
df.T
行与列对调
df. info()
打印DataFrame对象的信息
df.head(i)
显示前 i 行数据
df.tail(i)
显示后 i 行数据
df.describe()
查看数据按列的统计信息
根据字典创建
data = {
'state':['Ohio','Ohio','Ohio','Nevada','Nevada'],
'year':[2000,2001,2002,2001,2002],
'pop':[1.5,1.7,3.6,2.4,2.9]
}
frame = pd.DataFrame(data)
>frame
#输出
pop state year
0 1.5 Ohio 2000
1 1.7 Ohio 2001
2 3.6 Ohio 2002
3 2.4 Nevada 2001
4 2.9 Nevada 2002
q_table.iloc()函数
loc是基于label进行索引的
print(df1.loc[:,[‘a’, ‘b’]])(输出所有行,以及a、b列)
df1.loc[:,0:2]这么写报错, 因为loc索引的是label,显然在df1的列的名字中没有叫0,1和2的。
print(df1.iloc[:,0:2])而不可写为print(df1.iloc[:,[‘a’, ‘b’]])
np.random.uniform() 函数
numpy.random.uniform(low=0.0, high=1.0, size=None)
从[low, high])中均匀取值,没有任何参数的话,是从[0, 1)
官方文档
.all()函数
all() 函数用于判断给定的可迭代参数 iterable 中的所有元素是否都为 TRUE,如果是返回 True,否则返回 False。
元素除了是 0、空、None、False 外都算 True。
.idmax()函数
pandas Series 的 argmax 方法和 idxmax 方法用于获取 Series 的最大值的索引值
.format()函数
一个格式化字符串的方法
Advantages:
1.不需要理会数据类型的问题,在%方法中%s只能替代字符串类型
2.单个参数可以多次输出,参数顺序可以不相同
3.填充方式十分灵活,对齐方式十分强大
4.官方推荐用的方式,%方式将会在后面的版本被淘汰
Example:
print('hello {name1} i am {name2}'.format(name1='Kevin',name2='Tom'))
# hello Kevin i am Tom
可显示数据的数量、缺失值、最小最大数、平均值、分位数等信息 ↩︎
python代码阅读_莫烦Python RL 代码阅读一相关推荐
- 莫烦python系列教程_莫烦python教程学习笔记——总结篇
一.机器学习算法分类: 监督学习:提供数据和数据分类标签.--分类.回归 非监督学习:只提供数据,不提供标签. 半监督学习 强化学习:尝试各种手段,自己去适应环境和规则.总结经验利用反馈,不断提高算法 ...
- 莫烦Python代码实践(一)——Q-Learning算法工程化解析
提示:转载请注明出处,若本文无意侵犯到您的合法权益,请及时与作者联系. 莫烦Python代码实践(一)--Q-Learning算法工程化解析 声明 一.Q-Learning算法是什么? 二.Q-Lea ...
- 莫烦python教程部分代码
GitHub资源整理 莫烦python教程部分代码 莫烦python教程部分代码 整理了一部分莫烦Python教程中的代码,并对代码进行了详细的注释.由于莫烦大佬在做TensorFlow教程时使用的0 ...
- 【莫烦Python】机器要说话 NLP 自然语言处理教程 W2V Transformer BERT Seq2Seq GPT 笔记
[莫烦Python]机器要说话 NLP 自然语言处理教程 W2V Transformer BERT Seq2Seq GPT 笔记 教程与代码地址 P1 NLP行业大佬采访 P2 NLP简介 P3 1. ...
- 莫烦python教程下载_Python 有哪些好的学习资料或者博客?
Python是一门语法非常简单的语言,学习Python不需要花大量时间去学习它的语法,过一遍就行,主要靠实践.先给大家分享一个免费的Python的编程课,有Python的视频课程+代码实践课+辅导答疑 ...
- 【莫烦Python】Python 基础教程——学习笔记
文章目录 本笔记基于p1-p29[莫烦Python]Python 基础教程 大家可以根据代码内容和注释进行学习. 安装 我的:python3.8+anaconda+VS code print() pr ...
- CNN识别手写数字-莫烦python
搭建一个 CNN识别手写数字 前面跟着莫烦python/tensorflow教程完成了神经网络识别手写数字的代码,这一part是cnn识别手写数字的 import tensorflow as tf f ...
- 【莫烦Python】Numpy教程
目录 前言 1.numpy属性 2.numpy的array创建 3.numpy的基础运算 4.numpy的基础运算2 5.numpy的索引 6.numpy的array合并 7.numpy的array分 ...
- 【莫烦Python】Pandas教程
目录 前言 1.Pandas vs Numpy 2.基本介绍 3.选择数据 4.设置值 5.处理丢失的数据 6.pandas导入导出 7.pandas合并concat 8.pandas合并merge ...
- 【莫烦Python】Matplotlib Python画图教程
目录 前言 1.基本使用 1.1 基本用法 1.2 figure图像 1.3 设置坐标轴1 1.4 设置坐标轴2 1.5 Legend图例 1.6 Annotation标注 1.7 tick能见度 2 ...
最新文章
- PHP jquery瀑布流特效源码
- awakeFromNib方法和viewDidLoad方法区别
- exe的dll加载过程
- 钥匙计数之一(HDU-1483)
- html给table加外边框,如何给table添加边框
- python大数据基础学习环境变量_《Python大数据基础与实战》[56M]百度网盘pdf下载...
- python3实现灰度图的双三次插值算法缩放
- springboot 之 Starter
- iOS之Swift实现二维码扫描
- Squitd代理服务器安装
- Oracle 中递归查询
- 刀片服务器如何选择操作系统,刀片服务器如何选择操作系统?
- SQLServer系统函数之聚合函数
- 求组合数(完善中.......)
- 设计模式-day05
- 微信红包封面免费领取,自定义个性化红包封面
- 谷歌宣布设立100亿美元基金助力印度数字经济发展
- day01 计算机的基本知识
- 计算机二级python基本操作题(二)
- 奥的斯电梯服务器自动呼梯,eCall BLE