修改policy_mapping_fn结果不符合预期

【Ray使用环境】 自己试运行
【Ray版本和类库】 目前已知在python 3.7,ray 2.7.2会出现此问题,不确定在其他版本是否有类似问题
【使用现场】
下面的代码由ray官网的例子修改而来,原代码见https://github.com/ray-project/ray/blob/master/rllib/examples/multi_agent_independent_learning.py

from ray.tune.registry import register_env
from ray.rllib.algorithms.ppo import PPOConfig
from ray.rllib.env.wrappers.pettingzoo_env import PettingZooEnv
from pettingzoo.sisl import waterworld_v4

from pprint import pprint

if __name__ == "__main__":

    def env_creator(args):
        return PettingZooEnv(waterworld_v4.env())

    env = env_creator({})
    register_env("waterworld", env_creator)

    config = (
        PPOConfig()
        .environment("waterworld")
        .resources(num_gpus=1)
        .rollouts(num_rollout_workers=2)
        .multi_agent(
            policies={"policy_" + str(i) for i in range(len(env.get_agent_ids()))},
        )
    )

    algo = config.build()

    for i in range(100):
        print("setting policy to " + str(i % 2))
        def policy_mapping_fn(agent_id, *args, **kwargs):
            return "policy_" + str(i % 2)
        algo.workers.foreach_worker(lambda w: w.set_policy_mapping_fn(policy_mapping_fn))
        print(i)
        pprint(algo.train())

【问题复现】
以上代码预期实现的效果是,当i为偶数时,环境中所有的agent都使用policy_0,i为奇数时,环境中所有的agent都使用policy_1
但实际上,当i=1时,algo.train()的结果中,既包含了policy_1的相关信息,也包含了policy_0的相关信息
因此我也无法确定,当i=1时,调用algo.train()后究竟哪个policy被训练了,训练时使用的是哪个policy生成的数据。

我之前有尝试过另一种写法:
我自定义了一个新的Algo类,继承自ray.rllib.algorithms.ppo.PPO,并修改了它的training_step函数,在这个函数中实现了类似的set_policy_mapping_fn的操作
但是结果类似