当前位置: 首页 > 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…...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...

LabVIEW双光子成像系统技术

双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制&#xff0c;展现出显著的技术优势&#xff1a; 深层组织穿透能力&#xff1a;适用于活体组织深度成像 高分辨率观测性能&#xff1a;满足微观结构的精细研究需求 低光毒性特点&#xff1a;减少对样本的损伤…...