File size: 3,200 Bytes
604e535
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
"""Method registry for paper-facing experiments."""

from __future__ import annotations

from dataclasses import dataclass


@dataclass(frozen=True)
class MethodSpec:
    name: str
    display_name: str
    category: str
    kind: str
    role: str
    notes: str


METHODS: dict[str, MethodSpec] = {
    "flowmo": MethodSpec(
        name="flowmo",
        display_name="FlowMo",
        category="A_learned_world_model",
        kind="learned_world_model",
        role="proposed",
        notes="Proposed flow-momentum world model with short state history, long drift context, and zero-context residual transition.",
    ),
    "leworldmodel": MethodSpec(
        name="leworldmodel",
        display_name="LeWorldModel",
        category="A_learned_world_model",
        kind="learned_world_model",
        role="external_style_baseline",
        notes="JEPA-like latent predictor under the shared clean-image rollout protocol.",
    ),
    "planet": MethodSpec(
        name="planet",
        display_name="PlaNet RSSM",
        category="A_learned_world_model",
        kind="learned_world_model",
        role="external_style_baseline",
        notes="Recurrent state-space dynamics world model under the shared clean-image rollout protocol.",
    ),
    "tdmpc2": MethodSpec(
        name="tdmpc2",
        display_name="TD-MPC2 Dynamics",
        category="A_learned_world_model",
        kind="learned_world_model",
        role="external_style_baseline",
        notes="Latent dynamics world model under the shared clean-image rollout protocol.",
    ),
    "pid_los_controller": MethodSpec(
        name="pid_los_controller",
        display_name="PID/LOS controller",
        category="B_traditional_controller",
        kind="traditional_controller",
        role="planning_baseline",
        notes="Classical image-pose-based line-of-sight controller for downstream planning comparison.",
    ),
    "physics_mpc_no_flow": MethodSpec(
        name="physics_mpc_no_flow",
        display_name="Physics MPC No-Flow",
        category="B_traditional_controller",
        kind="traditional_controller",
        role="planning_baseline",
        notes="Classical controller without external-flow compensation.",
    ),
    "current_estimator_mpc": MethodSpec(
        name="current_estimator_mpc",
        display_name="Current-Estimator MPC",
        category="B_traditional_controller",
        kind="traditional_controller",
        role="planning_baseline",
        notes="Classical controller using recent image-pose drift estimate.",
    ),
    "oracle_flow_mpc": MethodSpec(
        name="oracle_flow_mpc",
        display_name="Oracle-Flow MPC",
        category="B_traditional_controller",
        kind="traditional_controller",
        role="oracle_planning_upper_bound",
        notes="Oracle controller with true local flow; used only as a planning upper/reference bound.",
    ),
}


PAPER_LEARNED_METHODS = [name for name, spec in METHODS.items() if spec.category == "A_learned_world_model"]
TRADITIONAL_METHODS = [name for name, spec in METHODS.items() if spec.kind == "traditional_controller"]


def display_name(method: str) -> str:
    return METHODS[method].display_name