湘潭县建设投资有限公司网站,网站开发定制方案,在线建站平台免费建网站,alexa排名官网1、算法思想
QLearning是强化学习算法中value-based的算法#xff0c;Q即为在某一环境下#xff0c;Q#xff08;state,action#xff09;在某一时刻的 s 状态下(s∈S)#xff0c;采取 动作a (a∈A)动作能够获得收益的期望#xff0c;环境会根据agent的动作反馈相应的回…1、算法思想
QLearning是强化学习算法中value-based的算法Q即为在某一环境下Qstate,action在某一时刻的 s 状态下(s∈S)采取 动作a (a∈A)动作能够获得收益的期望环境会根据agent的动作反馈相应的回报reward r(分数)。
所以算法的主要思想就是将State与Action构建成一张Q-table来存储Q值然后根据Q值来选取能够获得最大的收益的动作。 2、实例与核心公式 实例从起点出发到达终点圆圈为胜利——加分碰到三角为失败——扣分。第一轮是随机走直到有了得分就会高概率按照高分走。
智能体Agent——正方体环境状态environment——这里以tk窗体模拟奖励reward——对动作的奖惩分数动作action——上下左右
可以将问题抽象成一个马尔科夫决策过程。
在每个格子都算是一个状态s q(a | s)是在s状态下采取动作a策略 p(s’ | s,a)为在s状态下选择a动作转换到下一个状态s’的概率 R(s’ | s,a)表示在s状态下采取a动作转移到s’的奖励reward
目标就是找到一条能够到达终点获得最大奖赏的策略获取最大奖赏公式
Qlearning的主要优势就是使用了时间差分法TD融合了蒙特卡洛和动态规划能够进行离线学习, 使用贝尔曼bellman方程可以对马尔科夫过程求解最优策略。 详见时间差分法
核心公式
更新公式
核心代码
import numpy as np
import random
from environment import Env
from collections import defaultdictclass QLearningAgent:def __init__(self, actions):# actions [0, 1, 2, 3]self.actions actions # 动作self.learning_rate 0.01 # 学习率self.discount_factor 0.9 # 折扣因子self.epsilon 0.1 # [ˈepsɪlɒn]self.q_table defaultdict(lambda: [0.0, 0.0, 0.0, 0.0])# 采样 s, a, r, sdef learn(self, state, action, reward, next_state):current_q self.q_table[state][action]# 贝尔曼方程更新new_q reward self.discount_factor * max(self.q_table[next_state])self.q_table[state][action] self.learning_rate * (new_q - current_q)# 从Q-table中选取动作def get_action(self, state):if np.random.rand() self.epsilon:# 贪婪策略随机探索动作action np.random.choice(self.actions)else:# 从q表中选择state_action self.q_table[state]action self.arg_max(state_action) # 选组最大效益动作return action# 选取最大分数staticmethoddef arg_max(state_action):max_index_list []max_value state_action[0]for index, value in enumerate(state_action):if value max_value:max_index_list.clear()max_value valuemax_index_list.append(index)elif value max_value:max_index_list.append(index)return random.choice(max_index_list)if __name__ __main__:env Env() # 初始化tk窗口agent QLearningAgent(actionslist(range(env.n_actions))) # 初始化物体实例for episode in range(1000):state env.reset()while True:env.render()# agent产生动作action agent.get_action(str(state))next_state, reward, done env.step(action)# 更新Q表 -- 核心更新公式agent.learn(str(state), action, reward, str(next_state))state next_stateenv.print_value_all(agent.q_table)# 当到达终点就终止游戏开始新一轮训练if done:break 另一Q learning 实例Flappy Bird飞扬的小鸟 Q learning实例Flappy Bird