首页 > 其他分享 >空战博弈实现——3 gym自定义环境

空战博弈实现——3 gym自定义环境

时间:2024-03-24 18:57:42浏览次数:15  
标签:control 自定义 envs gym py 环境 init 空战

gym1——自定义Gym环境并注册

目录

感谢

强化学习实战 第一讲 gym学习及二次开发 - 知乎 (zhihu.com)

开始

Step 0 新建文件夹

Gym的环境都保存在gym/envs目录下,envs目录下包含了各种类型的环境例如:atari、classic_control等,我们可以在这下目录自己创建一个环境,注意自己创建的环境要有

__init__.py

文件。这里下面的示例是没有自己新建,而是添加到了classic_control目录下。这样比较容易,但如果自己想要新建一个属于自己的,最好还是新建一个文件夹,然后在这个文件夹下面添加init文件,当添加init文件之后在pycharm中,文件夹显示为namespace,也就是带圈的图标。

QQ截图20221207095840

Step1:新建环境文件 xxEnv.py

在envs/classic_control目录下,建立环境文件aceEnv.py

aceEnv.py中应定义一个环境类一般以XxxEnv为名称,本文建立类名称为AceEnv,

按照gym的工作原理,此类中应至少包含reset()、step()、init()、seed()、close()函数,

其中,step函数必须返回obs, reward, done, info四个变量,

reset返回初始化的状态。(注:此部分的函数定义格式可以参考classic_control内的其他函数,着重是要按照需求更改step和reset函数)。

另外需要对环境的主要变量维数进行定义,方便外部强化学习算法直接调用生成模型网络,例如控制量维度action_space、状态量维度observation_space等。

Step2: 在env下的_ _ init _ _ .py下注册

在envs目录下,包含一个初始化函数_ _ init _ _ .py,当访问envs类时,会通过这个初始化函数自动注册各环境,因此需要在__init__环境中注册我们定义的环境,给出其调用名“ID”以及此“ID”对应的类。

在envs/init.py内的#Classic分类下,插入注册语句:

register(

  id='Ace-v0', %%此部分为环境调用的ID,可自由设定,与算法中调用一致即可。
  entry_point='gym.envs.classic_control:AceEnv',   %%此部分为环境的类,注意:AceEnv是aceEnv.py中定义的类,并不是文件名。

)

QQ截图20221207100243

**Step3 ** 添加新建环境文件夹的引用

在envs/classic_control/init.py内,加入引用ace环境的语句**

from gym.envs.classic_control.ace import AceEnv

QQ截图20221207100434

Step4:在算法中进行调用

env = gym.make('Ace-v0')

标签:control,自定义,envs,gym,py,环境,init,空战
From: https://www.cnblogs.com/zuti666/p/18092804

相关文章

  • 空战博弈编程实现——gym+jsbsim
    笔记1珠玉在前论文1RichterDJ,CalixRA.QPlane:AnOpen-SourceReinforcementLearningToolkitforAutonomousFixedWingAircraftSimulation[C]//Proceedingsofthe12thACMMultimediaSystemsConference.2021:261-266.QPlane|Proceedingsofthe12th......
  • 空战博弈编程实现
    AirSim环境搭建目录AirSim环境搭建感谢一AirSim简介二vs2019三虚幻引擎四下载编译五环境的使用1要把EpicGame语言改为英文2createProject3创建C++类。4复制Plugin5打开sln文件,进行调试6场景设置7运行8视角调节9再次进入,进行游戏六后续参考教程感谢airsi......
  • 空战编程实现——6 强化学习与控制器
    目录1付宇鹏,邓向阳,何明,等.基于强化学习的固定翼飞机姿态控制方法研究_付宇鹏[J].控制与决策,:1-6.输入输出模型结构强化学习方法——ppo奖励函数设置实现平台训练技巧效果2马一鸣.基于强化学习的前馈控制器[D].华北电力大学(北京),2021.强化学习自适应补偿控制系统结......
  • C# wpf 实现自定义撤销重做功能
    新建wpf项目,新建Undoable.cs(操作记录),main.xaml(页面)usingSystem;usingSystem.Collections.Generic;namespaceWpfApp1{///<summary>///撤销重做对象///ceatebyxin2022.6.26///2023.9.13去除Step的定义替换为KeyValuePair简化实现///</summ......
  • 构建自定义颜色的SolidColorBrush
    ①System.Windows.Media.Brushes.BlueViolet;②newSystem.Windows.Media.SolidColorBrush(System.Windows.Media.Color.FromRgb(0X8A,0X2B,0XE2));③newSystem.Windows.Media.SolidColorBrush(System.Windows.Media.Color.FromArgb(0XFF,0X8A,0X2B,0XE2));//完全......
  • 自定义类型结构体♪♪♪
    目录结构体结构体的声明结构体的变量的定义结构体的变量的初始化结构成员访问操作符结构体的特殊声明(匿名结构体)结构体重命名结构体内存对齐对齐规则:为什们要存在内存对齐?怎样设计结构体使其占用内存空间大小尽量小一点?修改默认对齐数结构体传参结构体实现位段......
  • 【Godot4自学手册】第二十七节自定义状态机完成看守地宫怪物
    本节,我将使用自定义状态机实现看守地宫怪物,完成了基础类State,状态机类StateMachine的编码,实现了怪物的闲置巡逻类、追踪类和攻击类,以及对应动画等。这节代码有点多,不过还好,代码比较简单。最终效果如下:一、基本概念状态机(StateMachine)是有限状态自动机的简称,是指一个数学......
  • lua/c开发:lua增加自定义require方式
    我们会有需要自定义加载模块逻辑的需求,比如支持从自定义格式数据包中加载一个被加密过的lua文件的方式,这在生产环境中非常常见,可以有效保护源码同时保持整洁;lua模块管理库会从若干个loader中逐个尝试加载模块,lua原生提供了4个loader;staticconstlua_CFunctionsearchers[]={......
  • 鸿蒙自定义控件实现罗盘数字时钟效果
    前言:DevEcoStudio版本:4.0.0.600关注过我的小伙伴一定知道我之前写过一篇基于Android的 仿抖音效果的数字时钟罗盘 最近看了鸿蒙的Canvas组件,今天通过Canvas组件也实现下罗盘数字时钟的效果。参考链接:OpenHarmonyCanvas  OpenHarmonyCanvasrenderingcontext2d效果:......
  • 使用Django-Simple-Captcha在Django项目加入验证码模块并自定义样式
    在Django项目中加入验证码功能,通常需要借助第三方库,比如Django-Smple-Captch、Django-reCAPTCHA、DEF-reCAPTCHA、Wagtail-Django-ReCaptcha、Django-Friendly-Captcha等。其中,Django-Smple-Captcha是一个流行的选择,它提供了一个简单而强大的Django应用,无需调用第三方API,......