pettingzoo说明文档官网地址:https://pettingzoo.farama.org/content/environment_creation/。
【Start】官方给出了左侧栏中“环境创造” 的“自定义环境示例"和"与ACE环境交互"的代码。 此时新建demo文件粘贴"自定义环境示例代码"运行,无报错也无可视化结果。新建demo2文件粘贴"与ACE环境交互"的代码运行报错如下:
此时无论通过"pip install aec_rps " 还是"conda install aec_rps"都无法成功,且打开清华镜像或阿里云等镜像地址,并在地址里面搜索“aec_rps”仍无结果,说明该库并不在这几个镜像里。
回到官方文档中仔细查看,发现一句“若与自定义环境交互,…”,猜测无法下载的库“aec_rps”可能指的的“自定义环境”的那部分代码,观察里面调用的函数是“env”,则考虑进一步在“自定义环境”代码部分寻找是否存在该函数”。
在“自定义环境”这部分代码中发现存在“env”函数,故“自定义环境代码”即为所需的“aec_rps”库这一猜测的可能性变得更大,故进行尝试。
方法一:新建一个名为“aec_rps”的py文件,粘贴“自定义环境”这部分代码,以供另一个粘贴了“交互代码”的demo文件使用。
方法二:把二者粘贴到同一个py文件中,但因为处于同一个文件,故不需要使用库的前缀,也即把函数“aec_rps.env”名字替换为“env”即可。
此处使用的第二种方法。
运行之后有如下报错:
看错误时自下至上,错误显示“模块不可调用”。点一下最下面那行错误的紫色部分,转移至代码的162行,错误显示不可调用的模块是"agent_selector"。鼠标放至"agent_selector"上并按Ctrl键转移至一个同名“agetnt_selector”的py文件下,按照该py文件的位置(鼠标轻轻放在文件名上方)在该项目文件夹中寻找,发现该同名文件不是内置库,是自写的py文件。
进一步发现该py文件中也定义了一个名为“agetnt_selector”的函数,故此时可认为出错行代码:“ self._agent_selector = agent_selector(self.agents)”的出错原因是该行代码直接调用了名为“ageent_seletcor”的py文件,而非其中的函数。因此修改方式是在错误出错行加上对“ageent_seletcor”py文件中的“ageent_seletcor”函数的调用,也即把“ agent_selector(self.agents)”更正为“ agent_selector.agent_selector(self.agents)”,即可正确运行。