追捕¶

此环境是 SISL 环境的一部分。请先阅读该页面以获取一般信息。
导入 |
|
---|---|
动作 |
离散 |
Parallel API |
是 |
手动控制 |
是 |
智能体 |
|
智能体 |
8 (+/-) |
动作形状 |
(5) |
动作值 |
Discrete(5) |
观察形状 |
(7, 7, 3) |
观察值 |
[0, 30] |
默认情况下,30个蓝色逃跑者智能体和8个红色追捕者智能体被放置在一个16x16的网格中,中心有一个障碍物,显示为白色。逃跑者随机移动,追捕者受控。每当追捕者完全包围一个逃跑者时,每个包围智能体都会获得5的奖励,并且逃跑者会被移除出环境。追捕者每次接触到逃跑者时也会获得0.01的奖励。追捕者有一个离散的动作空间,包括上、下、左、右和停留。每个追捕者观察以自身为中心的7x7网格,由红色追捕者智能体周围的橙色框表示。当所有逃跑者都被捕获或完成500个周期时,环境终止。请注意,此环境已应用了 PettingZoo 论文第 4.1 节中描述的奖励修剪优化。
观察形状采用 (obs_range, obs_range, 3)
的完整形式,其中第一个通道表示墙壁(值为1),第二个通道表示每个坐标中的盟友数量,第三个通道表示每个坐标中的对手数量。
手动控制¶
使用 ‘J’ 和 ‘K’ 选择不同的追捕者。选定的追捕者可以使用方向键移动。
参数¶
pursuit_v4.env(max_cycles=500, x_size=16, y_size=16, shared_reward=True, n_evaders=30,
n_pursuers=8,obs_range=7, n_catch=2, freeze_evaders=False, tag_reward=0.01,
catch_reward=5.0, urgency_reward=-0.1, surround=True, constraint_window=1.0)
x_size, y_size
: 环境世界空间的大小
shared_reward
: 奖励是否应在所有智能体之间分配
n_evaders
: 逃跑者数量
n_pursuers
: 追捕者数量
obs_range
: 智能体观察的围绕自身的方框大小。
n_catch
: 包围逃跑者以被视为捕获所需的追捕者数量
freeze_evaders
: 切换逃跑者是否可以移动
tag_reward
: “标记”(或单个逃跑者)的奖励。
term_pursuit
: 当一个或多个追捕者捕获逃跑者时增加的奖励
urgency_reward
: 每一步添加到智能体的奖励
surround
: 切换逃跑者是在被包围时移除,还是在 n_catch 个追捕者在逃跑者上方时移除
constraint_window
: 智能体可以在环境中随机生成的方框大小(从中心开始,按比例单位)。默认值为 1.0,意味着它们可以在地图上的任何地方生成。值为 0 表示所有智能体都在中心生成。
max_cycles
: 在 max_cycles 步后,所有智能体将返回完成状态
版本历史¶
v4: 更改奖励共享,修复收集错误,在渲染中添加智能体计数 (1.14.0)
v3: 修复观察空间错误 (1.5.0)
v2: 杂项错误修复 (1.4.0)
v1: 各种修复和环境参数更改 (1.3.1)
v0: 初版发布 (1.0.0)
用法¶
AEC¶
from pettingzoo.sisl import pursuit_v4
env = pursuit_v4.env(render_mode="human")
env.reset(seed=42)
for agent in env.agent_iter():
observation, reward, termination, truncation, info = env.last()
if termination or truncation:
action = None
else:
# this is where you would insert your policy
action = env.action_space(agent).sample()
env.step(action)
env.close()
Parallel¶
from pettingzoo.sisl import pursuit_v4
env = pursuit_v4.parallel_env(render_mode="human")
observations, infos = env.reset()
while env.agents:
# this is where you would insert your policy
actions = {agent: env.action_space(agent).sample() for agent in env.agents}
observations, rewards, terminations, truncations, infos = env.step(actions)
env.close()
API¶
- class pettingzoo.sisl.pursuit.pursuit.raw_env(*args, **kwargs)[source]¶
-
- observation_space(agent: str)[source]¶
接收智能体并返回该智能体的观察空间。
必须为相同的智能体名称返回相同的值
默认实现是返回 observation_spaces 字典