强化学习之Q-learning

Q-learning浅析

当前的机器学习主流方向包含监督学习、无监督学习、强化学习,这里以一个简单的例子讲解强化学习的入门算法Q-learning。

假设有这样的连通图,图中的0、1、2、3、4、5是状态,有向箭头表示可以从一个状态到另一个状态。在此,玩一个游戏,假设玩家agent在任何一个状态,让他自己走动,走到状态5,就赢了。
在这里插入图片描述
在玩游戏的过程中,对于玩家每次的行动系统回给出反馈,这样玩家才能学习。这里我们给状态直接设置权重,能够直接到5的边为100,其它为0,这是初始状态。在强化学习的学习过程中会利用这些权重计算直到收敛。这样,玩家在任何状态都能知道下一步怎么走收益最大(最快赢)。

在这里插入图片描述
在Q-learning中,表示奖赏的表,也叫R表,表记录从一个状态到另一个状态的收益(奖赏)。在初始状态下R表如下:

在这里插入图片描述
其中-1表示不联通,0表示联通但节点不包含奖赏节点5,100表示和状态5直连。
同时,创建一个Q表,表示学到的经验,并创建转移方程如下:

在这里插入图片描述
其中R就是上文奖赏矩阵,在本例中a表示s~。如下看一个实际例子,设λ=0.8

在这里插入图片描述
在这里插入图片描述
随机选择一个状态,如3,根据原图3和1、2、4连通,我们随机选择1,这样计算Q

在这里插入图片描述
这样经过多次迭代后Q表为

在这里插入图片描述
其对应连通图:
在这里插入图片描述

代码实例:

有寻宝游戏如下:
在这里插入图片描述
其中,红色的方块代表寻宝人,黑色的方块代表陷阱,黄色的方块代表宝藏,我们的目标就是让寻宝人找到最终的宝藏。

这里,我们的状态可以用横纵坐标表示,而动作有上下左右四个动作。使用tkinter来做这样一个动画效果。宝藏的奖励是1,陷阱的奖励是-1,而其他时候的奖励都为0。

那么怎么用强化学习玩这个寻宝游戏?
这里重点看一下Q-learning的相关代码

这了,我们用s代表当前状态,用a代表当前状态下采取的动作,r代表获得的奖励,s_代表转移后的状态。

首先是选择下个行动的函数,这里采用 Epsilon-Greedy算法进行选择,每次决策以概率ε去选择奖赏最大的行动个,1-ε的概率来随机选择

    def choose_action(self, observation):
        self.check_state_exist(observation)
        # action selection
        if np.random.uniform() < self.epsilon:
            # choose best action
            state_action = self.q_table.loc[observation, :]
            # some actions may have the same value, randomly choose on in these actions
            action = np.random.choice(state_action[state_action == np.max(state_action)].index)
        else:
            # choose random action
            action = np.random.choice(self.actions)
        return action

然后是q表更新的代码,主要是根据Q状态转移函数迭代,lr是学习率

    def learn(self, s, a, r, s_):
        self.check_state_exist(s_)
        q_predict = self.q_table.loc[s, a]
        if s_ != 'terminal':
            q_target = r + self.gamma * self.q_table.loc[s_, :].max()  # next state is not terminal
        else:
            q_target = r  # next state is terminal
        self.q_table.loc[s, a] += self.lr * (q_target - q_predict)  # update

完整利用强化学习玩寻宝游戏的代码:
https://github.com/DLZWY/Machine-Learning-Checklist/tree/master/rl/Q-learning

原文:http://mnemstudio.org/path-finding-q-learning-tutorial.htm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值