基于Q学习迷宫寻路问题

迷宫由一个二维数组 self.maze 表示,其中:

  • 0 表示可以行走的空白区域,
  • 1 表示障碍物,
  • 2 表示迷宫的起始位置,
  • 3 表示迷宫的目标位置。

动作定义了智能体可以执行的动作集合,在这个迷宫问题中,动作包括向上、向下、向左、向右移动,分别用数字 0、1、2、3 表示。

奖励

  • 检查智能体是否到达目标位置,如果是,则设置 self.done 为 True 并给予正奖励 1.0,表示成功到达目标。
  • 如果没有到达目标,则给予负奖励 -0.1,表示智能体需要继续寻找目标。
  • 如果撞墙或遇到障碍物,则原地不动。
import numpy as npclass SimpleMazeEnv:def __init__(self):# 定义迷宫矩阵self.maze = np.array([[2, 0, 0, 0, 0], [0, 1, 1, 1, 0], [0, 0, 0, 1, 0], [0, 1, 0, 0, 0], [0, 0, 0, 1, 3]])  # 其中0表示空白区域,1表示障碍物,2表示起始位置,3表示目标位置self.start_state = (0, 0)self.goal_state = (4, 4)self.state = self.start_stateself.done = False# 定义动作空间:上、下、左、右self.action_space = [0, 1, 2, 3]self.action_map = {0: (-1, 0), 1: (1, 0), 2: (0, -1), 3: (0, 1)}  # 上  # 下  # 左  # 右def reset(self):self.state = self.start_stateself.done = Falsereturn self.statedef step(self, action):if self.done:raise Exception("Episode has ended. Please reset the environment.")# 计算新状态move = self.action_map[action]new_state = (self.state[0] + move[0], self.state[1] + move[1])# 检查边界条件和障碍物if (0 <= new_state[0] < self.maze.shape[0]and 0 <= new_state[1] < self.maze.shape[1]and self.maze[new_state] != 1): # 撞墙或遇到障碍物,智能体仍然保持在原来的位置self.state = new_state# 检查是否到达目标if self.state == self.goal_state:self.done = Truereward = 1.0else:reward = -0.1  # 每步的惩罚return self.state, reward, self.donedef render(self):# 创建一个字符矩阵来显示迷宫maze_visual = np.full(self.maze.shape, ".", dtype=str)  # . 表示空白区域。maze_visual[self.maze == 1] = "#"  # 表示障碍物。maze_visual[self.goal_state] = "G"  # G 表示目标位置。maze_visual[self.state] = "A"  # A 表示智能体当前位置。for row in maze_visual:print(" ".join(row))print("--------------------------------")class QLearningAgent:def __init__(self, env, alpha=0.1, gamma=0.9, epsilon=0.1):self.env = envself.alpha = alphaself.gamma = gammaself.epsilon = epsilonself.q_table = np.zeros((env.maze.shape[0], env.maze.shape[1], len(env.action_space)))def choose_action(self, state):if np.random.rand() < self.epsilon:return np.random.choice(self.env.action_space)else:return np.argmax(self.q_table[state[0], state[1]])def update(self, state, action, reward, next_state):best_next_action = np.argmax(self.q_table[next_state[0], next_state[1]])td_target = (reward + self.gamma * self.q_table[next_state[0], next_state[1], best_next_action])td_error = td_target - self.q_table[state[0], state[1], action]self.q_table[state[0], state[1], action] += self.alpha * td_errordef train(self, episodes=1000):for episode in range(episodes):state = self.env.reset()done = Falsewhile not done:action = self.choose_action(state)next_state, reward, done = self.env.step(action)self.update(state, action, reward, next_state)state = next_stateif __name__ == "__main__":# 使用环境和智能体env = SimpleMazeEnv()agent = QLearningAgent(env)# 训练智能体agent.train(episodes=1000)# 测试智能体state = env.reset()done = Falseenv.render()while not done:action = agent.choose_action(state)state, _, done = env.step(action)env.render()print(agent.q_table)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/451175.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最大输出功率的计算(直流电源)

