Q_Learning算法的一个简单的应用。

想必很多人对Q_Learning比较熟悉。但是Q_Learning重在Learning。那么Q_Learning以何种方式去Learning呢?我们可以想象一下一个正在森林中摸索前进的迷途小羔羊。周围能见度很低,只能走一步看一步。它无法预知距离自己太远的山路,但是它记忆力比较好,曾经走过的路,遇到过的环境它都记得。那么这些“经验”却是小羔羊能够不断摸索前进的宝贵“知识”,羔羊遇到了与之前碰到的相似的环境或者一样的环境的时候,它会选择它的记忆中能够使得自己顺利通过的走法,因为之前这样走没有什么问题,那么现在还是像这样走,问题也许也不太大,虽然可能还会有更好的走法(这需要羔羊进一步的学习。)Q_Learning算法与之一样,一个陌生的环境中,我们往往只关心我们所处的当前环境下要采取怎样的行动,这个行动使得我们获益最大而不考虑更远的情况。

下面就一篇博客上提到的英文原文(Step-By-Step Tutorial 点击打开链接)中提到的一个具体的场景为例,来举个Q_Learning算法的实际应用的例子。英文原文大家可以在网上直接下载,原文中只给出算法原型,以及部分分析过程,以及最后的收敛状态。并没有给出具体的实现程序。学过算法的人应该知道,能不能根据别人的算法编制出能够解决实际问题的程序,在某种程度上能够体现出子集对该算法的理解程度。所以对于比较熟悉Q_Learning算法的读者来说,这篇博客纯属扯淡,但是对于刚刚入门,想要学习并且真正理解Q_Learning算法的人来说可能还有点用。我使用Q_Learning算法基本上实现了Step-By-Step Tutorial中提出的简单场景中提炼出来的基本问题。java代码以及运行结果如下:

package Q_Learning;
public class Q_Learning {
private int[][] R;//当前状态转移到下一状态下的reward
private int[][] Q;//某个状态下,采取某个动作之后可预见的将来的回报,评估当前状态下动作选择的好坏。
public int[][] getR() {
return R;
}
public void setR(int[][] r) {
R = r;
}
public int[][] getQ() {
return Q;
}
public void setQ(int[][] q) {
Q = q;
}
//获取R值
public int GetCertainR(int Rx,int Ry){
return R[Rx][Ry];
}
//获取Q值
public int GetCerTainQ(int Q

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值