ray.rllib.算法.算法配置.AlgorithmConfig.评估#

AlgorithmConfig.evaluation(*, evaluation_interval: int | None = <ray.rllib.utils.from_config._NotProvided object>, evaluation_duration: int | str | None = <ray.rllib.utils.from_config._NotProvided object>, evaluation_duration_unit: str | None = <ray.rllib.utils.from_config._NotProvided object>, evaluation_sample_timeout_s: float | None = <ray.rllib.utils.from_config._NotProvided object>, evaluation_parallel_to_training: bool | None = <ray.rllib.utils.from_config._NotProvided object>, evaluation_force_reset_envs_before_iteration: bool | None = <ray.rllib.utils.from_config._NotProvided object>, evaluation_config: ~ray.rllib.algorithms.algorithm_config.AlgorithmConfig | dict | None = <ray.rllib.utils.from_config._NotProvided object>, off_policy_estimation_methods: ~typing.Dict | None = <ray.rllib.utils.from_config._NotProvided object>, ope_split_batch_by_episode: bool | None = <ray.rllib.utils.from_config._NotProvided object>, evaluation_num_env_runners: int | None = <ray.rllib.utils.from_config._NotProvided object>, custom_evaluation_function: ~typing.Callable | None = <ray.rllib.utils.from_config._NotProvided object>, always_attach_evaluation_results=-1, evaluation_num_workers=-1) AlgorithmConfig[源代码]#

设置配置的评估设置。

参数:
  • evaluation_interval – 在每次 evaluation_interval 训练迭代时进行评估。评估统计数据将在“evaluation”指标键下报告。设置为 None(或 0)以禁用评估。

  • evaluation_duration – 每次 evaluation_interval 运行评估的持续时间。持续时间的单位可以通过 evaluation_duration_unit 设置为“episodes”(默认)或“timesteps”。如果在 evaluation_num_env_runners > 1 设置中使用多个评估工作线程(EnvRunners),则运行的 episodes/timesteps 数量将在这之间分配。如果 evaluation_parallel_to_training=True,可以使用特殊值“auto”。这是在尝试尽可能节省评估时间时的推荐方式。算法将通过评估工作线程运行尽可能多的 timesteps,同时不超过并行运行的训练步骤,从而不会在训练或评估工作线程上浪费任何空闲时间。当使用此设置(evaluation_duration="auto")时,强烈建议同时设置 evaluation_interval=1evaluation_force_reset_envs_before_iteration=True

  • evaluation_duration_unit – 用于计算评估持续时间的单位。可以是“episodes”(默认)或“timesteps”。请注意,如果 evaluation_duration="auto",则此设置将被忽略。

  • evaluation_sample_timeout_s – 在以下情况下,评估工作者的超时时间(以秒为单位)用于采样一个完整的情节:evaluation_duration != autoevaluation_duration_unit=episode。超过此时间后,用户将收到警告并获得如何解决问题的指示。

  • evaluation_parallel_to_training – 是否在调用 Algorithm.training_step() 时使用线程并行运行评估。默认=False。例如,对于 evaluation_interval=1 -> 在每次调用 Algorithm.train() 时,Algorithm.training_step()Algorithm.evaluate() 调用将并行运行。请注意,此设置虽然非常高效,因为它不会浪费额外的时间进行评估,但会导致评估结果比训练结果滞后一次迭代。这在选择一个好的检查点时非常重要。例如,如果第42次迭代报告了良好的评估 episode_return_mean,请注意这些结果是在第41次迭代训练的权重上取得的,因此您可能应该选择第41次迭代的检查点。

  • evaluation_force_reset_envs_before_iteration – 是否在迭代评估步骤开始之前强制重置所有环境(即使它们尚未完成)。将其设置为 True(默认值)将确保评估结果不会被实际上(至少部分)使用较早权重集实现的剧情节统计数据所污染。请注意,此设置仅在新 API 堆栈 w/ EnvRunners 和 ConnectorV2 上受支持(config.enable_rl_module_and_learner=Trueconfig.enable_env_runner_and_connector_v2=True)。

  • evaluation_config – 典型用法是将额外参数传递给评估环境创建者,并通过计算确定性动作来禁用探索。重要提示:策略梯度算法能够找到最优策略,即使这是一个随机的策略。在此处设置“explore=False”将导致评估工作线程不使用此最优策略!

  • off_policy_estimation_methods – 指定如何评估当前策略,以及任何可选的配置参数。这仅在读取离线经验时有效(“input”不是“sampler”)。可用键:{ope_method_name: {“type”: ope_type, …}},其中 ope_method_name 是用户定义的字符串,用于保存OPE结果,ope_type 可以是任何OffPolicyEstimator的子类,例如 ray.rllib.offline.estimators.is::ImportanceSampling 或您自己的自定义子类,或者是子类的完整类路径。您还可以在字典中添加额外的配置参数,传递给OffPolicyEstimator,例如 {“qreg_dr”: {“type”: DoublyRobust, “q_model_type”: “qreg”, “k”: 5}}

  • ope_split_batch_by_episode – 是否使用 SampleBatch.split_by_episode() 在估计ope指标之前将输入批次按剧集分割。对于强盗问题,您应该将其设置为False以提高ope评估速度。对于强盗问题,不按剧集分割是可以的,因为每个记录已经是一个时间步。默认值为True。

  • evaluation_num_env_runners – 用于评估的并行 EnvRunner 数量。请注意,默认情况下此值设置为零,这意味着评估将在算法进程中运行(仅当 evaluation_interval 不为 0 或 None 时)。如果增加此值,将增加算法的 Ray 资源使用量,因为评估工作线程是与用于采样训练数据的 EnvRunner 分开创建的。

  • custom_evaluation_function – 自定义评估方法。这必须是一个签名函数 (algo: Algorithm, eval_workers: EnvRunnerGroup) -> (metrics: dict, env_steps: int, agent_steps: int) (如果 enable_env_runner_and_connector_v2=True,则为 metrics: dict),其中 env_stepsagent_steps 定义了评估迭代期间采样的步数。请参阅 Algorithm.evaluate() 方法以查看默认实现。算法保证在此函数被调用之前,所有评估工作器都具有最新的策略状态。

返回:

这个更新的 AlgorithmConfig 对象。