什么是 Q Leaning - 强化学习 Reinforcement Learning | 莫烦Python
Q-Learning 决策
状态s
行为 a
在行为准则Q 表中寻找 Q(s1, a1) Q(s1, a2) 的值, 并比较他们的大小, 选取较大的一个.
Epsilon greedy 是用在决策上的一种策略, 比如 epsilon = 0.9 时, 就说明有90% 的情况我会按照 Q 表的最优值选择行为, 10% 的时间使用随机选行为. alpha是学习率, 来决定这次的误差有多少是要被学习的, alpha是一个小于1 的数. gamma 是对未来 reward 的衰减值. 我们可以这样想象.
Q-learning 算法更新 - 强化学习 Reinforcement Learning | 莫烦Python
Q-learning 算法更新RL是分两部分:env和brain;
brain内含有Qlearningtable更新表
这里还有一个运行模块test,在这里指的是如何提升循环
env-maze
黄色的是天堂 (reward 1), 黑色的地狱 (reward -1)
可以先不做
brain
这就是整个 Qlearning 最重要的迭代更新部分啦.
test
def update():是这里的更新方法
episode 声明回合数量
observation = env.reset() 初始点的信息(坐标)
以上都是已知的信息
下面开始循环
action = RL.choose_action(str(observation)) 基于现有的s0,也就是observation,得出在s0情况下的a0-an
observation_, reward, done = env.step(action)探索者在环境中实施这个 action, 并得到环境返回的下一个 state 观测值, reward 和 done,得出s0,a0-an,Q(s0,a0)-Q(s0,a0),得出Q表(s0)
RL.learn(str(observation), action, reward, str(observation_))也就是在Q表中得到学习
observation = observation_ 从s0跳转至s1,并且将s1再次视为s0
RL:这里是tkinter编写,在main函数运行时定义,在这里是选择了一种学习方式
RL = QLearningTable(actions=list(range(env.n_actions)))
需要传入一个action,通过QLearingTable执行
env.after(100, update)
env.mainloop()
tkinter的操作需要
Q-learning 思维决策 - 强化学习 Reinforcement Learning | 莫烦Python
Q-learning 思维决策首先关注前面的算法更新需要的方法
分别有
action = RL.choose_action(str(observation))
RL.learn(str(observation), action, reward, str(observation_))
所以在brain的QLearningTable有
# 选行为
def choose_action(self, observation):
# 学习更新参数
def learn(self, s, a, r, s_):
在加上def __init__(self, actions, learning_rate=0.01, reward_decay=0.9, e_greedy=0.9):
由于,环境有可能重复,所以
# 检测 state 是否存在
def check_state_exist(self, state):
总共四个模块
1.对于模块__init__
self负责在这里的定义操作,在init中被声明
2.对于模块learn(self, s, a, r, s_)
q_target = r + self.gamma * self.q_table.loc[s_, :].max()
这是Q-Learning算法的部分
3.对于模块choose_action(self, observation)
要负责选择action,同一个 state, 可能会有多个相同的 Q action value, 所以我们乱序一下
action = np.random.choice(state_action[state_action == np.max(state_action)].index)



