Multiwalker¶

此环境是 SISL 环境 的一部分。请先阅读该页面以获取一般信息。
导入 |
|
---|---|
动作 |
连续 |
Parallel API |
是 |
手动控制 |
否 |
智能体 |
|
智能体 |
3 |
动作形状 |
(4,) |
动作值 |
(-1, 1) |
观测形状 |
(31,) |
观测值 |
[-inf,inf] |
在此环境中,双足机器人试图将放置在其顶部的包裹向右运输。默认情况下,机器人数量设置为 3。
每个步行者获得的奖励等于包裹相对于前一时间步的位置变化,乘以 forward_reward
缩放因子。可达到的最大总奖励取决于地形长度;作为参考,对于地形长度为 75 的情况,在最优策略下的总奖励约为 300。
如果包裹掉落,或者包裹超出地形左边缘,则环境结束。默认情况下,如果任何步行者掉落,环境也会结束。在所有这些情况下,每个步行者都会获得 -100 的奖励。如果包裹从地形右边缘掉落,环境也会结束,奖励为 0。
当步行者掉落时,它会受到额外的 -10 惩罚。如果 terminate_on_fall = False
,则环境不会因步行者掉落而结束,而只在包裹掉落时结束。如果 remove_on_fall = True
,则掉落的步行者会从环境中移除。智能体还会因头部角度变化而受到微小的塑形奖励,该奖励值为头部角度变化乘以 -5,以保持头部水平。
如果选择 shared_reward
(默认为 True),则智能体的个体奖励会被平均,得到一个单一的平均奖励,并返回给所有智能体。
每个步行者对其两条腿的两个关节施加力,形成一个由 4 个元素向量表示的连续动作空间。每个步行者通过一个包含模拟噪声激光雷达数据的 31 个元素向量来观测环境和邻近步行者的信息。环境持续时间默认上限为 500 帧(可通过 max_cycles
设置控制)。
观测空间¶
每个智能体都会收到一个观测,该观测由其腿部和关节的各种物理属性以及机器人正前方和正下方空间的激光雷达读数组成。观测还包括有关邻近步行者和包裹的信息。邻居和包裹的观测具有由 position_noise
和 angle_noise
控制的正态分布信号噪声。对于没有邻居的步行者,有关邻居位置的观测为零。
此表列出了观测空间
索引:[开始, 结束) |
描述 |
值 |
---|---|---|
0 |
船体角度 |
[0, 2*pi] |
1 |
船体角速度 |
[-inf, inf] |
2 |
X 速度 |
[-1, 1] |
3 |
Y 速度 |
[-1, 1] |
4 |
髋关节 1 角度 |
[-inf, inf] |
5 |
髋关节 1 速度 |
[-inf, inf] |
6 |
膝关节 1 角度 |
[-inf, inf] |
7 |
膝关节 1 速度 |
[-inf, inf] |
8 |
腿部 1 地面接触标志 |
{0, 1} |
9 |
髋关节 1 角度 |
[-inf, inf] |
10 |
髋关节 2 速度 |
[-inf, inf] |
11 |
膝关节 2 角度 |
[-inf, inf] |
12 |
膝关节 2 速度 |
[-inf, inf] |
13 |
腿部 2 地面接触标志 |
{0, 1} |
14-23 |
激光雷达传感器读数 |
[-inf, inf] |
24 |
左邻居相对 X 位置(最左边步行者为 0.0)(噪声) |
[-inf, inf] |
25 |
左邻居相对 Y 位置(最左边步行者为 0.0)(噪声) |
[-inf, inf] |
26 |
右邻居相对 X 位置(最右边步行者为 0.0)(噪声) |
[-inf, inf] |
27 |
右邻居相对 Y 位置(最右边步行者为 0.0)(噪声) |
[-inf, inf] |
28 |
步行者相对于包裹的 X 位置(左边缘为 0,右边缘为 1)(噪声) |
[-inf, inf] |
29 |
步行者相对于包裹的 Y 位置(噪声) |
[-inf, inf] |
30 |
包裹角度(噪声) |
[-inf, inf] |
参数¶
multiwalker_v9.env(n_walkers=3, position_noise=1e-3, angle_noise=1e-3, forward_reward=1.0, terminate_reward=-100.0, fall_reward=-10.0, shared_reward=True,
terminate_on_fall=True, remove_on_fall=True, terrain_length=200, max_cycles=500)
n_walkers
:环境中双足步行者智能体的数量
position_noise
:应用于邻居和包裹位置观测的噪声
angle_noise
:应用于邻居和包裹旋转观测的噪声
forward_reward
:获得的奖励是 forward_reward
* 包裹位置变化
fall_reward
:智能体掉落时应用的奖励
shared_reward
:奖励是分配给所有智能体还是单独分配
terminate_reward
:如果步行者未能将包裹运送到地形右边缘,则应用于每个步行者的奖励
terminate_on_fall
:如果为 True
(默认),则单个步行者掉落会导致所有智能体结束,并且它们都将获得额外的 terminate_reward
。如果为 False
,则只有掉落的智能体获得 fall_reward
,其余智能体不会结束,即环境继续运行。
remove_on_fall
:步行者掉落时移除它(仅当 terminate_on_fall
为 False 时有效)
terrain_length
:地形长度,以步数计
max_cycles
:在 max_cycles 步后,所有智能体将返回 done
版本历史¶
v8:替换 local_ratio,修复奖励,将地形长度作为参数和文档 (1.15.0)
v7:修复步行者碰撞问题 (1.8.2)
v6:修复观测空间并大幅改进代码质量 (1.5.0)
v5:修复奖励结构,添加参数 (1.4.2)
v4:杂项错误修复 (1.4.0)
v3:修复观测空间 (1.3.3)
v2:各种修复和环境参数更改 (1.3.1)
v1:修复所有环境处理过早死亡的方式 (1.3.0)
v0:初始版本发布 (1.0.0)
用法¶
AEC¶
from pettingzoo.sisl import multiwalker_v9
env = multiwalker_v9.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 multiwalker_v9
env = multiwalker_v9.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.multiwalker.multiwalker.raw_env(*args, **kwargs)[source]¶
-
- observation_space(agent)[source]¶
接收智能体并返回该智能体的观测空间。
对于相同的智能体名称,必须返回相同的值
默认实现是返回 observation_spaces 字典