windows下成功运行MicroRTS-Py项目

c972662ae666450aa653f8bf58f283c7.png1.microRTS(java)

microRTS是java写的跨平台的小型即时战略模拟器。

Farama-Foundation/MicroRTS: A simple and highly efficient RTS-game-inspired environment for reinforcement learning (github.com)https://github.com/Farama-Foundation/MicroRTS

a28e5fb650d94b5f96524ad2790a3493.png

部署和使用很简单

1)配置java环境

java环境变量的配置_java环境变量配置-CSDN博客

microRTS要求java8,也就是java1.8及以上版本。

2)命令行编译

先在根目录上新建一个bin文件夹

a3e6a00bd6a14a9e9d43554b50089166.png

然后执行命令行编译:

javac -cp "lib/*;src" -d bin src/rts/MicroRTS.java

(我就列出windows的方法,linux的命令可以在官网上找到)

带中文翻译的项目:

GitCode -MicroRTSGitCode是面向全球开发者的开源社区,包括原创博客,开源代码托管,代码协作,项目管理等。与开发者社区互动,提升您的研发效率和质量。https://gitcode.com/gh_mirrors/mi/MicroRTS

碎碎念……至于那个说明中的jar文件——那里面的jar文件,合并之类的,我不会java结果还以为打包是必要过程……最后也没成功,原来打jar包和执行java是并行的,都可以达到目的

3)命令行执行

java -cp "lib/*;bin" rts.MicroRTS

这样就能看到两个ai在跑对战,直到结束。

 

或者,一般跑图形界面带编辑器的是用这个命令:

java -cp "lib/*;bin" gui.frontend.FrontEnd

fc51a3bc0ef942d49bf27e82cc21b85d.png
4)弄出jar包

你可以将所有已编译的源文件和依赖项合并到一个JAR文件中,然后单独执行。为了为microRTS创建一个JAR文件:

javac -cp "lib/*:src" -d bin $(find . -name "*.java") # compile source files
cd bin
find ../lib -name "*.jar" | xargs -n 1 jar xvf # extract the contents of the JAR dependencies
jar cvf microrts.jar $(find . -name '*.class' -type f) # create a single JAR file with sources and dependencies

但是,这里给出的是Linux的命令!Windows不认识!

官网上还不给写出Windows的命令!寄!只能自己查了!

折腾了很久,我采取分着写的方式完成“翻译”,但是不尽人意

由于了解到在Linux生成的jar包,在windows上也能运行!!!我决定用WSL+java生成jar包

(这是后来补的,所以后面会有我装WSL的过程)

Java Downloads | Oracle 中国https://www.oracle.com/cn/java/technologies/downloads/#java8-linux先在上面下java的linux包,放到wsl的自己用户内。

 

使用 tar 命令解压缩下载的文件:

tar xzf jdk-8u161-linux-x64.tar.gz

 

将解压缩的 Java 安装到 /usr/local/java 目录:

sudo mkdir /usr/local/java

sudo mv jdk1.8.0_161 /usr/local/java/

 

设置环境变量。打开 /etc/profile 文件并添加以下行:

export JAVA_HOME=/usr/local/java/jdk1.8.0_161

export PATH=$PATH:$JAVA_HOME/bin

 

使环境变量立即生效:

source /etc/profile

 

验证 Java 安装是否成功:

java -version

 

以上步骤可能会因为你的 Linux 发行版和你需要的 Java 版本而有所不同。

然后进入放在Linux的microRTS文件夹根目录,执行官方说明的那几句话。

顺利生成!

然后放到windows下随便哪里,执行

java -cp microrts.jar rts.MicroRTS

0e07ac99246c48eb900e1ace48fdfb26.png

顺利执行成功!

 

2.MicroRTS-Py(python)

MicroRTS-Py是基于microRTS编写的python接口的项目,但是项目介绍上没找到说windows上是否可以编译,主要是依赖的Poetry(python版本管理器,不知道为啥不用conda……为啥不用requirements.txt)上没写是否在windows上能搞。

MicroRTS-Pyhttps://github.com/Farama-Foundation/MicroRTS-Py

配置包的坑是真多,尤其是版本不匹配,我留下一条可行的版本路给大家。

 

Prerequisites:

  • Python 3.8+  (建议3.9,因为poetry要求3.7.1<= <3.10,正好剩下3.8和3.9)
  • Poetry
  • git(给poetry创建版本库用)
  • Java 8.0+   (运行microRTS用)
  • FFmpeg (for video recording utilities)

这个项目属于python利用poetry虚拟环境对java的 MicroRTS 原项目套壳。

 

1)安装Poetry

Poetry 是 Python 中的依赖项管理和打包工具。它允许您声明项目所依赖的库,并将为您管理(安装/更新)它们。Poetry 提供了一个锁定文件来确保可重复安装,并且可以构建您的项目以进行分发。

 

