多智能体模拟环境: Petting Zoo
在这个例子中,我们展示如何使用模拟环境定义多智能体模拟。与我们的单智能体Gymnasium示例类似,我们创建了一个具有外部定义环境的智能体-环境循环。主要区别在于我们现在使用多个智能体实现这种交互循环。我们将使用Petting Zoo库,它是Gymnasium的多智能体对应版本。
安装pettingzoo
和其他依赖
!pip install pettingzoo pygame rlcard
导入模块
import collections
import inspect
import tenacity
from langchain.output_parsers import RegexParser
from langchain.schema import (
HumanMessage,
SystemMessage,
)
from langchain_openai import ChatOpenAI
GymnasiumAgent
这里我们复现了Gymnasium示例中定义的相同GymnasiumAgent
。如果多次重试后仍未采取有效行动,它会简单地采取随机行动。
class GymnasiumAgent:
@classmethod
def get_docs(cls, env):
return env.unwrapped.__doc__
def __init__(self, model, env):
self.model = model
self.env = env
self.docs = self.get_docs(env)
self.instructions = """
你的目标是最大化你的回报,即你收到的奖励总和。
我会给你一个观察、奖励、终止标志、截断标志和到目前为止的回报,格式如下:
Observation: <observation>
Reward: <reward>
Termination: <termination>
Truncation: <truncation>
Return: <sum_of_rewards>
你将以以下格式回应一个动作:
Action: <action>
其中你用实际的动作替换<action>。
除此之外不要做任何其他事情。
"""
self.action_parser = RegexParser(
regex=r"Action: (.*)", output_keys=["action"], default_output_key="action"
)
self.message_history = []
self.ret = 0
def random_action(self):
action = self.env.action_space.sample()
return action
def reset(self):
self.message_history = [
SystemMessage(content=self.docs),
SystemMessage(content=self.instructions),
]
def observe</