追捕

../../../_images/sisl_pursuit.gif

此环境是 SISL 环境的一部分。请先阅读该页面以获取一般信息。

导入

from pettingzoo.sisl import pursuit_v4

动作

离散

Parallel API

手动控制

智能体

agents= ['pursuer_0', 'pursuer_1', ..., 'pursuer_7']

智能体

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.env(**kwargs)[source]
class pettingzoo.sisl.pursuit.pursuit.raw_env(*args, **kwargs)[source]
action_space(agent: str)[source]

接收智能体并返回该智能体的动作空间。

必须为相同的智能体名称返回相同的值

默认实现是返回 action_spaces 字典

close()[source]

关闭任何应释放的资源。

关闭渲染窗口、子进程、网络连接或任何其他应释放的资源。

observation_space(agent: str)[source]

接收智能体并返回该智能体的观察空间。

必须为相同的智能体名称返回相同的值

默认实现是返回 observation_spaces 字典

observe(agent)[source]

返回智能体当前可以进行的观察。

last() 调用此函数。

render()[source]

按照 self.render_mode 指定的方式渲染环境。

渲染模式可以是 human 以显示窗口。默认环境中的其他渲染模式包括返回 numpy 数组并受所有非经典环境支持的 ‘rgb_array’,以及返回打印字符串(经典环境特有)的 ‘ansi’

reset(seed=None, options=None)[source]

将环境重置到起始状态。

step(action)[source]

接受并执行环境中当前 agent_selection 的动作。

自动切换控制权给下一个智能体。