当前位置: 首页 > news >正文

24/12/1 算法笔记<强化学习> 创建Maze交互

我们今天制作一个栅格的游戏。

我们直接上代码教学。

1.载入库和查找相应的函数版本

import numpy as np
import time
import sysif sys.version_info.major == 2:import Tkinter as tk
else:import tkinter as tk

2.设置长宽和单元格大小

UNIT= 40
MAZE_H= 4
MAZE_W =4

3.初始化Maze环境类

class Maze(tk.Tk, object):def __init__(self):super(Maze, self).__init__()self.action_space = ['u', 'd', 'l', 'r']self.n_actions = len(self.action_space)self.title('maze')self.geometry('{0}x{1}'.format(MAZE_H * UNIT, MAZE_H * UNIT))self._build_maze()

里面初始化动作(上下左右),动作数量,窗口标题和大小,构建迷宫。

4.构建迷宫画布,绘制垂直线和水平线

def _build_maze(self):self.canvas = tk.Canvas(self, bg='white', height=MAZE_H * UNIT, width=MAZE_W * UNIT)for c in range(0, MAZE_W * UNIT, UNIT):x0, y0, x1, y1 = c, 0, c, MAZE_H * UNITself.canvas.create_line(x0, y0, x1, y1)for r in range(0, MAZE_H * UNIT, UNIT):x0, y0, x1, y1 = 0, r, MAZE_W * UNIT, rself.canvas.create_line(x0, y0, x1, y1)

5.设定两个陷阱,一个目标和玩家

origin = np.array([20, 20])hell1_center = origin + np.array([UNIT * 2, UNIT])self.hell = self.canvas.create_rectangle(hell1_center[0] - 15, hell1_center[1] - 15,hell1_center[0] + 15, hell1_center[1] + 15,fill='black')hell2_center = origin + np.array([UNIT, UNIT*2])  self.hell2 = self.canvas.create_rectangle(hell2_center[0] - 15, hell2_center[1] - 15,hell2_center[0] + 15, hell2_center[1] + 15,fill='black'
)oval_center = origin + UNIT * 2self.oval = self.canvas.create_oval(oval_center[0] - 15, oval_center[1] - 15,oval_center[0] + 15, oval_center[1] + 15,fill='yellow')self.rect = self.canvas.create_rectangle(origin[0] - 15, origin[1] - 15,origin[0] + 15, origin[1] + 15,fill='red')self.canvas.pack()

最后是打包画布,将画布添加到 Tkinter 窗口中,并允许它显示。

6.重置游戏环境到初始状态的函数。

def reset(self):self.update()time.sleep(0.5)self.canvas.delete(self.rect) #删除旧的玩家图形origin = np.array([20, 20])  #设置玩家的初始位置self.rect = self.canvas.create_rectangle( #重新创建玩家图形origin[0] - 15, origin[1] - 15,origin[0] + 15, origin[1] + 15,fill='red')

7.设定处理玩家在迷宫中的一步移动,并根据结果更新游戏状态的函数。

def step(self, action):s = self.canvas.coords(self.rect)  #获取当前位置base_action = np.array([0, 0])     #初始化动作向量if action == 0:                    #根据动作更新位置if s[1] > UNIT:base_action[1] -= UNITelif action == 1:if s[1] < (MAZE_H - 1) * UNIT:base_action[1] += UNITelif action == 2:if s[0] < (MAZE_W - 1) * UNIT:base_action[0] += UNITelif action == 3:if s[0] > UNIT:base_action[0] -= UNITself.canvas.move(self.rect, base_action[0], base_action[1]) #移动玩家s_ = self.canvas.coords(self.rect)        #获取新位置if s_ == self.canvas.coords(self.oval):   #检查是否到达终点或陷阱reward = 1done = Trues_ = 'terminal'elif s_ == self.canvas.coords(self.hell) or s_ == self.canvas.coords(self.hell2):reward = -1done = Trues_ = 'terminal'else:reward = 0done = Falsereturn s_, reward, done

8.停顿更新函数

def render(self):time.sleep(0.1)self.update()

9.更新函数

def update():for t in range(10):s = env.reset()while True:env.render()a = 1  # 这里应该是根据策略选择动作s, r, done = env.step(a)if done:break

