Qlearning教你的机器人认错

一、引言

本文借助Q-learning简单的实现一个机器人认错的demo,先一睹效果:



Qlearning机器人

为了简化问题,笔者给它预设了三个答案:

['你管我', '我没错','我错了']

让它随机选择回答,然后通过笔者给它的反馈,它自己判断哪个回答会得到较好的反馈...最后它发现回答“我错了”会得到笔者的夸奖,此时,再问它同样的问题的时候,它就会选择反馈较好的答案。

二、实现原理

本案例基于Q-learning实现(本文简要说明了实现过程,如果需要进一步理解的请参考相关文献),简单的来说就是告诉机器人:

在当前状态下进行什么样的回答得到的价值回报最大

比如某同学现在放学了,他有两个选择:回家预习明天的功课和去网吧打游戏,而此时他老爸告诉他了,回家预习就给他买玩具车,打游戏就得挨揍,所以他选择了回家预习,到了第二天放学,他又想起了打游戏,于是继续在预习和打游戏中徘徊,但他思考了一下,继续预习得到玩具车的可能性更大...

上述例子中,放学了就属于某同学的状态S,预习和打游戏是两个他可以选择的行为A,玩具车和挨揍就是他的奖惩R(玩具车为1,挨揍为0),假设某同学一开始什么都不知道,他只能通过不断尝试两种行为,然后通过老爸给他的奖惩对比判断放学了到底该干嘛,判断的价值函数如下:

价值函数

表示状态S下做A动作得到综合价值,该价值是对于整体而言,眼观较为长远

表示状态S下做A动作得到价值临时价值,该价值着眼于眼前利益

',a')表示状态S下做A动作后进入s'状态,然后在s'状态下根据前几次的经验预估计有可能得到的最大价值,即预测未来价值,未来价值的可信度需要打个折扣,故乘(0-1之间)

表示学习率

如何理解这个公式呢

本次S下进行A动作得到的综合价值=上次S下进行A动作得到价值+(本次S下进行A动作有可能产生的综合价值-上次次S下进行A动作得到价值)

=上次S下进行A动作得到价值+本次和上次对比的差距

思路如下:

1、建立一个表格Q-table准备记录状态S下做A动作得到价值

2、随机选择一种方式A去尝试,试试老爸会给玩具车还是打一顿(⊙o⊙)…,得到R

3、尝试完以后,直接思考明天放学后是预习得到玩具车的可能性大还是被打的可能性大(环境反馈)

4、根据判价值函数更新 Q-table

5、回到2、继续不断地选择A,从第二次开始,大部分的选择根据Q-table中的最大价值动作来选,留一小部分的可能性去随机尝试其他动作

三、代码实现

1、构建Q-table


Qlearning教你的机器人认错_第1张图片

2、动作选择函数

Qlearning教你的机器人认错_第2张图片

3、执行动作后反馈函数


Qlearning教你的机器人认错_第3张图片

4、学习过程


Qlearning教你的机器人认错_第4张图片

四、总结

本文做了一个简单的机器人自学实验,为编程爱好者提供一些乐趣,编程并非所传的那么枯燥,思之所向,码之,乐至!从中也可以看出,程序也可以设计得像人一样,通过引导而走向一定程度的智能。

你可能感兴趣的:(Qlearning教你的机器人认错)