本内容仅计算直流电源的最大输出功率​。 方法1&#xff1a; 图1 电源电路 根据欧姆定律列写电流公式&#xff0c;其中&#xff0c;U和r是常数&#xff0c;R为变量。 电阻R上消耗的功率&#xff1a;&#xff0c;代入上面的式子&#xff0c;可得&#xff1a; &#xff0c;故…

5、JavaScript(二) 对象+DOM

17.对象 1、对象&#xff1a;⽤来存储多个数据的 是由多个键值对/key value对组成的 ⽤来描述⼀个事物的 相当于多个变量的集合 2、格式 &#xff1a;{key:value,key:value} 键/值对 属性名&#xff1a;属性值 3、对象的属性值是不限制数据类型的&#xff0c;甚至还可以是对…

【第二十二课】空间自分析——实例分析

一、前言 案例描述&#xff1a;现有全国 31个省市的矢量地图以及相关年份GDP 属性数据&#xff0c; 通过空间自相关分析我国省域经济的空间格局变化。 1、全局Morans I方法 &#xff08;1&#xff09;加载全国省域图层&#xff0c;并与相关年份GDP属性数据进行连接操作。 &…

Apache Seata Raft模式配置中心

本文来自 Apache Seata官方文档&#xff0c;欢迎访问官网&#xff0c;查看更多深度文章。 本文来自 Apache Seata官方文档&#xff0c;欢迎访问官网&#xff0c;查看更多深度文章。 Apache Seata Raft模式配置中心 title: Seata Raft模式配置中心 author: 蒋奕晨-清华大学&…

【计算机网络】HTTP报文详解,HTTPS基于HTTP做了哪些改进?(面试经典题)

HTTP协议基本报文格式 在计算机网络中&#xff0c;HTTP&#xff08;超文本传输协议&#xff09;是应用层的一种协议&#xff0c;用于客户端&#xff08;通常是浏览器&#xff09;和服务器之间的通信。HTTP报文分为请求报文和响应报文&#xff0c;以下是它们的基本格式。 1. H…

【R语言】gadm全球行政区划数据库

我R语言不熟、也不是学GIS的。仅用于记录。 文章目录 一、gadm 数据库简介二、R 语言示例三、sf 包的函数 一、gadm 数据库简介 GADM&#xff08;全称Database of Global Administrative Areas&#xff09;是一个高精度的全球行政区划数据库&#xff0c;它包含了全球所有国家和…

cs木马图形化界面出现问题处理

一个月多月没用cs木马了&#xff0c;发现打开客户端之后显示不出图形化界面&#xff0c;且出现下面这样的报错。 、 最后发现是java版本的问题&#xff0c;kali的java自动更新了。把原来的openjdk11改到了openjdk23。 解决方法&#xff1a; 输入&#xff1a; sudo update-…

vue的动态组件 keep-alive

1. 什么是动态组件 动态组件指的是 动态切换组件的显示与隐藏 2. 如何实现动态组件渲染 vue提供了一个内置的<component>组件&#xff0c;专门用来实现动态组件的渲染。 作用&#xff1a;组件的占位符is的值表示要渲染的组件 示例代码如下&#xff1a; Left.vue的代…

2024版AI大模型转行入门全攻略,零基础入门到精通,收藏这一篇就够了

引言 随着人工智能和大模型&#xff08;如GPT-4、BERT等&#xff09;技术的快速发展&#xff0c;越来越多的专业人士希望转行进入这一领域。大模型开发涉及复杂的技术体系和多样的应用场景&#xff0c;对从业者的知识和能力提出了较高要求。本文将详细解析转行大模型开发所需的…

1.C++经典实例-计算两个数的最大公约数

用户输入两个数字&#xff0c;然后通过程序计算出这两个数字的最大公约数&#xff1a; 最大公约数&#xff08;greatest common divisor&#xff0c;简写为 gcd &#xff1b;或highest common factor&#xff0c;简写为hcf)&#xff0c;指某几个整数共有因子中最大的一个 #in…

RHCE——例行性工作

