news 2026/8/3 14:16:28

强化学习代码-利用Q-learning实现三维世界的路径规划-002 可以保存和读取策略、Py...

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
强化学习代码-利用Q-learning实现三维世界的路径规划-002 可以保存和读取策略、Py...

强化学习代码-利用Q-learning实现三维世界的路径规划-002 可以保存和读取策略、Python+TensorFlow 内容:在三维的立体空间中,存在大量的障碍物,如何规避障碍物,找到一条从初始点到终点的最优路径,改程序通过强化学习Q-learning的方法寻找到一条最优路径。 图中蓝色点表示可用走路径,黑色点表示障碍物

当我们把路径规划问题搬到三维空间,事情就开始变得有意思了。想象你操控的无人机不仅要避开摩天大楼,还得在立体交通网里找到最短路线——这可比平面导航刺激多了。今天咱们用最经典的Q-learning算法,手把手实现个能保存经验的智能体。

先来搭环境骨架。咱们用三维网格世界,障碍物用坐标黑名单实现:

class GridWorld3D: def __init__(self, size=10): self.size = size self.obstacles = set() for _ in range(int(size*0.3)): x, y = np.random.randint(0, size, 2) self.obstacles.update({(x,y,z) for z in range(size)}) def is_valid(self, pos): return (0 <= pos[0] < self.size and 0 <= pos[1] < self.size and 0 <= pos[2] < self.size and tuple(pos) not in self.obstacles)

这里有个小技巧:用集合存储障碍物坐标,判断碰撞时直接查表比遍历列表快10倍不止。注意我们生成的是贯穿整个高度的柱状障碍,模拟现实中的建筑物。

接下来是重头戏Q-learning的实现。考虑到三维状态空间爆炸问题,咱们用字典实现稀疏存储:

class QAgent: def __init__(self, alpha=0.1, gamma=0.9): self.q_table = defaultdict(lambda: np.zeros(6)) # 6个移动方向 self.alpha = alpha # 学习率 self.gamma = gamma # 折扣因子 def get_action(self, state, epsilon): if np.random.rand() < epsilon: return np.random.randint(6) else: return np.argmax(self.q_table[state])

这里用defaultdict自动处理未访问过的状态,避免初始化整个状态空间。动作对应六个移动方向:±x, ±y, ±z,相当于在三维网格中上下左右前后移动。

强化学习代码-利用Q-learning实现三维世界的路径规划-002 可以保存和读取策略、Python+TensorFlow 内容:在三维的立体空间中,存在大量的障碍物,如何规避障碍物,找到一条从初始点到终点的最优路径,改程序通过强化学习Q-learning的方法寻找到一条最优路径。 图中蓝色点表示可用走路径,黑色点表示障碍物

训练循环的关键在于奖励设计。咱们给成功到达终点+100奖励,碰撞-50,每步-1鼓励最短路径:

def train(env, agent, episodes=1000): epsilon = 1.0 for ep in range(episodes): state = env.start_pos while True: action = agent.get_action(state, epsilon) next_pos = move(state, action) # 根据动作计算新坐标 reward = -1 if not env.is_valid(next_pos): reward = -50 next_pos = state # 碰撞后停留在原地 elif next_pos == env.goal: reward = 100 # Q值更新公式 old_q = agent.q_table[state][action] max_next_q = np.max(agent.q_table[next_pos]) new_q = (1 - agent.alpha)*old_q + agent.alpha*(reward + agent.gamma*max_next_q) agent.q_table[state][action] = new_q # 更新状态 state = next_pos if state == env.goal or ep % 100 == 0: break epsilon *= 0.995 # 探索衰减

注意当撞墙时让智能体留在原地,这比直接结束回合更能训练出避障能力。epsilon的指数衰减让智能体从随机探索逐步过渡到利用已有经验。

模型保存用TensorFlow的Saver虽然有点杀鸡用牛刀,但确实方便:

def save_model(sess, q_table, path='model'): # 将字典转为Tensor states = tf.constant(list(q_table.keys()), name='states') q_values = tf.constant([q_table[k] for k in q_table], name='q_values') saver = tf.train.Saver() sess.run(tf.global_variables_initializer()) saver.save(sess, path) def load_model(path): sess = tf.Session() saver = tf.train.import_meta_graph(path+'.meta') saver.restore(sess, path) states = sess.run('states:0') q_values = sess.run('q_values:0') return {s:q for s,q in zip(states, q_values)}

