news 2026/6/22 17:20:01

强化学习DeepQLearning求最优策略的代码实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
强化学习DeepQLearning求最优策略的代码实现

理论基础:

可运行代码:

import numpy as np import torch from torch import nn from torch.utils import data from env import GridWorldEnv from utils import drow_policy class DeepQLearning(object): def __init__(self, env: GridWorldEnv, gamma=0.9): self.env = env self.action_space_size = self.env.num_actions self.state_space_size = self.env.num_states self.gamma = gamma self.policy = np.ones((self.state_space_size, self.action_space_size)) / self.action_space_size self.net = nn.Sequential( nn.Linear(2, 16), nn.ReLU(), nn.Linear(16, self.action_space_size) ) self.target_net = nn.Sequential( nn.Linear(2, 16), nn.ReLU(), nn.Linear(16, self.action_space_size) ) self.target_net.load_state_dict(self.net.state_dict()) self.optimizer = torch.optim.SGD(self.net.parameters(), lr=0.01, momentum=0.9) self.loss = nn.MSELoss() def data_iter(self, episode, batch_size=32, is_train=True): reward = [] state = [] action = [] next_state = [] for s, a, r, next_s in episode: reward.append(r) state.append((s // self.env.size, s % self.env.size)) # 有空间位置 next_state.append((next_s // self.env.size, next_s % self.env.size)) action.append(a) reward = torch.tensor(reward, dtype=torch.float32) state = torch.tensor(state, dtype=torch.float32) next_state = torch.tensor(next_state, dtype=torch.float32) action = torch.tensor(action, dtype=torch.long) data_arrays = (state, action, reward, next_state) dataset = data.TensorDataset(*data_arrays) return data.DataLoader(dataset, batch_size=batch_size, shuffle=is_train, drop_last=False) def solve(self, epochs, update_frep): s = self.env.reset() a = np.random.choice(self.action_space_size, p=self.policy[s]) episodes = [] for _ in range(self.action_space_size * self.state_space_size + 1): episode = self.env.generate_episodes(self.policy, s, a, max_steps=1000) episodes.extend(episode) dataloader = self.data_iter(episodes) step = 0 for epoch in range(epochs): for state, action, reward, next_state in dataloader: step += 1 with torch.no_grad(): q_value = self.target_net(next_state) # [B,N] max_q = q_value.max(dim=1).values y_target = reward + self.gamma * max_q # [B,] y = self.net(state) y_ = y.gather(1, action.unsqueeze(1)).squeeze(1) l = self.loss(y_target, y_) self.optimizer.zero_grad() l.backward() self.optimizer.step() if step % update_frep == 0: self.target_net.load_state_dict(self.net.state_dict()) def get_policy(self): for s in range(self.state_space_size): if s in self.env.terminal: self.policy[s, 4] = 1 break s_t = torch.tensor((s // self.env.size, s % self.env.size), dtype=torch.float32) q_value = self.net(s_t) a = q_value.argmax(dim=0).item() self.policy[s] = 0 self.policy[s, a] = 1 return self.policy if __name__ == '__main__': env = GridWorldEnv( size=5, forbidden=[(1, 2), (3, 3)], terminal=[(4, 4)], r_boundary=-1, r_other=0, r_terminal=1, r_forbidden=-1, r_stay=-0.1 ) # 注意samples要大一点,否则每个state被访问到的概率很小 vi = DeepQLearning(env=env, gamma=0.8) vi.solve(epochs=50, update_frep=20) policy = vi.get_policy() print(policy) drow_policy(policy, env)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/20 15:41:44

如何将边缘Agent镜像缩小95%?,资深架构师亲授瘦身技巧

第一章:边缘Agent镜像瘦身的背景与挑战在边缘计算场景中,Agent作为连接终端设备与云端控制平面的关键组件,其部署效率直接影响系统的响应速度和资源利用率。受限于边缘节点普遍存在的存储容量小、网络带宽低和算力有限等问题,传统…

作者头像 李华
网站建设 2026/6/20 12:09:28

为什么你的AI模型回滚总出问题?Docker标签设计缺陷正在拖累你

第一章:AI 模型版本的 Docker 标签管理在 AI 模型的持续迭代过程中,Docker 成为封装和部署模型服务的重要工具。合理使用标签(Tags)对镜像进行版本管理,是确保开发、测试与生产环境一致性的重要实践。语义化标签策略 为…

作者头像 李华
网站建设 2026/6/22 1:45:04

【提升AI系统协同效率】:Docker-LangGraph多Agent通信优化的7大策略

第一章:Docker-LangGraph多Agent通信的核心挑战在构建基于Docker与LangGraph的多Agent系统时,通信机制的设计面临多重技术挑战。不同Agent可能运行于隔离的容器环境中,如何实现高效、可靠的消息传递成为系统稳定性的关键。网络隔离带来的通信…

作者头像 李华
网站建设 2026/6/22 13:16:54

【Dify导出性能优化】:从响应延迟到秒级输出的3次架构迭代

第一章:Dify导出性能优化的背景与挑战在现代低代码平台中,Dify 作为集成了 AI 工作流编排与应用生成的核心系统,承担着大量用户配置、流程定义和模型部署数据的导出需求。随着业务规模扩大,导出操作面临响应延迟、内存溢出及数据一…

作者头像 李华
网站建设 2026/6/21 19:33:03

【Dify工作流错误重试机制深度解析】:掌握高可用系统设计的核心秘诀

第一章:Dify工作流错误重试机制的核心价值在构建复杂AI驱动的应用时,网络波动、服务超时或临时性资源争用等问题难以避免。Dify工作流的错误重试机制正是为应对这类非永久性故障而设计的关键能力,它确保任务在遭遇瞬时异常时能够自动恢复&…

作者头像 李华
网站建设 2026/6/22 16:54:40

为什么顶尖团队都在用Docker Scout做漏洞管理?真相终于曝光

第一章:为什么顶尖团队都在用Docker Scout做漏洞管理?真相终于曝光在现代云原生开发中,容器镜像安全已成为软件交付链中的关键环节。越来越多的顶尖技术团队选择 Docker Scout 来实现精细化的漏洞管理,其核心优势在于深度集成于开…

作者头像 李华