追逐

../../../_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 个红色追逐者智能体被放置在一个 16 x 16 的网格中,网格中心有一个白色障碍物。逃脱者随机移动,而追逐者受控制。每当追逐者完全包围一个逃脱者时,每个包围的智能体都会获得 5 的奖励,并且逃脱者从环境中移除。追逐者每次接触逃脱者时也会获得 0.01 的奖励。追逐者具有离散动作空间,包括上、下、左、右和停留。每个追逐者观察以自身为中心的 7 x 7 网格,这由红色追逐者智能体周围的橙色框表示。当所有逃脱者都被捕获或完成 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 步之后,所有智能体将返回 done

版本历史

  • 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 以显示窗口。默认环境中的其他渲染模式包括 ‘rgb_array’,它返回一个 numpy 数组,并受到经典环境之外所有环境的支持;以及 ‘ansi’,它返回打印的字符串(经典环境特有)。

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

将环境重置到起始状态。

step(action)[source]

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

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