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

飞机大战告尾

参考

PPO算法逐行代码详解

链接

通过网盘分享的文件:PlaneWar
链接: https://pan.baidu.com/s/1cbLKTcBxL6Aem3WkyDtPzg?pwd=1234 提取码: 1234

10.17关于博客发了又改这件事

悲催的事

今天训练了一早上ppo模型,满怀期待的检测成果时发现一点长进都没有。结果查出来一件悲催的事,模型一直都在输出静止指令!昨晚只训练了一会,刚好看到有个得了200分的模型,还以为ok了的。
现在想想,不知道我是运气好还是不好,那个飞机就靠着随机数(dqn遗留下来的,我没删)拿了个200分,还把我骗过去了…只能说游戏特性造就了它,静止时没子弹打他,随机数又帮它躲子弹和拿buff,要是在贪吃蛇,活不过一秒

修改

连续换了几个关键词,总算在github上找到了使用ppo的游戏ai。
这次就快很多了,一顿cv,甚至都不用怎么改(开源万岁!),因为它是用pygame实现游戏的。
这次不敢怎么改了,太多坑了。但是不改的话,ai只能决定移动方向,过于死板。人类玩的时候可以通过按钮的点击时长来控制飞机速度,而ai只能一点点挪动。因此,我将输出值由之前的4变成了13(不够还可以再加),即4*3+1。

0 -> 静止
1 5 9 上 2 6 10 右 速度依次增大

        direction = actionif direction == 0:distance = 0else:#1 2 3 4 上 右 左 下 好别扭呀distance=5*int(direction/4+1)direction=direction%4+1

10.16

静默

昨晚问了一下gpt,将昨天的静默模式完善了一下(之前的贪吃蛇在训练时就是静默的,同时32个一起训,可惜这个项目不太好实现,报“无法序列化”类似的错)。

dqn改成了ppo

效果拔群!!!
在这里插入图片描述

平均分明显挺高了好多。
就是改的过程有点折磨人了。一开始想找博客,没见有直接用游戏做示例的,直接看又没心思。想着去问ai简单点,
在这里插入图片描述

给的很痛快,bug一堆…改了一小时后,它成功帮我克服了数学恐惧症,找博客看了。
将博客代码cv进去后,由于本项目传进net中的是一整张图,我在网上找不到啥相关了,只好又跟ai斗智斗勇了一番。早上九点研究到下午五点,一直在找bug。
结果吃了顿饭回来,才发现可以参考dqn的代码(有时候脑袋不灵光,很简单的事就是想不通)。工作量一下就缩小了好几倍!后面就是将dqn中的update函数魔改成ppo的(个人感觉dqn改成ppo主要改这里就行)
在这里插入图片描述

有些问题实在难以解决,那就只能灵活一下,绕过去了。

ppo的强大

换成了ppo,画面不卡顿了,模型文件变小了(dqn 600MB,现在ppo 3MB),平均分也变高了。

起始分在这里插入图片描述

每次都要重新开始会导致缺少对抗boss的经验。通过设置初始分,起到类似选择关卡的作用,开局对战boss(200分第一个boss出现)。

10.15

奖励分

昨晚看到别的强化学习视频,发现之前设计的奖惩机制太简陋了。有些奖励分重复,例如角色受到的伤害与敌人造成的伤害都会给予惩罚(不知道当初咋想的),有些需要奖励的没给到位,例如没有存活分。
研究了一早上关于奖励的机制后,总体表现好了点,却出现了新问题,现在经常突然就冲进敌群里自杀。刚开始我以为是击杀分过高了,导致ai过于勇猛。结果几度大砍击杀分和增强存活分(有可能造就一个怂货),反而更猛了,还学会了冲到最上面去吃伤害…
不信邪的我打了几个log,看了一下奖励分到底怎么变化的。无效,跟我想的差不多,但效果却大相径庭。

pygame卡顿

敌人过多时,会导致卡住。通过装饰器测了一下时间,发现游戏刷新耗废了大部分时间。
在这里插入图片描述