简介 |文档 |Poetryhttps://python-poetry.org/docs/官方文档有推荐用 pipx 来安装poetry,但是我发现 pipx 的安装还需要 Scoop ……我还是自己装吧。

由于我装好了python,于是我使用如下命令行

(Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | python -

2e8521911d4e41038419283386d3ad24.png

 装完了记得配置环境变量(跟那个java一样,按照这句标亮的提示来做)

74ddd144b61d4e6c953c0ce90fe3549e.png

 

2)使用poetry

MicroRTS-Py介绍是这么说的

$ git clone --recursive https://github.com/Farama-Foundation/MicroRTS-Py.git && \
cd MicroRTS-Py
poetry install
# The `poetry install` command above creates a virtual environment for us, in which all the dependencies are installed.
# We can use `poetry shell` to create a new shell in which this environment is activated. Once we are done working with
# MicroRTS, we can leave it again using `exit`.
poetry shell
# By default, the torch wheel is built with CUDA 10.2. If you are using newer NVIDIA GPUs (e.g., 3060 TI), you may need to specifically install CUDA 11.3 wheels by overriding the torch dependency with pip:
# poetry run pip install "torch==1.12.1" --upgrade --extra-index-url https://download.pytorch.org/whl/cu113
python hello_world.py

以下不特殊说明,都是在 MicroRTS-Py 目录下执行(解压后的根目录)

0-将microRTS(java编译好的原版)放到指定位置

将标题1中编译好的microRTS放到这个位置(原版microRTS-py的这里的文件夹里是空的)

a42118a7142647c68857c7426758464d.png

pyproject.toml的一部分可以看出端倪

exclude = ["gym_microrts/microrts/build/*","gym_microrts/microrts/resources","gym_microrts/microrts/src","gym_microrts/microrts/data","gym_microrts/microrts/lib/*.jar",
]

 poetry install 实际上是读取根目录下的pyproject.toml文件来装配虚拟环境的!!! 

1-执行 poetry install

d6f347c7385248d59736ec55044959f9.png

坑: Unable to detect version control system

这个问 Copilot 解决了,需要在当前文件夹路径有git版本库

git init

然后就可以成功执行这句话了 

67539fdd94974d9d845d74da7a143392.png

2-执行 poetry shell

274e14e243454651a5d93e3f41e566ef.png

坑: ModuleNotFoundError: No module named 'tomli'

简单,pip安装之 pip install tomli 。

我依次安装了tomli、webencodings、 pexpect。最后终于运行成功

【这里存疑,我的另一台电脑每次就不会出现这个冲突,怀疑是我的conda导致每次状态又保持回去了】

98286e0cdbfb4ecea33e4269a03dfb5a.png

后来除了又缺包pip安装上了后……

 python hello_world.py
removing E:\1projects\_GitHub\RL\RTS\MicroRTS-Py\gym_microrts\microrts/microrts.jar...
building E:\1projects\_GitHub\RL\RTS\MicroRTS-Py\gym_microrts\microrts/microrts.jar...
E:\1projects\_GitHub\RL\RTS\MicroRTS-Py
此应用程序需要适用于 Linux 的 Windows 子系统可选组件。
通过运行安装它: wsl.exe --install --no-distribution
可能需要重新启动系统才能使更改生效。
Error code: Bash/WSL_E_WSL_OPTIONAL_COMPONENT_REQUIRED
Traceback (most recent call last):

这玩意又要WSL???我为了虚拟机删除了WSL(这东西曾经把我系统区搞废了一次!吓死我了!)这东西竟然又要!

3-折腾WSL

于是我把 控制面板中的 适用于Linux的Windows子系统(Windows Subsystem for Linux)打开了

461d3656a59d40778f22f93881ef47bb.png

然后运行命令行

 wsl.exe --install Ubuntu-20.04

 

后来我装WSL又提示我虚拟化的事情……可能是我之前的手机模拟器关了Hyper-V的缘故

Please enable the Virtual Machine Platform Windows feature and ensure virtua

 

 折腾了一下BIOS没啥效果,我试了试这个里的评论

WSL报告"请启用虚拟机平台 Windows 功能并确保在 BIOS 中启用虚拟化"问题一例 - 知乎 (zhihu.com)

 bcdedit /set hypervisorlaunchtype auto

用了这个命令行重启果然能装好WSL了(这老哥评论真不错)

1a435bab0bbb42f7b465c7cec36cb9ed.png

4-用poetry运行python样例

有一点问题,这样运行会出这个

f0c46b8865274e2bbb2b811f091db7ec.png

又开始报java的错……差不多就是没 microrts.jar……也就是还得回第一步去弄出jar包……

d7a68a7a87824167ae5804043f9ef5fc.png

