{
  "version": 1,
  "default_config_id": "machine-dog-isaaclab",
  "configs": [
    {
      "id": "machine-dog-isaaclab",
      "label": "Machine Dog / IsaacLab",
      "note": "四足机器人训练默认曲线，覆盖进度、奖励拆解和 PPO/估计器健康。",
      "match": {
        "project_ids": ["machine-dog"],
        "task_includes": ["IsaacLab", "Lite3", "Stairs", "Wave-C"],
        "run_includes": ["v9j", "pie", "rsl-rl"]
      },
      "groups": [
        {
          "title": "核心判断指标",
          "subtitle": "总奖励、存活、摔倒、速度误差",
          "curves": [
            {"key": "mean_reward", "label": "总奖励", "hint": "mean_reward", "digits": 2},
            {"key": "mean_episode_length", "label": "生存时长", "hint": "episode_length", "format": "integer"},
            {"key": "terrain_levels", "label": "地形等级", "hint": "terrain_levels", "digits": 3},
            {"key": "bad_orientation_2", "label": "姿态失败", "hint": "bad_orientation_2", "digits": 4},
            {"key": "Episode_Termination/time_out", "label": "超时比例", "hint": "time_out", "digits": 4},
            {"key": "Metrics/base_velocity/error_vel_xy", "label": "线速度误差", "hint": "error_vel_xy", "digits": 3},
            {"key": "Metrics/base_velocity/error_vel_yaw", "label": "转向误差", "hint": "error_vel_yaw", "digits": 3},
            {"key": "computation_steps_per_sec", "label": "训练吞吐", "hint": "steps/sec", "format": "integer"}
          ]
        },
        {
          "title": "奖励子组件",
          "subtitle": "跟踪、姿态、高度、动作平滑、接触",
          "curves": [
            {"key": "Episode_Reward/track_lin_vel_xy_exp", "label": "线速度跟踪", "hint": "track_lin_vel_xy", "digits": 3},
            {"key": "Episode_Reward/track_ang_vel_z_exp", "label": "角速度跟踪", "hint": "track_ang_vel_z", "digits": 3},
            {"key": "Episode_Reward/flat_orientation_l2", "label": "姿态惩罚", "hint": "orientation", "digits": 3},
            {"key": "Episode_Reward/base_height_low_relative", "label": "机身高度", "hint": "base_height", "digits": 3},
            {"key": "Episode_Reward/lin_vel_z_l2", "label": "垂直速度惩罚", "hint": "lin_vel_z", "digits": 3},
            {"key": "Episode_Reward/action_rate_l2", "label": "动作平滑", "hint": "action_rate", "digits": 3},
            {"key": "Episode_Reward/joint_power", "label": "关节功率", "hint": "joint_power", "digits": 4},
            {"key": "Episode_Reward/feet_air_time", "label": "摆腿时间", "hint": "feet_air_time", "digits": 3},
            {"key": "Episode_Reward/undesired_contacts", "label": "异常接触", "hint": "undesired_contacts", "digits": 3}
          ]
        },
        {
          "title": "PPO / 估计器健康",
          "subtitle": "loss、entropy、clip/KL 记录缺失时会直接显示为空",
          "curves": [
            {"key": "mean_value_function_loss", "label": "Value loss", "hint": "value_function_loss", "digits": 3},
            {"key": "mean_surrogate_loss", "label": "Policy loss", "hint": "surrogate_loss", "digits": 3},
            {"key": "mean_entropy_loss", "label": "Entropy", "hint": "entropy_loss", "digits": 3},
            {"key": "Curriculum/command_levels_lin_vel", "label": "线速度课程", "hint": "command_lin_vel", "digits": 3},
            {"key": "Curriculum/command_levels_ang_vel", "label": "角速度课程", "hint": "command_ang_vel", "digits": 3},
            {"key": "approx_kl", "label": "Approx KL", "hint": "approx_kl", "digits": 4},
            {"key": "clip_fraction", "label": "Clip fraction", "hint": "clip_fraction", "digits": 4}
          ]
        }
      ]
    },
    {
      "id": "machine-dog-collapse-debug",
      "label": "Machine Dog / 塌陷排查",
      "note": "用于定位奖励突然掉、姿态失败、课程推进或速度误差异常。",
      "match": {
        "project_ids": ["machine-dog"],
        "task_includes": ["IsaacLab", "Lite3"],
        "run_includes": ["collapse", "probe", "failed", "no_progress"]
      },
      "groups": [
        {
          "title": "训练是否还在变好",
          "subtitle": "奖励、存活、地形和吞吐",
          "curves": [
            {"key": "mean_reward", "label": "总奖励", "hint": "mean_reward", "digits": 2},
            {"key": "mean_episode_length", "label": "生存时长", "hint": "episode_length", "format": "integer"},
            {"key": "terrain_levels", "label": "地形等级", "hint": "terrain_levels", "digits": 3},
            {"key": "computation_steps_per_sec", "label": "训练吞吐", "hint": "steps/sec", "format": "integer"}
          ]
        },
        {
          "title": "失败信号",
          "subtitle": "姿态、超时、接触和速度误差",
          "curves": [
            {"key": "bad_orientation_2", "label": "姿态失败", "hint": "bad_orientation_2", "digits": 4},
            {"key": "Episode_Termination/time_out", "label": "超时比例", "hint": "time_out", "digits": 4},
            {"key": "Episode_Reward/undesired_contacts", "label": "异常接触", "hint": "undesired_contacts", "digits": 3},
            {"key": "Metrics/base_velocity/error_vel_xy", "label": "线速度误差", "hint": "error_vel_xy", "digits": 3},
            {"key": "Metrics/base_velocity/error_vel_yaw", "label": "转向误差", "hint": "error_vel_yaw", "digits": 3}
          ]
        },
        {
          "title": "奖励压力",
          "subtitle": "看策略是不是靠错误方式拿分",
          "curves": [
            {"key": "Episode_Reward/track_lin_vel_xy_exp", "label": "线速度跟踪", "hint": "track_lin_vel_xy", "digits": 3},
            {"key": "Episode_Reward/flat_orientation_l2", "label": "姿态惩罚", "hint": "orientation", "digits": 3},
            {"key": "Episode_Reward/base_height_low_relative", "label": "机身高度", "hint": "base_height", "digits": 3},
            {"key": "Episode_Reward/action_rate_l2", "label": "动作平滑", "hint": "action_rate", "digits": 3},
            {"key": "Episode_Reward/joint_power", "label": "关节功率", "hint": "joint_power", "digits": 4}
          ]
        }
      ]
    },
    {
      "id": "forestnav",
      "label": "ForestNav",
      "note": "森林导航任务关注成功率、碰撞、路径质量和规划耗时。",
      "match": {
        "project_ids": ["forestnav"],
        "task_includes": ["ForestNav", "forest", "navigation"],
        "run_includes": ["forestnav", "bucket_trial", "n3p", "voronoi", "hybrid"]
      },
      "groups": [
        {
          "title": "导航结果",
          "subtitle": "成功、碰撞、到达和回合质量",
          "curves": [
            {"key": "success_rate", "label": "成功率", "hint": "success_rate", "digits": 3},
            {"key": "collision_rate", "label": "碰撞率", "hint": "collision_rate", "digits": 3},
            {"key": "goal_reached_rate", "label": "到达率", "hint": "goal_reached", "digits": 3},
            {"key": "episode_reward", "label": "回合奖励", "hint": "episode_reward", "digits": 2}
          ]
        },
        {
          "title": "路径质量",
          "subtitle": "长度、平滑度、绕行和规划时间",
          "curves": [
            {"key": "path_length", "label": "路径长度", "hint": "path_length", "digits": 2},
            {"key": "path_smoothness", "label": "路径平滑度", "hint": "smoothness", "digits": 3},
            {"key": "detour_ratio", "label": "绕行比例", "hint": "detour_ratio", "digits": 3},
            {"key": "planning_time_ms", "label": "规划耗时", "hint": "planning_time_ms", "format": "integer"}
          ]
        }
      ]
    },
    {
      "id": "dqn",
      "label": "DQN",
      "note": "DQN 训练关注探索率、Q 值、loss 和 episode 级回报。",
      "match": {
        "project_ids": ["dqn"],
        "task_includes": ["DQN", "q-network"],
        "run_includes": ["dqn", "md-dqn", "qvalue"]
      },
      "groups": [
        {
          "title": "训练收益",
          "subtitle": "回报、成功率和回合长度",
          "curves": [
            {"key": "episode_reward", "label": "回合奖励", "hint": "episode_reward", "digits": 2},
            {"key": "mean_reward", "label": "平均奖励", "hint": "mean_reward", "digits": 2},
            {"key": "success_rate", "label": "成功率", "hint": "success_rate", "digits": 3},
            {"key": "episode_length", "label": "回合长度", "hint": "episode_length", "format": "integer"}
          ]
        },
        {
          "title": "学习状态",
          "subtitle": "loss、探索率、Q 值和回放池",
          "curves": [
            {"key": "loss", "label": "Loss", "hint": "loss", "digits": 4},
            {"key": "epsilon", "label": "Epsilon", "hint": "epsilon", "digits": 4},
            {"key": "q_value_mean", "label": "平均 Q 值", "hint": "q_value_mean", "digits": 3},
            {"key": "replay_buffer_size", "label": "Replay buffer", "hint": "buffer_size", "format": "integer"}
          ]
        }
      ]
    }
  ]
}