在这里插入图片描述

期间又是修修改改,缝缝补补。又是暂停计时器,又是进程中夹带线程,还不小心搞成了静默模式。

相关文章:

飞机大战告尾

参考 PPO算法逐行代码详解 链接 通过网盘分享的文件:PlaneWar 链接: https://pan.baidu.com/s/1cbLKTcBxL6Aem3WkyDtPzg?pwd1234 提取码: 1234 10.17关于博客发了又改这件事 悲催的事 今天训练了一早上ppo模型,满怀期待的检测成果时发现一点长进都…...

支持向量机SVM原理详解

SVM原理详解 1、超平面2、SVM原理1. 问题定义2. 分类决策得到约束条件 3. 最大化间隔4. 优化目标 3、凸优化问题1. 原始优化问题优化目标约束条件 2. 拉格朗日乘子法3. 拉格朗日函数分析4. 求解对 w w w 和 b b b 的极值5. 构造对偶问题对偶问题的约束条件: 6、通…...

使用JMeter进行Spring Boot接口的压力测试

使用 Apache JMeter 对接口进行压力测试是一个相对简单的过程。以下是详细的步骤,包括安装、配置和执行测试计划。 1. 下载和安装 JMeter 下载 JMeter 从 JMeter 官方网站https://jmeter.apache.org/download_jmeter.cgi 下载最新版本的 JMeter。 解压缩 将下载的 …...

C++学习笔记----9、发现继承的技巧(三)---- 尊重父类(1)

当写继承类的时候,需要清楚父类与子类之间的交互。像生成顺序,构造函数链,以及转化都可以是问题的根源。 1、父类构造函数 对象不会马上就能干活;它们必须由父类以及所包含的任意对象进行构建。c定义了如下的生成顺序&#xff1a…...

启动service报错ORA-44317: database open read-only

ADG&#xff08;RAC&#xff09;备库环境&#xff0c;srvctl添加service服务成功&#xff0c;启动service时报错ORA-44317: database open read-only。 这是预期行为&#xff0c; 使用“srvctl add service -d <db_name> -s <service_name>”创建服务时&#xff0c…...

GNU/Linux - Savannah项目

* 我们托管在自由操作系统上运行的自由项目&#xff0c;不依赖任何专有软件。 * 我们的服务使用 100% 的自由软件运行&#xff0c;包括服务本身。 * We host free projects that run on free operating systems and without any proprietary software dependencies. * Our se…...

Debug-028-el-carousel走马灯-当展示图片为2的问题处理

前言&#xff1a; el-carousel走马灯又是给elementui填坑的一天。el-carousel走马灯其实类似小程序中的轮播图。这里担心涉及版权问题就不贴项目中的图了。简单阐述一下问题&#xff1a;正常使用el-carousel时&#xff0c;如果图片数量大于等于3时&#xff0c;可以定时自动顺序…...

TapData 知识库 | 一文吃透数据整合(Data Consolidation)

顾名思义&#xff0c;数据整合指的是将不同来源的数据汇集在一起&#xff0c;并将其集中存储于一个统一的数据平台。数据整合使用户能够通过单一访问入口获取数据&#xff0c;进而推动数据洞察的生成与分析。 数据通常被简单地看作信息的集合&#xff0c;仿佛默认每个数据单元在…...

MySQL数据的导出

【图书推荐】《MySQL 9从入门到性能优化&#xff08;视频教学版&#xff09;》-CSDN博客 《MySQL 9从入门到性能优化&#xff08;视频教学版&#xff09;&#xff08;数据库技术丛书&#xff09;》(王英英)【摘要 书评 试读】- 京东图书 (jd.com) MySQL9数据库技术_夏天又到了…...

微服务--OpenFeign【重点】

如果哪天 我们硬编码写的接口变了&#xff0c;只要写过该接口的 都要改&#xff0c;太麻烦了&#xff0c; 所以 就用 OpenFeign 来解决这个麻烦 了解&#xff1a; SimpleClientHttpRequestFactory和 HttpComponentsClientHttpRequestFactory 都是Spring框架中用于创建ClientH…...