这个虚拟环境里还是要求有那个jar包的

我看到github上也有人问这个问题,后来发现是build.sh导致的,他们都用的是WSL进行的运行所以避免了这个问题(他们这根本不是彻底的windows化……)。

运行 你好_world.py 时出现 Java 导入错误 ·问题 #136 ·Farama-Foundation/MicroRTS-Py --- Java Import Error when running hello_world.py · Issue #136 · Farama-Foundation/MicroRTS-Py (github.com)https://github.com/Farama-Foundation/MicroRTS-Py/issues/136a576709943a84d24bdc3f486f830118d.png

于是我全局搜索找到控制“build.sh”【因为它用的是linux风格的指令集】的地方,把vec_env.py的这里的True改成False避免了每次的removing和buliding,从而让jar包还能存在……

由于hello_world.py没输出,我用ppo_gridnet.py来进行成功验证7fa1a071789140ac82543b69777ee6ac.png

 终于TMD运行起来了!!!

(历经数天(之前还花了好几天折腾,暂且没计入),9.21-9.23留)


总结

安装好WSL, java1.8

编译好java的microRTS,做好jar包,并放到指定位置

选择python3.9版本

安装好poetry

在项目根目录依次执行如下命令行

conda activate RTS  #总之就是激活你的python环境,不见得是这句话
poetry install    #装配poetry的虚拟python版本环境
poetry shell

最后执行你需要的环境参数进行强化学习

 

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

828华为云征文|华为云Flexus X实例:极速搭建个人代码仓库GitLab平台

目录 前言 一、Flexus云服务器X介绍 1.1 Flexus云服务器X实例简介 1.2 Flexus云服务器X实例特点 1.3 Flexus云服务器X实例使用场景 二、Flexus云服务器X购买 2.1 Flexus X实例购买 2.2 重置密码 2.3 登录服务器 三、Flexus X 实例安装GitLab 3.1 GitLab镜像下载 3.2 GitLab部署…

Arthas mbean(查看 Mbean 的信息)

文章目录 二、命令列表2.1 jvm相关命令2.1.10 mbean&#xff08;查看 Mbean 的信息&#xff09;举例1&#xff1a;列出所有 Mbean 的名称&#xff1a;举例2&#xff1a;查看 Mbean 的元信息&#xff1a;举例3&#xff1a;查看 mbean 属性信息&#xff1a;举例4&#xff1a;mbea…

游戏化在电子课程中的作用:提高参与度和学习成果

游戏化&#xff0c;即游戏设计元素在非游戏环境中的应用&#xff0c;已成为电子学习领域的强大工具。通过将积分、徽章、排行榜和挑战等游戏机制整合到教育内容中&#xff0c;电子课程可以变得更具吸引力、激励性和有效性。以下是游戏化如何在转变电子学习中发挥重要作用&#…

基于Vue3组件封装的技巧分享

本文在Vue3的基础上针对一些常见UI组件库组件进行二次封装&#xff0c;旨在追求更好的个性化&#xff0c;更灵活的拓展&#xff0c;提供一些个人的思路见解&#xff0c;如有不妥之处&#xff0c;敬请指出。核心知识点$attrs,$slots 需求 需求背景 日常开发中&#xff0c;我们经…

【React】(推荐项目)使用 React、Socket.io、Nodejs、Redux-Toolkit、MongoDB 构建聊天应用程序 (2024)

使用 React、Socket.io、Nodejs、Redux-Toolkit、MongoDB 构建聊天应用程序 (2024) 学习使用 React、Socket.io、Node.js、Redux-Toolkit 和 MongoDB 构建响应式实时消息聊天应用程序。这个项目涵盖了从设置到实施的所有内容&#xff0c;提供了宝贵的见解和实用技能。无论您是…

P2568 GCD(GCD求和的常用变化 欧拉函数)

通过/p改变为互质的情况 维护欧拉函数前缀和即可。 GCD - 洛谷 #include<bits/stdc.h> using namespace std; const int N 1e78; vector<int> pri; bool not_prime[N]; long long phi[N]; long long sum[N]; void pre(int n) {phi[1] 1;for (int i 2; i < …

plt常用函数介绍一

目录 前言plt.figure()plt.subplot()plt.subplots()plt.xticks()plt.xlim() 前言 Matplotlib是Python中的一个库&#xff0c;它是数字的-NumPy库的数学扩展。 Pyplot是Matplotlib模块的基于状态的接口。在Pyplot中可以使用各种图&#xff0c;例如线图&#xff0c;轮廓图&#…

关于区块链的安全和隐私

背景 区块链技术在近年来发展迅速&#xff0c;被认为是安全计算的突破&#xff0c;但其安全和隐私问题在不同应用中的部署仍处于争论焦点。 目的 对区块链的安全和隐私进行全面综述&#xff0c;帮助读者深入了解区块链的相关概念、属性、技术和系统。 结构 首先介绍区块链…