10.主函数

if __name__ == '__main__':env = Maze()env.after(100, update)env.mainloop()

然后运行就能获得一个简单的自动玩栅格游戏的智能体,这次我们是简单给一些基本设定,以后将加入强化学习的知识强化它。

相关文章:

24/12/1 算法笔记<强化学习> 创建Maze交互

我们今天制作一个栅格的游戏。 我们直接上代码教学。 1.载入库和查找相应的函数版本 import numpy as np import time import sysif sys.version_info.major 2:import Tkinter as tk else:import tkinter as tk 2.设置长宽和单元格大小 UNIT 40 MAZE_H 4 MAZE_W 4 3.初始…...

Linux驱动开发(10):I2C子系统–mpu6050驱动实验

本章我们以板载MPU6050为例讲解i2c驱动程序的编写&#xff0c;本章主要分为五部分内容。 第一部分&#xff0c;i2c基本知识&#xff0c;回忆i2c物理总线和基本通信协议。 第二部分&#xff0c;linux下的i2c驱动框架。 第三部分&#xff0c;i2c总线驱动代码拆解。 第四部分&a…...

《装甲车内气体检测“神器”:上海松柏 K-5S 电化学传感器模组详解》

《装甲车内气体检测“神器”:上海松柏 K-5S 电化学传感器模组详解》 一、引言二、K-5S 电化学传感器模组概述&#xff08;一&#xff09;产品简介&#xff08;二&#xff09;产品特点&#xff08;三&#xff09;产品适用场景 三、电化学传感器原理及优点&#xff08;一&#xf…...

如何将多个JS文件打包成一个JS文件?

文章目录 前言SDK 打包安装 webpack创建 webpack.config.js编译命令行遇到的坑点前言 上一篇已经记录了如何开发一个小游戏聚合SDK,既然是SDK,最终都是给外部人员使用的。调研了一下市面上的前端SDK,最终都是编译成一个 js 文件。我猜理由大概是 js 文件之间的调用都是需要…...

100个python经典面试题详解(新版)

应老粉要求,每晚加餐一个最新面试题 包括Python面试中常见的问题,涵盖列表、元组、字符串插值、比较操作符、装饰器、类与对象、函数调用方式、数据结构操作、序列化、数据处理函数等多个方面。 旨在帮助数据科学家和软件工程师准备面试或提升Python技能。 7、Python面试题…...

C#初阶概念理解

​​​​​​​ 梳理了一些本人在学习C#时的一些生疏点&#xff0c;同时也加深自己的印象。 堆&栈 堆用来存储程序运行时产生的变量&#xff0c;当程序结束时释放&#xff1b; 栈用来存储程序运行时&#xff0c;调用方法产生的临时变量&#xff0c;方法运行完成后就会释放…...

node.js基础学习-url模块-url地址处理(二)

前言 前面我们创建了一个HTTP服务器&#xff0c;如果只是简单的http://localhost:3000/about这种链接我们是可以处理的&#xff0c;但是实际运用中一般链接都会带参数&#xff0c;这样的话如果我们只是简单的判断链接来分配数据&#xff0c;就会报404找不到链接。为了解决这个问…...

算法与数据结构(1)

一&#xff1a;数据结构概论 数据结构分为初阶数据结构&#xff08;主要由C语言实现&#xff09;和高阶数据结构&#xff08;由C实现&#xff09; 初阶数据结构当中&#xff0c;我们会学到顺序表、链表、栈和队列、二叉树、常见排序算法等内容。 高阶数据结构当中&#xff0…...

FTP介绍与配置

前言&#xff1a; FTP是用来传送文件的协议。使用FTP实现远程文件传输的同时&#xff0c;还可以保证数据传输的可靠性和高效性。 介绍 FTP的应用 在企业网络中部署一台FTP服务器&#xff0c;将网络设备配置为FTP客户端&#xff0c;则可以使用FTP来备份或更新VRP文件和配置文件…...

SQL面试题——抖音SQL面试题 最近一笔有效订单

最近一笔有效订单 题目背景如下,现有订单表order,包含订单ID,订单时间,下单用户,当前订单是否有效 +---------+----------------------+----------+-----------+ | ord_id | ord_time | user_id | is_valid | +---------+----------------------+--------…...

