今天给大家分享如何用Q_learning算法来实现走迷宫,我们的红色方块会一次次的尝试不同的格子,直到落入黑格子,获得惩罚*1;或者走进黄格子,获得奖励*1为止。每一次游戏都会更新Q_table的权重,以实现红色方块下一次能够更加快速的找到黄格子。
本文参照了莫烦python的博客:https://morvanzhou.github.io/tutorials/machine-learning/reinforcement-learning/2-2-tabular-q1/
Q_learning的整个算法过程如下图,具体含义:
首先:初始化一个Q_table;
循环一定次数;
在循环中根据奖励和action更新Q_table;
,这些在本文中都会以代码例子的形式表述。
本文主要分为以下几大块:
一.主循环搭建
二.RL_brain选择动作&更新Q_table的实现
三.环境编写(代码)
一:主循环搭建
我们创建100次循环用来训练更新Q_table。
首先,初始化环境,获取红色方块的开始位置;核心代码:position=env.reset()
其次,我们根据Q_table中的在position位置走不同方向(即动作)reward,来选择reward最高的action;核心代码:action=RL.choose_action(str(position))
第三,我们让环境执行该action,获得环境的反馈:走进黑色各自-1,走进黄色格子+1,其他+0,更新我们的Q_table;核心代码:position_next,reward,done=env.step(action);RL.learn(str(position),action,reward,str(position_next))
最后,我们由于已经执行了action,即我们在当前position向某个方向走了一步,所以我们更新position=position_next
以下为主循环所有代码:
from maze_env import Maze
from RL_brain import QLearningTable
"""
循环更新Q_table
"""
def update():
for episode in range(100):
position=env.reset()
while True:
env.render()
#选择执行的动作,条件为在q_table中奖励最大
action=RL.choose_action(str(position))
position_next,reward,done=env.step(action)
#根据环境反馈的奖励reward更新q_table
RL.learn(str(position),action,reward,str(position_next))
position=position_next
if d