用零基础的视角学强化学习之 Qlearning(一)

qlearning 吾找了很久的中文名,终不得其果。

qlearning为何物,建立q_table ,优化q_table 矩阵的值。

何为q_table. 无例要不成文。

先理一下 ,这个例子的逻辑, 可以阅读完全文再返回来理解

源码地址:HTTPS://GITHUB.COM/YUANYUANGONG/GYYTENSOR.GIT  

在 《零碎的python基础代码》··这个文件夹里。人懒就不重新起 项目,感谢莫烦大神的教程和源码

1,根据实际情况 建立 q_table 

2,在不同的位置根据设置的方法 选择动作 (left,right)

3,根据选择的结果

一,小明想要从1走到6,吾等人类肯定知道 一直往右就对了,但电脑不知道啊,对于电脑 走到 每个 各自都有 两个 方向 right left  

小明想要从1走到6

那么吾就把 格子一记作  state:0 (数组都是从0开始的),格子二 记作 state:1 .每个 格子两个选择(left,right)以此列推,可记作 矩阵:

import numpy as np

import pandas as pd

n_states=6

actions=['left','right']

q_table = pd.DataFrame( np.zeros((n_states, len(actions))),columns=actions, )

print(q_table)

q_table

上面这个矩阵 里面的  0.0  表示 在  status 0   往left 可以获得的 收益值 。至于这 个值 初始是 0.0 。随着训练,在后面通过特有的方法来改变(优化)。 

整个矩阵表明了 在 格子1 ,2 ,3 等 地方 往left  的好处值 以及 往right 的好处,尽管现在全是0.0 。那么电脑现在只会随机选择方向。

有这么一个可以记录 每个格子 (state)选left 还是right 的表,就是让 电脑去瞎走,每走一步,改变 好处值(价值)就是 那些 0.0

代码如下

这是选择 向left right 的逻辑

state 是 0,1,2,3,4,5 

1,传入参数 当前格子(state)--可以理解当前位置  q_table

2, q_table.iloc[state, :]  获取当前 state 的 left  right 的价值 

3,np.random.uniform() 获取一个0到1 的随便变量。EPSILON 全局变量 设置为0.9 

 意味着 这个函数  10%的几率 执行 随机选动作 np.random.choice(ACTIONS)

def choose_action(state, q_table):

    state_actions = q_table.iloc[state, :] #获取当前 state 的 left  right 的价值 

    if (np.random.uniform() > EPSILON) or ((state_actions == 0).all()):  

        action_name = np.random.choice(ACTIONS) #10%的几率 执行 随机选 动作

    else:  

        action_name = state_actions.idxmax()   #选择 价值最大的 动作

    return action_name

当 执行动作就要获取这个动作的反馈,这个例子的反馈只有 两个 到达6 ,没有到达 6   用参数R = 0 or 1 

传入参数  格子位置state(S) 动作action(A) 

返回 S_ (下一步的位置),R(是否到达)

def get_env_feedback(S, A):

    if A == 'right':    # move right

        if S == N_STATES - 2:  #  N_STATES总共多少格子 (-2?从0 开始计数)

            S_ =  N_STATES-1 #终点

            R = 1 

        else:

            S_ = S + 1 #往右 state +1 也就是位置增1

            R = 0 

    else:  # move left

        R = 0

        if S == 0:

            S_ = S  # 到起点

        else:

            S_ = S - 1 #往左位置减 1

    return S_, R

执行了动作,获取了 state(位置) 以及是否到达。就开始评估 这个动作的价值。也就是改变那些0.0。

来看看代码是怎么个逻辑吧

             A = choose_action(S, q_table)  #选择动作 

            S_, R = get_env_feedback(S, A)  #获取反馈

            q_predict = q_table.loc[S, A]  #根据q_table 获取 当前 位置(S),动作(A)对应的 价值 (0.0)

            if R != 1:

                q_target = R + GAMMA * q_table.iloc[S_, :].max()  

                 #GAMMA  是全局变量, 设置为0.9,获取当前位置 最大的值那个值 

            else:

                q_target = R    # next state is terminal

            q_table.loc[S, A] += ALPHA * (q_target - q_predict)  #  ALPHA全局变量,可以理解为学习速率。 

            update_env(S_, episode, step_counter+1) #更新显示的位置

当然,上面这段代码需要循环多次 才能 吧 q_table 更新到我们想要的。

总结一下。qlearning. 就是 让 傻瓜 一开始 瞎乱跑。当这个傻瓜 跑到了 终点。就让他记住 在某个位置,执行了 某个动作 获得了成功 比如在 位置 5 执行向右 到6 。那么 傻瓜就记住了 位置5 动作right  对应 价值 为 1 (你也可以设置成100 ,随你高兴)。一次还无法让傻瓜学会从 1 到 6 怎么走。 他现在只知道 5到6 该如何走。

没事让他 从新再瞎跑一遍。当傻瓜 从位置4到位置5 ,根据上一次经验,位置5 上有 价值。于是就记录位置4 动作right  对应 价值 为 1*0.8 (0.8是我设置的系数,目的?现在不予讨论,去了解一下泛化吧)

同理,可以组建推出 4个位置的 right left 的价值。在这个例子中起点 ,终点的价值是 固定的 0 1。

因为该例子 简单,还不足以证实qlearning 的强大,请关注下一期的 ,走棋。


最后,感谢阅读此文的同志们,若有疑问可以加 QQ 群,660357555 一起来探讨。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,110评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,443评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,474评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,881评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,902评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,698评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,418评论 3 419
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,332评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,796评论 1 316
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,968评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,110评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,792评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,455评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,003评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,130评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,348评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,047评论 2 355