AI大模型项目实战v0.2: 结合个人知识库

前言 在AI大模型项目实战v0.1版本中&#xff0c;我们实现了一个最简单的基于纯LLM的问答机器人Tbot。 今天升级到v0.2版本&#xff0c;结合个人知识库。 本系列每个版本&#xff0c;都将提供完整的代码文档&#xff0c;获取方法见文末。 下面开启我们的v0.2版本之旅。 v0.2 Tb…

如何用AI实现自动更新文章?(全自动更新网站)

AI的诞生确实给我们的生活和工作都带来了很大的改变&#xff0c;从我自身来讲&#xff0c;也渐渐习惯了遇到事情先问问AI&#xff0c;不管是翻译、专业性问题、PPT制作、总结写作这些&#xff0c;确实帮我迅速理清了思路&#xff0c;也可以有很多内容的借鉴。 作为一个业余爱好…

力扣 简单 206.反转链表

文章目录 题目介绍题解 题目介绍 题解 法一&#xff1a;双指针 在遍历链表时&#xff0c;将当前节点的 next 改为指向前一个节点。由于节点没有引用其前一个节点&#xff0c;因此必须事先存储其前一个节点。在更改引用之前&#xff0c;还需要存储后一个节点。最后返回新的头引…

鸿蒙OpenHarmony【小型系统基础内核(进程管理任务)】子系统开发

任务 基本概念 从系统的角度看&#xff0c;任务Task是竞争系统资源的最小运行单元。任务可以使用或等待CPU、使用内存空间等系统资源&#xff0c;并独立于其它任务运行。 OpenHarmony 内核中使用一个任务表示一个线程。 OpenHarmony 内核中同优先级进程内的任务统一调度、运…

14.第二阶段x86游戏实战2-C++语言开发环境搭建-VisualStudio2017

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 本人写的内容纯属胡编乱造&#xff0c;全都是合成造假&#xff0c;仅仅只是为了娱乐&#xff0c;请不要…

复制他人 CSDN 文章到自己的博客

文章目录 0.前言步骤 0.前言 在复制别人文章发布时&#xff0c;记得表明转载哦 步骤 在需要复制的csdn 文章页面&#xff0c;打开浏览器开发者工具&#xff08;F12&#xff09;Ctrl F 查找"article_content"标签头 右键“Copy”->“Copy element”新建一个 tx…

【直线 / B】

题目 代码&#xff08;巨复杂&#xff0c;跑了我十几分钟&#xff09; #include <bits/stdc.h> using namespace std; const double eps 1e-6; const int N 18e6; #define x first #define y second typedef pair<int, int> PII; int line; PII p1[N]; PII p2[N…

React开发环境搭建以及常见错误解决

‌React开发环境搭建主要包括Node.js安装、编辑器选择、创建React项目等步骤‌。 Node.js安装‌ 从Node.js官网下载并安装最新版本的Node.js&#xff0c;安装过程中npm会自动安装。安装完成后&#xff0c;通过命令行输入node -v和npm -v检查安装是否成功。 carawang%node -v…

transformer模型写诗词

加入会员社群&#xff0c;免费获取本项目数据集和代码&#xff1a;点击进入>> 1. 项目简介 该项目是基于A035-transformer模型的诗词生成系统&#xff0c;旨在通过深度学习技术实现古诗词的自动化创作。项目的背景源自当前自然语言处理领域的迅速发展&#xff0c;特别是…

C++【类和对象】(构造函数与析构函数)

文章目录 1. 类的默认成员函数2. 构造函数析构函数的特点3. 析构函数析构函数的特点 结语 1. 类的默认成员函数 默认成员对象就是我们没有显示的写&#xff0c;但是编译器会自动生成的成员函数。一个类&#xff0c;我们不写的情况下编译器会默认生成以下6个成员函数&#xff0…

解决Nodify框架因自带放大缩小、平移功能导致拖拽添加的控件无法准确在鼠标放下的位置显示控件

ViewModel中写具体关键的几段代码&#xff1a; var editor sender as NodifyEditor; Point p e.GetPosition(editor);//放大缩小比例double scale editor.ViewportZoom;//经过放大缩小、平移后获得坐标点位置p new Point(Math.Round((p.X - editor.ViewportT…

响应式布局-媒体查询父级布局容器

1.响应式布局容器 父局作为布局容器&#xff0c;配合自己元素实现变化效果&#xff0c;原理&#xff1a;在不通过屏幕下面吗&#xff0c;通过媒体查询来改变子元素的排列方式和大小&#xff0c;从而实现不同尺寸屏幕下看到不同的效果。 2.响应尺寸布局容器常见宽度划分 手机-…