【力扣打卡系列】滑动窗口与双指针(两数之和)

坚持按题型打卡&刷&梳理力扣算法题系列&#xff0c;语言为go&#xff0c;Day1 两数之和 题目描述 解题思路 采用哈希表 将nums[i] nums[j] target 转化成 nums[i] target - nums[j]去思考新建一个map来存储&#xff0c;键为值&#xff08;左边的&#xff09;&#…...

蚂蚁华东师范大学:从零开始学习定义和解决一般优化问题LLMOPT

&#x1f3af; 推荐指数&#xff1a;&#x1f31f;&#x1f31f;&#x1f31f; &#x1f4d6; title&#xff1a;LLMOPT: Learning to Define and Solve General Optimization Problems from Scratch &#x1f525; code&#xff1a;https://github.com/caigaojiang/LLMOPT &am…...

价格游戏的终章:品牌如何在通货膨胀时代智取市场

来源&#xff1a;The era of price-led profit growth is coming to an end (marketingweek.com) 近年来&#xff0c;通货膨胀促使许多品牌通过提价来提升利润&#xff0c;而销量几乎没有受到太大影响。然而&#xff0c;随着通货膨胀放缓&#xff0c;继续提价的策略可能会吸引…...

CVTE Android面试题及参考答案

Activity 的生命周期 Activity 的生命周期分为以下几个主要状态: onCreate ():在 Activity 第一次被创建的时候调用。通常在这个方法中进行一些初始化操作,如设置布局、初始化成员变量等。这是 Activity 进入可见状态的第一步。onStart ():当 Activity 即将对用户可见的时候…...

Docker实战:从入门到进阶

Docker实战&#xff1a;从入门到进阶 引言 Docker是一个开源的应用容器引擎&#xff0c;它允许开发者打包他们的应用以及应用的依赖包到一个可移植的容器中&#xff0c;然后发布到任何支持Docker的平台上。本文将通过实战和应用举例&#xff0c;带领大家深入了解Docker的强大…...

Jupyter Notebook汉化(中文版)

原版jupyter notebook是英文的&#xff0c;想要将其改为中文 在jupyter notebook所在环境输入以下命令 pip install jupyterlab-language-pack-zh-CN打开jupyter notebook&#xff0c;在设置语言中将其设置为中文...

C#的小数位保留以及四舍五入

C#使用Math.Round("数值","保留位","保留方式")进行小数位保留以及四舍五入 //1.MidpointRounding.ToEven(四舍六入五成双) //当保留小数位后一位为0~4时&#xff0c;舍去末位 var x1 Math.Round(1.124, 2, MidpointRo…...

KNNImputer

KNNImputer实例是指在使用Python的scikit-learn库时&#xff0c;通过sklearn.impute.KNNImputer类创建的一个对象&#xff0c;该对象专门用于处理数据集中的缺失值。KNNImputer采用K-近邻&#xff08;K-Nearest Neighbors&#xff0c;KNN&#xff09;算法来估算并填充这些缺失值…...

RHCE例行性工作笔记

1、单一执行的例行性工作 单一执行的例行性工作&#xff1a; 仅处理执行一次就结束了 at命令的工作过程 /etc/at.allow &#xff0c;写在该文件的人可以使用 at 命令 /etc/at.deny &#xff0c;黑名单 两个文件如果都不存在&#xff0c;只有 root 能使用 #at 工作调度对应的…...

ros2 action server示例、拓展、练习

注意&#xff1a;以下代码全部由ai生成&#xff0c;没有大问题&#xff0c;运用时需根据报错逐步调试 action server示例 将 goal、result 和 feedback 作为类的成员变量的 C 示例代码&#xff1a; 示例代码 #include "rclcpp/rclcpp.hpp" #include "rclcpp…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

使用LangGraph和LangSmith构建多智能体人工智能系统

现在&#xff0c;通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战&#xff0c;比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...

STM32HAL库USART源代码解析及应用

STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...