【线程】Java多线程代码案例(1)

【线程】Java多线程代码案例&#xff08;1&#xff09; 一、“单例模式” 的实现1.1“饿汉模式”1.2 “懒汉模式”1.3 线程安全问题 二、“阻塞队列”的实现2.1阻塞队列2.2生产者消费者模型2.3 阻塞队列的实现2.4 再谈生产者消费者模型 一、“单例模式” 的实现 “单例模式”即…...

go使用mysql实现增删改查操作

1、安装MySQL驱动 go get -u github.com/go-sql-driver/mysql2、go连接MySQL import ("database/sql""log"_ "github.com/go-sql-driver/mysql" // 导入 mysql 驱动 )type Users struct {ID intName stringEmail string }var db *sql.DBfu…...

【Rust】unsafe rust入门

这篇文章简单介绍下unsafe rust的几个要点 1. 解引用裸指针 裸指针其实就是C或者说C的指针&#xff0c;与C的指针不同的是&#xff0c;Rust的裸指针还是要分为可变和不可变&#xff0c;*const T 和 *mut T&#xff1a; 基于引用创建裸指针 let mut num 5;let r1 &num …...

dpwwn02靶场

靶机下载地址&#xff1a;https://download.vulnhub.com/dpwwn/dpwwn-02.zip 信息收集 ip add 查看kali Linux虚拟机的IP为&#xff1a;10.10.10.128 https://vulnhub.com/entry/dpwwn-2,343/中查看靶机的信息&#xff0c;IP固定为10.10.10.10 所以kali Linux添加仅主机网卡…...

K8S疑难概念理解——Pod,应该以哪种Kind来部署应用,为什么不直接Pod这种kind?

文章目录 一、Pod概念深度理解&#xff0c;为什么一般不直接以kindPod资源类型来部署应用?二、究竟应该以哪种资源类型来部署应用 一、Pod概念深度理解&#xff0c;为什么一般不直接以kindPod资源类型来部署应用? Pod是Kubernetes中的最小部署单元&#xff0c;可以包含一个或…...

LabVIEW进行仪器串行通信与模拟信号采集的比较

在现代测试、测量和控制系统中&#xff0c;设备通常采用两种主要方式与计算机进行交互&#xff1a;一种是通过数字通信接口&#xff08;如RS-232、RS-485、GPIB等&#xff09;&#xff0c;另一种是通过模拟信号&#xff08;电压、电流&#xff09;进行数据输出。每种方式具有其…...

D81【 python 接口自动化学习】- python基础之HTTP

day81 requests请求session用法 学习日期&#xff1a;20241127 学习目标&#xff1a;http定义及实战 -- requests请求session用法 学习笔记&#xff1a; requests请求session用法 import requests# 创建一个会话 reqrequests.session() url "http://sellshop.5istud…...

白鹿 Hands-on:消除冷启动——基于 Amazon Lambda SnapStart 轻松打造 Serverless Web 应用(二)

文章目录 前言一、前文回顾二、在 Lambda 上运行2.1、查看 Amazon SAM template2.2、编译和部署到 Amazon Lambda2.3、功能测试与验证 三、对比 Snapstart 效果四、资源清理五、实验总结总结 前言 在这个环节中&#xff0c;我们将延续《白鹿 Hands-on&#xff1a;消除冷启动——…...

ROC曲线

文章目录 前言一、ROC的应用&#xff1f;二、使用方式1. 数据准备2.绘图可视化 前言 在差异分析中&#xff0c;ROC曲线可以用来评估不同组之间的分类性能差异。差异分析旨在比较不同组之间的特征差异&#xff0c;例如在基因表达研究中比较不同基因在不同条件或组织中的表达水平…...

c++ 位图和布隆过滤器

位图&#xff08;bitmap&#xff09; 定义 位图是一种使用位数组存储数据的结构。每一位表示一个状态&#xff0c;通常用于快速判断某个值是否存在&#xff0c;或者用来表示布尔类型的集合。 特点 节省空间&#xff1a;一个字节可以表示8个状态。高效操作&#xff1a;位操作…...

实时文本转换:XUnity.AutoTranslator的Unity本地化解决方案

实时文本转换&#xff1a;XUnity.AutoTranslator的Unity本地化解决方案 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 在全球化游戏市场中&#xff0c;语言障碍常常成为玩家体验优质内容的最大阻碍。许多…...

雷达式多参数水文监测站

雷达式多参数水文监测站用先进的非接触式测量技术&#xff0c;结合水库断面参数精准计算流量&#xff0c;全程无需接触水体&#xff0c;从根源上规避水体环境对监测设备的影响。不受风、环境温度、雾霾、水体泥沙、漂浮物等外界因素干扰&#xff0c;即便在汛期水流浑浊、漂浮物…...

Hadoop 大数据开发专家 · 学习路线图-Python版

文章目录 基于 Python 为主开发 的 Hadoop 大数据开发工程师 学习路线大纲(可打印、企业级、纯实战方向) 一、阶段1:Python 开发基础(1 个月) 目标:能独立写 Python 代码、操作文件、数据处理、连接数据库 1. Python 核心语法 2. Python 数据结构(必须精通) 3. 文件与数…...

Pixel Fashion Atelier新手教程:非对称RPG布局下各模块功能与协作逻辑详解

Pixel Fashion Atelier新手教程&#xff1a;非对称RPG布局下各模块功能与协作逻辑详解 1. 认识像素时装锻造坊 Pixel Fashion Atelier&#xff08;像素时装锻造坊&#xff09;是一款基于Stable Diffusion与Anything-v5的图像生成工具&#xff0c;它通过独特的RPG游戏界面设计…...

【网络安全】CSRF跨站请求伪造:从原理到防御全解析

前言 如果说XSS是利用了用户对网站的信任&#xff0c;那么CSRF&#xff08;Cross-Site Request Forgery&#xff0c;跨站请求伪造&#xff09;则是利用了网站对用户浏览器&#xff08;Cookie&#xff09;的信任。 1. 什么是CSRF&#xff1f; CSRF&#xff0c;全称Cross-Site Re…...

解锁论文写作新范式:Paperzz AI 全流程赋能,让本科毕设从 “启动” 到 “成稿” 高效落地

Paperzz-AI官网免费论文查重复率AIGC检测/开题报告/文献综述/论文初稿paperzz - 毕业论文-AIGC论文检测-AI智能降重-ai智能写作https://www.paperzz.cc/dissertation 当毕业季的钟声敲响&#xff0c;不少本科生正陷入论文写作的僵局&#xff1a;对着空白文档无从下笔、文献检索…...

三维智能分割技术:从行业痛点到落地实践的全面解析

三维智能分割技术&#xff1a;从行业痛点到落地实践的全面解析 【免费下载链接】SAMPart3D SAMPart3D: Segment Any Part in 3D Objects 项目地址: https://gitcode.com/gh_mirrors/sa/SAMPart3D 问题场景&#xff1a;三维模型处理的现实困境 建筑设计行业&#xff1a;…...

用Python+OpenCV实现双目视觉三维重建:从相机标定到triangulatePoints实战

PythonOpenCV双目视觉三维重建实战&#xff1a;从标定到点云生成 去年在开发一个AR眼镜原型时&#xff0c;我遇到了一个棘手的问题&#xff1a;如何让设备准确感知周围环境的深度。经过反复尝试&#xff0c;最终采用双目视觉方案完美解决了这个问题。本文将分享整个实现过程&am…...

OpenClaw故障模拟:Qwen3.5-4B-Claude在异常操作场景下的恢复能力

OpenClaw故障模拟&#xff1a;Qwen3.5-4B-Claude在异常操作场景下的恢复能力 1. 为什么需要测试AI助手的故障恢复能力 上周我在用OpenClaw自动整理项目文档时&#xff0c;亲眼目睹了一场"数字灾难"——脚本误删了正在编辑的Markdown文件&#xff0c;而我没有开启版…...

LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置:二分查找实战

刷题路上&#xff0c;二分查找是绕不开的经典算法&#xff0c;而LeetCode 34题「在排序数组中查找元素的第一个和最后一个位置」&#xff0c;正是二分查找的进阶应用——它不仅要求我们找到目标值&#xff0c;更要精准定位其在非递减数组中的起始和结束位置&#xff0c;同时还要…...