这里有个坑:直接保存Python字典会丢失类型信息,转成Tensor再存更可靠。恢复时要注意Tensor的命名空间,建议在保存时显式指定name参数。

实际跑起来后会发现,在10x10x10的网格中,大约训练500次后智能体就能稳定找到无障碍最优路径。遇到复杂障碍时,可以通过以下方法提升表现:

  1. 增加ε衰减周期,让探索更充分
  2. 对重复撞墙的行为施加额外惩罚
  3. 在状态编码中加入周边障碍信息

最后说个实战技巧:用matplotlib的scatter3D做可视化时,把探索过的路径用淡蓝色半透明显示,最优路径用红色高亮,障碍物用黑色立方体,一眼就能看出智能体是不是在"抄近道"。

完整代码已打包放在Github,包含预训练模型和交互式演示。下次遇到三维路径规划,别急着上A*,试试这个会自己成长的方案说不定有惊喜。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/30 23:00:11

专业nbiot open MCU qs100方案,tcp udp mqtt协议,低功耗0.7u...

专业nbiot open MCU qs100方案&#xff0c;tcp udp mqtt协议&#xff0c;低功耗0.7ua&#xff0c;软硬件方案设计&#xff0c;PCB设计&#xff0c;数据收发代码开发&#xff0c;另有cat1 WiFi等常用无线模块。搞物联网开发的老铁们注意了&#xff01;今天咱们来唠唠NB-IoT Open…

作者头像 李华
网站建设 2026/8/1 15:33:10

“空间智能”被刷屏一年了:它到底好在哪,怎么拼出来的?

1. 空间智能靠什么“感官”输入&#xff1f; 自动系统的传感器像一个“多语种团队”&#xff0c;各自擅长不同信息&#xff1a; ● 相机&#xff1a;语义丰富&#xff0c;颜色纹理细节多&#xff0c;最像人眼。 ● 激光雷达&#xff08;LiDAR&#xff09;&#xff1a;几何精…

作者头像 李华
网站建设 2026/7/31 2:34:31

美团EvoCUA刷新开源SOTA,会用电脑还会持续进化的智能体!

大模型虽已具备强大的感知与推理能力&#xff0c;但在面对复杂的计算机图形界面操作&#xff08;Computer Use&#xff09;任务时&#xff0c;仍受限于高质量数据稀缺与环境交互反馈缺失的双重挑战。美团技术团队推出了 EvoCUA 模型并在Github、Huggingface开源&#xff0c;通过…

作者头像 李华
网站建设 2026/8/4 0:41:33

电致发光el测试仪:直观显示组件的隐裂、断栅、碎片等缺陷

电致发光&#xff08;EL&#xff09;测试仪是一种用于检测光伏组件性能的专业设备&#xff0c;通过施加电压激发组件内部的载流子复合发光&#xff0c;从而直观显示电池片的隐裂、断栅、碎片等缺陷。该设备广泛应用于光伏组件生产、质量检测、电站运维等领域&#xff0c;能够有…

作者头像 李华
网站建设 2026/7/30 13:00:51

量子算法测试入门:验证薛定谔的代码稳定性

量子测试的独特挑战 量子计算正重塑软件测试领域&#xff0c;但量子算法测试与传统二进制软件测试存在本质差异。量子比特&#xff08;Qubit&#xff09;的状态叠加性&#xff08;同时处于|0>和|1>态&#xff09;、纠缠特性&#xff08;非局域关联&#xff09;和不可克隆…

作者头像 李华
网站建设 2026/7/31 6:09:54

AI模型监控与告警:AI应用架构师的技术前沿研究

AI模型监控与告警&#xff1a;AI应用架构师的技术前沿研究 凌晨3点&#xff0c;某电商AI架构师李阳的手机突然弹出红色告警&#xff1a; “推荐系统转化率较昨日暴跌38%&#xff0c;模型预测准确率下降22%——触发一级故障&#xff01;” 他火速登录监控平台&#xff0c;发现…

作者头像 李华