准备工作 [rootlocalhost ~]# cat /etc/yum.repos.d/aliyun.repo [ali-app] nameali-app baseurlhttps://mirrors.aliyun.com/centos-stream/9-stream/AppStream/x86_64/os/ gpgcheck0[ali-base] nameali-base baseurlhttps://mirrors.aliyun.com/centos-stream/9-stream/Base…

探索YOLO v11:3D人工智能的RGB-D视觉革命

哈喽&#xff0c;各位OAK中国的朋友们! 大家好我是张伯生 今天&#xff0c;我想给大家演示一下最新发布的Yolo V11神经网络 下面我将演示的一个程序是&#xff1a;同时在我们的OAK相机上跑Yolo V11和RGB-D&#xff0c;也就是彩色相机和深度图的一个叠加的一个效果 RGB-D和Yo…

C++标准模板库--vector

vector 介绍 vector&#xff08;向量&#xff09;是一种序列容器&#xff0c;表示为可以改变大小的数组。vector中的元素使用连续的存储位置&#xff0c;这意味着也可以使用指向其元素的常规指针偏移量来访问任意元素&#xff0c;且与数组一样高效。但与数组不同的是&#xff…

网络空间安全之一个WH的超前沿全栈技术深入学习之路(一:渗透测试行业术语扫盲)作者——LJS

欢迎各位彦祖与热巴畅游本人专栏与博客 你的三连是我最大的动力 以下图片仅代表专栏特色 [点击箭头指向的专栏名即可闪现] 专栏跑道一 ➡️网络空间安全——全栈前沿技术持续深入学习 专栏跑道二➡️ 24 Network Security -LJS ​ ​ ​ 专栏跑道三 ➡️ MYSQL REDIS Advanc…

线性系统性能分析方法3——频率特性分析法(频域分析法)

一种图解的分析方法&#xff0c;不必直接求解系统输出的时域表达式&#xff0c;不需要求解系统的闭环特征根&#xff0c;具有较多的优点。如&#xff1a; ①根据系统的开环频率特性揭示闭环系统的动态性能和稳态性能&#xff0c;得到定性和定量的结论&#xff0c;可以简单迅速…

OpenCV高级图形用户界面(12)用于更改指定窗口的大小函数resizeWindow()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::resizeWindow() 函数用于更改指定窗口的大小。这使得你可以根据需要调整窗口的宽度和高度。 注释 指定的窗口大小是指图像区域的大小。工具栏…

基于Java语言的培训平台+学习平台+在线学习培训系统+教育平台+教育学习系统+课程学习平台

简述 企业培训平台企业考试系统培训平台考试系统企业大学企业视频网站视频学习平台 介绍 企业培训平台支持企业培训考试全流程&#xff0c;在线学习、在线考试&#xff0c;成熟的企业培训考试解决方案&#xff0c;充分满足企业培训需求。 独立部署&#xff0c;仅内部员工登录…

Java 异步编程——常用线程池 ThreadPoolExecutor

文章目录 ThreadPoolExecutor核心参数详解线程池的处理流程线程池中使用的阻塞队列4 种任务拒绝策略4 种不同的线程池线程池的五种状态 Future 接口 ThreadPoolExecutor java.uitl.concurrent.ThreadPoolExecutor 类是线程池中最核心的一个类。 线程池底层示例图&#xff1a;…

代码随想录算法训练营第十六天|513. 找树左下角的值 112. 路径总和 106. 从中序与后序遍历序列构造二叉树

513. 找树左下角的值 题目 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1 题目解析---迭代法 层序遍历&#xff0c;然后只需要记录最后一行第一个节点的数值就可…

xtu oj 原根

文章目录 回顾杂思路c 语言代码 回顾 AB III问题 H: 三角数问题 G: 3个数等式 数组下标查询&#xff0c;降低时间复杂度1405 问题 E: 世界杯xtu 数码串xtu oj 神经网络xtu oj 1167 逆序数&#xff08;大数据&#xff09; 杂 有一些题可能是往年的程设的题&#xff0c;现在搬到…