news 2026/4/18 9:38:19

强化学习Q-learning求最优策略

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
强化学习Q-learning求最优策略

理论基础:

on policy:behavior policy=target policy

off policy:behavior policy!=target policy

注意:

behavior policy的初始化最好具有较强的随机性,就能尽可能遍历到所有的(s, a)pair。

强化学习的数据基础这种书中有不同的behavior policy导致的不同的探索路径的图:

代码可运行:

import numpy as np from env import GridWorldEnv from utils import drow_policy class Q_Learning(object): def __init__(self, env: GridWorldEnv, gamma=0.9, alpha=0.001, epsilon=0.1, samples=1, start_state=(0, 0),mode="on policy"): ''' :param env: 定义了网格的基础配置 :param gamma: discount rate :param alpha: learning rate :param samples: 从起点到终点采样的路径数 :param start_state: 起点 :param mode: 模式 ''' self.env = env self.action_space_size = self.env.num_actions # 上下左右原地 self.state_space_size = self.env.num_states self.reward_list = self.env.reward_list self.gamma = gamma self.samples = samples self.alpha = alpha self.epsilon = epsilon self.mode=mode self.start_state = self.env.state_id(start_state[0], start_state[1]) self.behavior_policy = np.ones( (self.state_space_size, self.action_space_size)) / self.action_space_size # 探索性很强 self.target_policy = np.zeros((self.state_space_size, self.action_space_size)) self.qvalues = np.zeros((self.state_space_size, self.action_space_size)) def update_qvalues(self,s_t,a_t,s_next,r_next): max_q_next = np.max(self.qvalues[s_next]) td_target = r_next + self.gamma * max_q_next td_error = td_target - self.qvalues[s_t][a_t] # 负号提出去 self.qvalues[s_t][a_t] += self.alpha * td_error def solve(self): if self.mode=="off policy": for _ in range(self.samples): s = self.start_state a = np.random.choice(self.action_space_size, p=self.behavior_policy[s]) episode = self.env.generate_episodes(self.behavior_policy, s, a) for i in range(len(episode)): s_t, a_t, r_next_t, s_next_t= episode[i] self.update_qvalues(s_t,a_t,s_next_t,r_next_t) # greedy best_a = np.argmax(self.qvalues[s_t]) self.target_policy[s_t] = np.eye(self.action_space_size)[best_a] elif self.mode=="on policy": # target_policy=behavior_policy for _ in range(self.samples): s = self.start_state while s not in self.env.terminal: a = np.random.choice(self.action_space_size, p=self.behavior_policy[s]) # generate at following πt(st) next_s, next_r, _ = self.env.step(s, a) # generate rt+1, st+1 by interacting with the environment # updata q-value for (s_t,a_t) # qt+1(st, at) = qt(st, at) − αt(st, at) [ qt(st, at) − (rt+1 + γ max(qt(st+1, a)))] self.update_qvalues(s,a,next_s,next_r) # update policy for s_t: epsilon greedy 因为要用policy生成数据,因此需要策略具有一定的探索性,因此使用epsilon greedy best_a = np.argmax(self.qvalues[s]) self.behavior_policy[s] = self.epsilon / self.action_space_size self.behavior_policy[s, best_a] += 1 - self.epsilon self.target_policy=self.behavior_policy s = next_s else: raise Exception("Invalid mode") if __name__ == '__main__': env = GridWorldEnv( size=5, forbidden=[(1, 2), (3, 3)], terminal=[(4, 4)], r_boundary=-1, r_other=-0.04, r_terminal=1, r_forbidden=-1, r_stay=-0.1 ) # 注意samples要大一点,否则每个state被访问到的概率很小 vi = Q_Learning(env=env, gamma=0.8, alpha=0.01, samples=1000, start_state=(0, 0),mode="off policy") vi.solve() print("\n state value: ") print(vi.qvalues) drow_policy(vi.target_policy, env)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 19:50:41

IDEA 中 maven 图标失踪解决措施

你是否遇到过这样的情况,移动项目文件位置后,或某次打开之后 IDEA 中的 maven 图标消失不见,程序也无法启动了。下面介绍几种解决方法: 1. 方法一 进入 view 下的 tool windows 中点击 maven 即可,该方法适用于 编译器…

作者头像 李华
网站建设 2026/4/18 7:34:58

高性能场景为什么推荐使用PostgreSQL,而非MySQL?

高性能场景为什么推荐使用PostgreSQL,而非MySQL? 在高性能场景(尤其是复杂查询、高并发混合负载、分析型/写重工作负载)下,PostgreSQL(简称 Postgres)越来越被推荐,甚至在2025年已成…

作者头像 李华
网站建设 2026/4/18 3:50:01

【Android】Glide的缓存机制

Application Options(选项) Glide允许应用通过AppGlideModule实现完全控制Glide的内存和磁盘应用缓存。Glide对大部分应用提供合理的默认选项,部分应用需要定制。 Memory cache(内存缓存)自定义MemoryCache的大小 在GlideModule中使用applyOp…

作者头像 李华
网站建设 2026/4/18 5:34:52

5大信息获取神器深度评测:打破知识壁垒的终极方案

在信息爆炸的时代,你是否经常遇到这样的困境:精彩的深度报道被付费墙阻挡,重要的学术论文需要高价订阅,优质的内容资源难以触达?掌握正确的信息获取工具已经成为现代人必备的数字技能。本文将为你揭秘5款高效的内容获取…

作者头像 李华
网站建设 2026/4/17 5:39:11

AI仓储管理系统:技术重构仓储效率,产品视角下的硬核赋能

做仓储相关产品久了,最懂传统仓储的痛点:货物堆成山,人工找货像“大海捞针”;出入库全靠纸笔核对,错发、漏发是常事;库存多少全凭经验猜,要么缺货耽误订单,要么积压占用资金。这些问…

作者头像 李华