TwoQuarks commited on
Commit
ccba775
·
verified ·
1 Parent(s): a4aa64a

Upload 100 files

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. .gitattributes +24 -0
  2. Down/AntiDown/envs/corrupted_valley.py +132 -0
  3. Down/AntiDown/exp/plot_corrupted_valley_results.py +135 -0
  4. Down/AntiDown/exp/run_corrupted_valley_tabular.py +304 -0
  5. Down/AntiDown/levo/levo_q_tabular.py +71 -0
  6. Down/AntiDown/levo/levo_thinking_ensemble.py +104 -0
  7. Down/AntiDown/levo/policies.py +101 -0
  8. Down/AntiDown/utils/logging.py +63 -0
  9. Down/MODEL.md +96 -0
  10. Down/README.md +64 -0
  11. Down/down/envs/env_paradox.py +193 -0
  12. Down/down/exp/plot_paradox_results.py +82 -0
  13. Down/down/exp/run_paradox_ppo_hybrid.py +112 -0
  14. Down/down/exp/run_paradox_tabular.py +124 -0
  15. Down/down/levo/agent_levo_paradox.py +399 -0
  16. Down/down/results/paradox_ppo_results.csv +1201 -0
  17. Down/down/results/paradox_tabular_results.csv +0 -0
  18. Down/graphics/graphics/antidown_corrupted_valley_reward.png +0 -0
  19. Down/graphics/graphics/antidown_corrupted_valley_valley_visits.png +0 -0
  20. Down/graphics/graphics/down_paradox_tabular_reward.png +3 -0
  21. Down/graphics/graphics/down_paradox_tabular_rho.png +0 -0
  22. Down/graphics/graphics/dual_down_antidown_episode_return.png +3 -0
  23. Down/graphics/graphics/figure_failures.png +0 -0
  24. Down/graphics/graphics/figure_reward.png +0 -0
  25. Down/graphics/index.html +240 -0
  26. Down/plot_dual_down_antidown.py +131 -0
  27. Down/results/antidown_corrupted_valley_tabular.csv +0 -0
  28. Down/results/down_paradox_tabular_results.csv +0 -0
  29. Down/run_all.bat +3 -0
  30. Down/run_all.py +67 -0
  31. Down/run_all.sh +3 -0
  32. README.md +14 -17
  33. Strange/AntiStrange/envs/__init__.py +1 -0
  34. Strange/AntiStrange/envs/antihypothesis_lab_env.py +150 -0
  35. Strange/AntiStrange/exp/__init__.py +1 -0
  36. Strange/AntiStrange/exp/plot_results.py +64 -0
  37. Strange/AntiStrange/exp/run_antistrange_hypothesis_lab.py +79 -0
  38. Strange/AntiStrange/graphics/antistrange_H_swarm.png +0 -0
  39. Strange/AntiStrange/graphics/antistrange_S_t.png +0 -0
  40. Strange/AntiStrange/graphics/antistrange_T.png +0 -0
  41. Strange/AntiStrange/graphics/antistrange_diversity.png +3 -0
  42. Strange/AntiStrange/graphics/antistrange_episode_return.png +3 -0
  43. Strange/AntiStrange/graphics/antistrange_phase.png +3 -0
  44. Strange/AntiStrange/graphics/antistrange_progress.png +3 -0
  45. Strange/AntiStrange/graphics/antistrange_stability.png +3 -0
  46. Strange/AntiStrange/graphics/antistrange_w_t.png +0 -0
  47. Strange/AntiStrange/graphics/index.html +147 -0
  48. Strange/AntiStrange/levo/__init__.py +1 -0
  49. Strange/AntiStrange/levo/antistrange_swarm.py +359 -0
  50. Strange/AntiStrange/results/antistrange_hypothesis_lab.csv +0 -0
.gitattributes CHANGED
@@ -33,3 +33,27 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ Down/graphics/graphics/down_paradox_tabular_reward.png filter=lfs diff=lfs merge=lfs -text
37
+ Down/graphics/graphics/dual_down_antidown_episode_return.png filter=lfs diff=lfs merge=lfs -text
38
+ Strange/AntiStrange/graphics/antistrange_diversity.png filter=lfs diff=lfs merge=lfs -text
39
+ Strange/AntiStrange/graphics/antistrange_episode_return.png filter=lfs diff=lfs merge=lfs -text
40
+ Strange/AntiStrange/graphics/antistrange_phase.png filter=lfs diff=lfs merge=lfs -text
41
+ Strange/AntiStrange/graphics/antistrange_progress.png filter=lfs diff=lfs merge=lfs -text
42
+ Strange/AntiStrange/graphics/antistrange_stability.png filter=lfs diff=lfs merge=lfs -text
43
+ Strange/graphics/graphics/antistrange_diversity.png filter=lfs diff=lfs merge=lfs -text
44
+ Strange/graphics/graphics/antistrange_episode_return.png filter=lfs diff=lfs merge=lfs -text
45
+ Strange/graphics/graphics/antistrange_phase.png filter=lfs diff=lfs merge=lfs -text
46
+ Strange/graphics/graphics/antistrange_progress.png filter=lfs diff=lfs merge=lfs -text
47
+ Strange/graphics/graphics/antistrange_stability.png filter=lfs diff=lfs merge=lfs -text
48
+ Strange/graphics/graphics/dual_episode_return.png filter=lfs diff=lfs merge=lfs -text
49
+ Strange/graphics/graphics/dual_stability.png filter=lfs diff=lfs merge=lfs -text
50
+ Strange/graphics/graphics/strange_diversity.png filter=lfs diff=lfs merge=lfs -text
51
+ Strange/graphics/graphics/strange_episode_return.png filter=lfs diff=lfs merge=lfs -text
52
+ Strange/graphics/graphics/strange_phase.png filter=lfs diff=lfs merge=lfs -text
53
+ Strange/graphics/graphics/strange_progress.png filter=lfs diff=lfs merge=lfs -text
54
+ Strange/graphics/graphics/strange_stability.png filter=lfs diff=lfs merge=lfs -text
55
+ Strange/strange/graphics/strange_diversity.png filter=lfs diff=lfs merge=lfs -text
56
+ Strange/strange/graphics/strange_episode_return.png filter=lfs diff=lfs merge=lfs -text
57
+ Strange/strange/graphics/strange_phase.png filter=lfs diff=lfs merge=lfs -text
58
+ Strange/strange/graphics/strange_progress.png filter=lfs diff=lfs merge=lfs -text
59
+ Strange/strange/graphics/strange_stability.png filter=lfs diff=lfs merge=lfs -text
Down/AntiDown/envs/corrupted_valley.py ADDED
@@ -0,0 +1,132 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import math
2
+ from dataclasses import dataclass
3
+ from typing import Optional, Tuple, Dict, Any
4
+
5
+ import numpy as np
6
+
7
+
8
+ @dataclass
9
+ class StepResult:
10
+ obs: int
11
+ reward: float
12
+ done: bool
13
+ info: Dict[str, Any]
14
+
15
+
16
+ class CorruptedValleyEnv:
17
+ """
18
+ 7x7 gridworld with:
19
+ - Start S at bottom-left (row=6, col=0)
20
+ - Goal G at top-right (row=0, col=6)
21
+ - Corrupted valley V in the center of the grid.
22
+
23
+ Phases:
24
+ 1: Valley is falsely attractive (positive bonus).
25
+ 2: Valley is corrected (neutral or mildly negative).
26
+ 3: Same rewards as phase 2. Intended for noisy-training experiments.
27
+
28
+ Observation is a single integer state index in [0, n_states).
29
+ Actions: 0=up, 1=right, 2=down, 3=left.
30
+ """
31
+
32
+ def __init__(
33
+ self,
34
+ seed: Optional[int] = None,
35
+ grid_size: int = 7,
36
+ valley_reward_phase1: float = 2.0,
37
+ valley_reward_phase2: float = -0.5,
38
+ step_penalty: float = -0.01,
39
+ max_steps: int = 50,
40
+ phase: int = 1,
41
+ ) -> None:
42
+ self.grid_size = grid_size
43
+ self.n_states = grid_size * grid_size
44
+ self.n_actions = 4
45
+
46
+ self.valley_reward_phase1 = valley_reward_phase1
47
+ self.valley_reward_phase2 = valley_reward_phase2
48
+ self.step_penalty = step_penalty
49
+ self.max_steps = max_steps
50
+
51
+ self.start_pos = (grid_size - 1, 0)
52
+ self.goal_pos = (0, grid_size - 1)
53
+
54
+ self.rng = np.random.default_rng(seed)
55
+ self.phase = phase
56
+
57
+ # center 3x3 block as valley
58
+ c = grid_size // 2
59
+ self.valley_cells = {
60
+ (r, c2)
61
+ for r in range(c - 1, c + 2)
62
+ for c2 in range(c - 1, c + 2)
63
+ }
64
+
65
+ self.pos: Tuple[int, int] = self.start_pos
66
+ self.steps = 0
67
+
68
+ def _state_from_pos(self, pos: Tuple[int, int]) -> int:
69
+ r, c = pos
70
+ return r * self.grid_size + c
71
+
72
+ def _obs(self) -> int:
73
+ return self._state_from_pos(self.pos)
74
+
75
+ def reset(self) -> int:
76
+ self.pos = self.start_pos
77
+ self.steps = 0
78
+ return self._obs()
79
+
80
+ def set_phase(self, phase: int) -> None:
81
+ if phase not in (1, 2, 3):
82
+ raise ValueError(f"Invalid phase: {phase}")
83
+ self.phase = phase
84
+
85
+ def step(self, action: int) -> StepResult:
86
+ self.steps += 1
87
+
88
+ r, c = self.pos
89
+ if action == 0: # up
90
+ r -= 1
91
+ elif action == 1: # right
92
+ c += 1
93
+ elif action == 2: # down
94
+ r += 1
95
+ elif action == 3: # left
96
+ c -= 1
97
+
98
+ # clamp to grid
99
+ r = max(0, min(self.grid_size - 1, r))
100
+ c = max(0, min(self.grid_size - 1, c))
101
+ self.pos = (r, c)
102
+
103
+ reward = self.step_penalty
104
+ done = False
105
+ info: Dict[str, Any] = {}
106
+
107
+ in_valley = self.pos in self.valley_cells
108
+ info["valley"] = in_valley
109
+
110
+ if self.pos == self.goal_pos:
111
+ reward += 1.0
112
+ done = True
113
+ info["terminal"] = "goal"
114
+ elif in_valley:
115
+ if self.phase == 1:
116
+ reward += self.valley_reward_phase1
117
+ else:
118
+ reward += self.valley_reward_phase2
119
+
120
+ if self.steps >= self.max_steps and not done:
121
+ done = True
122
+ info["terminal"] = "timeout"
123
+
124
+ return StepResult(
125
+ obs=self._obs(),
126
+ reward=reward,
127
+ done=done,
128
+ info=info,
129
+ )
130
+
131
+ def sample_action(self) -> int:
132
+ return self.rng.integers(0, self.n_actions)
Down/AntiDown/exp/plot_corrupted_valley_results.py ADDED
@@ -0,0 +1,135 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ Plot results for the Corrupted Valley tabular experiment.
3
+
4
+ Expects a CSV file created by `exp/run_corrupted_valley_tabular.py` with columns:
5
+ phase, phase_tag, episode, agent, total_reward, valley_visits
6
+ """
7
+
8
+ # --- twoquarks bootstrap (path-stable imports) ---
9
+ import sys
10
+ from pathlib import Path
11
+ _ROOT = Path(__file__).resolve().parents[1] # project root (sibling of exp/)
12
+ if str(_ROOT) not in sys.path:
13
+ sys.path.insert(0, str(_ROOT))
14
+ # -------------------------------------------------
15
+
16
+
17
+ import csv
18
+ import os
19
+ from collections import defaultdict
20
+ from typing import Dict, List, Tuple
21
+
22
+ import matplotlib.pyplot as plt
23
+
24
+
25
+ RESULTS_DIR = Path(os.environ.get("TWOQUARKS_RESULTS_DIR", (Path(__file__).resolve().parent.parent / "results").as_posix()))
26
+ RESULTS_CSV = str(RESULTS_DIR / "antidown_corrupted_valley_tabular.csv")
27
+ OUT_DIR = Path(os.environ.get("TWOQUARKS_GRAPHICS_DIR", (Path(__file__).resolve().parent.parent / "graphics").as_posix()))
28
+ OUT_DIR.mkdir(parents=True, exist_ok=True)
29
+ OUT_PREFIX = str(OUT_DIR / "antidown_corrupted_valley_")
30
+
31
+
32
+ def load_results(path: str) -> List[Dict[str, str]]:
33
+ rows: List[Dict[str, str]] = []
34
+ with open(path, mode="r", newline="") as f:
35
+ reader = csv.DictReader(f)
36
+ for row in reader:
37
+ rows.append(row)
38
+ return rows
39
+
40
+
41
+ def build_global_index(rows: List[Dict[str, str]]) -> Tuple[Dict[int, int], Dict[int, Dict[str, List[Tuple[int, float, float]]]]]:
42
+ """
43
+ Returns:
44
+ phase_to_max_ep: phase -> max episode index
45
+ data: phase -> agent -> list of (global_ep, total_reward, valley_visits)
46
+ """
47
+ phase_to_eps: Dict[int, List[int]] = defaultdict(list)
48
+ for r in rows:
49
+ phase = int(r["phase"])
50
+ ep = int(r["episode"])
51
+ phase_to_eps[phase].append(ep)
52
+
53
+ phase_to_max_ep: Dict[int, int] = {
54
+ phase: max(eps) + 1 for phase, eps in phase_to_eps.items()
55
+ }
56
+
57
+ data: Dict[int, Dict[str, List[Tuple[int, float, float]]]] = defaultdict(
58
+ lambda: defaultdict(list)
59
+ )
60
+
61
+ for r in rows:
62
+ phase = int(r["phase"])
63
+ agent = r["agent"]
64
+ ep = int(r["episode"])
65
+ total_reward = float(r["total_reward"])
66
+ valley_visits = float(r["valley_visits"])
67
+ max_ep = phase_to_max_ep[phase]
68
+ global_ep = (phase - 1) * max_ep + ep
69
+ data[phase][agent].append((global_ep, total_reward, valley_visits))
70
+
71
+ return phase_to_max_ep, data
72
+
73
+
74
+ def plot_metric(
75
+ data: Dict[int, Dict[str, List[Tuple[int, float, float]]]],
76
+ metric_index: int,
77
+ ylabel: str,
78
+ out_path: str,
79
+ ) -> None:
80
+ """
81
+ metric_index: 1 for total_reward, 2 for valley_visits.
82
+ """
83
+ plt.figure()
84
+
85
+ # merge across phases, keeping breaks in the global index
86
+ agent_to_xy: Dict[str, Tuple[List[int], List[float]]] = {}
87
+
88
+ for phase, agents in sorted(data.items()):
89
+ for agent, triples in agents.items():
90
+ xs = [t[0] for t in triples]
91
+ ys = [t[metric_index] for t in triples]
92
+ if agent not in agent_to_xy:
93
+ agent_to_xy[agent] = ([], [])
94
+ agent_to_xy[agent][0].extend(xs)
95
+ agent_to_xy[agent][1].extend(ys)
96
+
97
+ for agent, (xs, ys) in agent_to_xy.items():
98
+ # sort by x
99
+ pairs = sorted(zip(xs, ys), key=lambda p: p[0])
100
+ xs_sorted = [p[0] for p in pairs]
101
+ ys_sorted = [p[1] for p in pairs]
102
+ plt.plot(xs_sorted, ys_sorted, label=agent)
103
+
104
+ plt.xlabel("global episode index")
105
+ plt.ylabel(ylabel)
106
+ plt.legend()
107
+ plt.tight_layout()
108
+ plt.savefig(out_path)
109
+ plt.close()
110
+
111
+
112
+ def main() -> None:
113
+ if not os.path.exists(RESULTS_CSV):
114
+ raise FileNotFoundError(f"Results file not found: {RESULTS_CSV}")
115
+
116
+ rows = load_results(RESULTS_CSV)
117
+ _, data = build_global_index(rows)
118
+
119
+ plot_metric(
120
+ data,
121
+ metric_index=1,
122
+ ylabel="total reward per episode",
123
+ out_path=OUT_PREFIX + "reward.png",
124
+ )
125
+
126
+ plot_metric(
127
+ data,
128
+ metric_index=2,
129
+ ylabel="valley visits per episode",
130
+ out_path=OUT_PREFIX + "valley_visits.png",
131
+ )
132
+
133
+
134
+ if __name__ == "__main__":
135
+ main()
Down/AntiDown/exp/run_corrupted_valley_tabular.py ADDED
@@ -0,0 +1,304 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ Tabular experiments in the Corrupted Valley Gridworld.
3
+
4
+ Agents:
5
+ - EpsGreedyQAgent (baseline)
6
+ - SoftmaxBoltzmannAgent
7
+ - LevoQTabularAgent
8
+ - LevoThinkingEnsembleAgent
9
+
10
+ Phases:
11
+ 1) Corrupted reward in the valley (falsely attractive).
12
+ 2) Corrected reward.
13
+ 3) Corrected reward + noisy TD-updates for LevoThinking heads.
14
+ """
15
+
16
+ # --- twoquarks bootstrap (path-stable imports) ---
17
+ import sys
18
+ from pathlib import Path
19
+ _ROOT = Path(__file__).resolve().parents[1] # project root (sibling of exp/)
20
+ if str(_ROOT) not in sys.path:
21
+ sys.path.insert(0, str(_ROOT))
22
+ # -------------------------------------------------
23
+
24
+
25
+ import os
26
+ from typing import Dict, List, Optional, Iterable
27
+
28
+ import numpy as np
29
+
30
+ from envs.corrupted_valley import CorruptedValleyEnv
31
+ from levo.levo_q_tabular import LevoQTabularAgent
32
+ from levo.levo_thinking_ensemble import LevoThinkingEnsembleAgent
33
+ from utils.logging import CSVLogger
34
+
35
+
36
+ class EpsGreedyQAgent:
37
+ def __init__(
38
+ self,
39
+ n_states: int,
40
+ n_actions: int,
41
+ epsilon: float = 0.1,
42
+ gamma: float = 0.99,
43
+ alpha: float = 0.1,
44
+ name: str = "EpsGreedy",
45
+ ) -> None:
46
+ self.n_states = n_states
47
+ self.n_actions = n_actions
48
+ self.epsilon = epsilon
49
+ self.gamma = gamma
50
+ self.alpha = alpha
51
+ self.name = name
52
+ self.Q = np.zeros((n_states, n_actions), dtype=float)
53
+
54
+ def select_action(self, state: int, rng: np.random.Generator) -> int:
55
+ if rng.random() < self.epsilon:
56
+ return int(rng.integers(0, self.n_actions))
57
+ q_s = self.Q[state]
58
+ return int(rng.choice(np.flatnonzero(q_s == q_s.max())))
59
+
60
+ def update(self, s: int, a: int, r: float, s_next: int, done: bool) -> None:
61
+ q_sa = self.Q[s, a]
62
+ if done:
63
+ target = r
64
+ else:
65
+ target = r + self.gamma * float(self.Q[s_next].max())
66
+ td = target - q_sa
67
+ self.Q[s, a] = q_sa + self.alpha * td
68
+
69
+
70
+ class SoftmaxBoltzmannAgent:
71
+ def __init__(
72
+ self,
73
+ n_states: int,
74
+ n_actions: int,
75
+ tau: float = 0.5,
76
+ gamma: float = 0.99,
77
+ alpha: float = 0.1,
78
+ name: str = "Softmax",
79
+ ) -> None:
80
+ self.n_states = n_states
81
+ self.n_actions = n_actions
82
+ self.tau = tau
83
+ self.gamma = gamma
84
+ self.alpha = alpha
85
+ self.name = name
86
+ self.Q = np.zeros((n_states, n_actions), dtype=float)
87
+
88
+ def _softmax(self, q_s: np.ndarray) -> np.ndarray:
89
+ q = q_s / max(self.tau, 1e-8)
90
+ q = q - np.max(q)
91
+ ex = np.exp(q)
92
+ s = ex.sum()
93
+ if s <= 0.0:
94
+ return np.ones_like(ex) / len(ex)
95
+ return ex / s
96
+
97
+ def select_action(self, state: int, rng: np.random.Generator) -> int:
98
+ probs = self._softmax(self.Q[state])
99
+ return int(rng.choice(self.n_actions, p=probs))
100
+
101
+ def update(self, s: int, a: int, r: float, s_next: int, done: bool) -> None:
102
+ q_sa = self.Q[s, a]
103
+ if done:
104
+ target = r
105
+ else:
106
+ target = r + self.gamma * float(self.Q[s_next].max())
107
+ td = target - q_sa
108
+ self.Q[s, a] = q_sa + self.alpha * td
109
+
110
+
111
+ def run_episode(
112
+ env: CorruptedValleyEnv,
113
+ agent,
114
+ phase_id: int,
115
+ episode_idx: int,
116
+ logger: CSVLogger,
117
+ rng: np.random.Generator,
118
+ noisy_heads: Optional[Iterable[int]] = None,
119
+ noise_std: float = 0.0,
120
+ ) -> None:
121
+ obs = env.reset()
122
+ total_reward = 0.0
123
+ valley_visits = 0
124
+ done = False
125
+
126
+ while not done:
127
+ action = agent.select_action(obs, rng=rng)
128
+ step = env.step(action)
129
+ next_obs = step.obs
130
+ reward = step.reward
131
+ done = step.done
132
+ info = step.info
133
+
134
+ total_reward += reward
135
+ if info.get("valley", False):
136
+ valley_visits += 1
137
+
138
+ if isinstance(agent, LevoThinkingEnsembleAgent):
139
+ agent.update(
140
+ obs,
141
+ action,
142
+ reward,
143
+ next_obs,
144
+ done,
145
+ noisy_heads=noisy_heads,
146
+ noise_std=noise_std,
147
+ rng=rng,
148
+ )
149
+ else:
150
+ agent.update(obs, action, reward, next_obs, done)
151
+
152
+ obs = next_obs
153
+
154
+ logger.log(
155
+ {
156
+ "phase": phase_id,
157
+ "phase_tag": f"phase{phase_id}",
158
+ "episode": episode_idx,
159
+ "agent": agent.name,
160
+ "total_reward": total_reward,
161
+ "valley_visits": valley_visits,
162
+ }
163
+ )
164
+
165
+
166
+ def run_phase(
167
+ env_seed_base: int,
168
+ env_seed_offset: int,
169
+ phase_id: int,
170
+ n_episodes: int,
171
+ agents: List,
172
+ logger: CSVLogger,
173
+ noisy_heads_spec: Optional[Iterable[int]] = None,
174
+ noise_std: float = 0.0,
175
+ ) -> None:
176
+ """
177
+ Run one phase for all agents.
178
+
179
+ Seeds are constructed as:
180
+ env_seed = env_seed_base + phase_id * env_seed_offset + agent_idx * 10000 + episode_idx
181
+ so that episodes are reproducible but independent across agents and phases.
182
+ """
183
+ for agent_idx, agent in enumerate(agents):
184
+ for ep in range(n_episodes):
185
+ env_seed = (
186
+ env_seed_base
187
+ + phase_id * env_seed_offset
188
+ + agent_idx * 10000
189
+ + ep
190
+ )
191
+ env = CorruptedValleyEnv(seed=env_seed, phase=phase_id)
192
+ rng = np.random.default_rng(env_seed)
193
+
194
+ if isinstance(agent, LevoThinkingEnsembleAgent):
195
+ if noisy_heads_spec is None:
196
+ # default: half of the heads receive noisy TD-updates
197
+ k = max(1, agent.n_heads // 2)
198
+ effective_noisy_heads = range(k)
199
+ else:
200
+ effective_noisy_heads = noisy_heads_spec
201
+ episode_noise_std = noise_std
202
+ else:
203
+ effective_noisy_heads = None
204
+ episode_noise_std = 0.0
205
+
206
+ run_episode(
207
+ env=env,
208
+ agent=agent,
209
+ phase_id=phase_id,
210
+ episode_idx=ep,
211
+ logger=logger,
212
+ rng=rng,
213
+ noisy_heads=effective_noisy_heads,
214
+ noise_std=episode_noise_std,
215
+ )
216
+
217
+
218
+ def main() -> None:
219
+ base_seed = 1234
220
+ seed_offset = 1000
221
+
222
+ # probe environment to get sizes
223
+ probe_env = CorruptedValleyEnv(seed=base_seed, phase=1)
224
+ n_states = probe_env.n_states
225
+ n_actions = probe_env.n_actions
226
+
227
+ agents = [
228
+ EpsGreedyQAgent(n_states, n_actions, epsilon=0.1, name="EpsGreedy"),
229
+ SoftmaxBoltzmannAgent(n_states, n_actions, tau=0.5, name="Softmax"),
230
+ LevoQTabularAgent(
231
+ n_states,
232
+ n_actions,
233
+ A=0.5,
234
+ omega=0.05,
235
+ ent_weight=0.0,
236
+ name="LevoQ",
237
+ ),
238
+ LevoThinkingEnsembleAgent(
239
+ n_states,
240
+ n_actions,
241
+ n_heads=5,
242
+ A=0.5,
243
+ omega=0.05,
244
+ lambda_var=0.5,
245
+ name="LevoThinking",
246
+ ),
247
+ ]
248
+
249
+ _results_dir = Path(os.environ.get("TWOQUARKS_RESULTS_DIR", (Path(__file__).resolve().parents[1] / "results").as_posix()))
250
+ _results_dir.mkdir(parents=True, exist_ok=True)
251
+ results_path = str(_results_dir / "antidown_corrupted_valley_tabular.csv")
252
+ logger = CSVLogger(
253
+ results_path,
254
+ fieldnames=[
255
+ "phase",
256
+ "phase_tag",
257
+ "episode",
258
+ "agent",
259
+ "total_reward",
260
+ "valley_visits",
261
+ ],
262
+ )
263
+
264
+ n_episodes = 200
265
+
266
+ # Phase 1: corrupted valley
267
+ run_phase(
268
+ env_seed_base=base_seed,
269
+ env_seed_offset=seed_offset,
270
+ phase_id=1,
271
+ n_episodes=n_episodes,
272
+ agents=agents,
273
+ logger=logger,
274
+ noisy_heads_spec=None,
275
+ noise_std=0.0,
276
+ )
277
+
278
+ # Phase 2: corrected valley
279
+ run_phase(
280
+ env_seed_base=base_seed,
281
+ env_seed_offset=seed_offset,
282
+ phase_id=2,
283
+ n_episodes=n_episodes,
284
+ agents=agents,
285
+ logger=logger,
286
+ noisy_heads_spec=None,
287
+ noise_std=0.0,
288
+ )
289
+
290
+ # Phase 3: corrected valley + noisy TD-updates for LevoThinking
291
+ run_phase(
292
+ env_seed_base=base_seed,
293
+ env_seed_offset=seed_offset,
294
+ phase_id=3,
295
+ n_episodes=n_episodes,
296
+ agents=agents,
297
+ logger=logger,
298
+ noisy_heads_spec=None, # default: half of the heads
299
+ noise_std=0.1,
300
+ )
301
+
302
+
303
+ if __name__ == "__main__":
304
+ main()
Down/AntiDown/levo/levo_q_tabular.py ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import Optional
2
+
3
+ import numpy as np
4
+
5
+ from .policies import hf_levo_policy_tabular
6
+
7
+
8
+ class LevoQTabularAgent:
9
+ """
10
+ Tabular Q-learning agent with an HF-Levo policy.
11
+
12
+ The Q-update is standard:
13
+ Q(s, a) <- Q(s, a) + alpha * (r + gamma max_a' Q(s', a') - Q(s, a))
14
+
15
+ The policy is:
16
+ score(a) = Q(s, a) + A cos(omega * t + phi_a + phase_offset)
17
+ pi(a|s) = softmax(score / tau)
18
+ """
19
+
20
+ def __init__(
21
+ self,
22
+ n_states: int,
23
+ n_actions: int,
24
+ gamma: float = 0.99,
25
+ alpha: float = 0.1,
26
+ A: float = 0.5,
27
+ omega: float = 0.1,
28
+ phase_offset: float = 0.0,
29
+ ent_weight: float = 0.0,
30
+ prior: Optional[np.ndarray] = None,
31
+ tau: float = 1.0,
32
+ name: str = "LevoQ",
33
+ ) -> None:
34
+ self.n_states = n_states
35
+ self.n_actions = n_actions
36
+ self.gamma = gamma
37
+ self.alpha = alpha
38
+ self.A = A
39
+ self.omega = omega
40
+ self.phase_offset = phase_offset
41
+ self.ent_weight = ent_weight
42
+ self.prior = prior
43
+ self.tau = tau
44
+
45
+ self.name = name
46
+ self.Q = np.zeros((n_states, n_actions), dtype=float)
47
+ self.t = 0 # global step counter for the HF modulation
48
+
49
+ def select_action(self, state: int, rng: np.random.Generator) -> int:
50
+ probs = hf_levo_policy_tabular(
51
+ self.Q,
52
+ state,
53
+ t=self.t,
54
+ A=self.A,
55
+ omega=self.omega,
56
+ phase_offset=self.phase_offset,
57
+ ent_weight=self.ent_weight,
58
+ prior=self.prior,
59
+ tau=self.tau,
60
+ )
61
+ self.t += 1
62
+ return int(rng.choice(self.n_actions, p=probs))
63
+
64
+ def update(self, s: int, a: int, r: float, s_next: int, done: bool) -> None:
65
+ q_sa = self.Q[s, a]
66
+ if done:
67
+ target = r
68
+ else:
69
+ target = r + self.gamma * float(self.Q[s_next].max())
70
+ td = target - q_sa
71
+ self.Q[s, a] = q_sa + self.alpha * td
Down/AntiDown/levo/levo_thinking_ensemble.py ADDED
@@ -0,0 +1,104 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import Iterable, Optional
2
+
3
+ import numpy as np
4
+
5
+ from .policies import ensemble_levo_thinking_policy
6
+
7
+
8
+ class LevoThinkingEnsembleAgent:
9
+ """
10
+ Ensemble Q-learning agent with LevoThinking policy.
11
+
12
+ Q has shape (n_heads, n_states, n_actions).
13
+
14
+ For action selection, we use:
15
+ mu(a) = mean_h Q_h(s, a)
16
+ var(a) = var_h Q_h(s, a)
17
+ base_score(a) = mu(a) - lambda_var * var(a)
18
+ score(a) = base_score(a) + HF(t, a)
19
+
20
+ Each head is updated independently with standard Q-learning, optionally
21
+ adding Gaussian noise to the TD-error for a subset of heads.
22
+ """
23
+
24
+ def __init__(
25
+ self,
26
+ n_states: int,
27
+ n_actions: int,
28
+ n_heads: int = 5,
29
+ gamma: float = 0.99,
30
+ alpha: float = 0.1,
31
+ A: float = 0.5,
32
+ omega: float = 0.1,
33
+ phase_offset: float = 0.0,
34
+ lambda_var: float = 0.5,
35
+ prior: Optional[np.ndarray] = None,
36
+ tau: float = 1.0,
37
+ name: str = "LevoThinking",
38
+ ) -> None:
39
+ self.n_states = n_states
40
+ self.n_actions = n_actions
41
+ self.n_heads = n_heads
42
+ self.gamma = gamma
43
+ self.alpha = alpha
44
+ self.A = A
45
+ self.omega = omega
46
+ self.phase_offset = phase_offset
47
+ self.lambda_var = lambda_var
48
+ self.prior = prior
49
+ self.tau = tau
50
+
51
+ self.name = name
52
+ self.Q = np.zeros((n_heads, n_states, n_actions), dtype=float)
53
+ self.t = 0 # global step counter for the HF modulation
54
+
55
+ def select_action(self, state: int, rng: np.random.Generator) -> int:
56
+ probs = ensemble_levo_thinking_policy(
57
+ self.Q,
58
+ state,
59
+ t=self.t,
60
+ A=self.A,
61
+ omega=self.omega,
62
+ phase_offset=self.phase_offset,
63
+ lambda_var=self.lambda_var,
64
+ prior=self.prior,
65
+ tau=self.tau,
66
+ )
67
+ self.t += 1
68
+ return int(rng.choice(self.n_actions, p=probs))
69
+
70
+ def update(
71
+ self,
72
+ s: int,
73
+ a: int,
74
+ r: float,
75
+ s_next: int,
76
+ done: bool,
77
+ noisy_heads: Optional[Iterable[int]] = None,
78
+ noise_std: float = 0.0,
79
+ rng: Optional[np.random.Generator] = None,
80
+ ) -> None:
81
+ """
82
+ Update each head with standard Q-learning.
83
+
84
+ If `noisy_heads` is not None and `noise_std > 0`, then for any head h
85
+ in `noisy_heads`, we add N(0, noise_std) to the TD-error before the
86
+ update. This is used in Phase 3 to simulate corrupted learning signals.
87
+ """
88
+ if noisy_heads is None:
89
+ noisy_set = set()
90
+ else:
91
+ noisy_set = set(int(h) for h in noisy_heads)
92
+
93
+ for h in range(self.n_heads):
94
+ q_sa = self.Q[h, s, a]
95
+ if done:
96
+ target = r
97
+ else:
98
+ target = r + self.gamma * float(self.Q[h, s_next].max())
99
+ td = target - q_sa
100
+
101
+ if h in noisy_set and noise_std > 0.0 and rng is not None:
102
+ td += float(rng.normal(loc=0.0, scale=noise_std))
103
+
104
+ self.Q[h, s, a] = q_sa + self.alpha * td
Down/AntiDown/levo/policies.py ADDED
@@ -0,0 +1,101 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import math
2
+ from typing import Optional
3
+
4
+ import numpy as np
5
+
6
+
7
+ def softmax(x: np.ndarray, tau: float = 1.0) -> np.ndarray:
8
+ x = np.asarray(x, dtype=float)
9
+ if tau <= 0.0:
10
+ raise ValueError("tau must be positive")
11
+ x = x / tau
12
+ x = x - np.max(x)
13
+ ex = np.exp(x)
14
+ s = ex.sum()
15
+ if s <= 0.0:
16
+ # fallback: uniform
17
+ return np.ones_like(ex) / len(ex)
18
+ return ex / s
19
+
20
+
21
+ def hf_levo_policy_tabular(
22
+ Q: np.ndarray,
23
+ state: int,
24
+ t: int,
25
+ A: float = 0.5,
26
+ omega: float = 0.1,
27
+ phase_offset: float = 0.0,
28
+ ent_weight: float = 0.0,
29
+ prior: Optional[np.ndarray] = None,
30
+ tau: float = 1.0,
31
+ ) -> np.ndarray:
32
+ """
33
+ HF-Levo policy on a single Q-table.
34
+
35
+ score(a) = Q(s, a) + A cos(omega * t + phi_a + phase_offset)
36
+ """
37
+ q_s = np.asarray(Q[state], dtype=float)
38
+ n_actions = q_s.shape[0]
39
+
40
+ phases = np.linspace(0.0, 2.0 * math.pi, n_actions, endpoint=False)
41
+ osc = A * np.cos(omega * float(t) + phases + phase_offset)
42
+ score = q_s + osc
43
+
44
+ p = softmax(score, tau=tau)
45
+
46
+ if prior is None or ent_weight <= 0.0:
47
+ return p
48
+
49
+ prior = np.asarray(prior, dtype=float)
50
+ prior = prior / max(prior.sum(), 1e-8)
51
+ w = max(0.0, min(1.0, float(ent_weight)))
52
+ p_mix = (1.0 - w) * p + w * prior
53
+ p_mix = np.clip(p_mix, 1e-8, 1.0)
54
+ p_mix /= p_mix.sum()
55
+ return p_mix
56
+
57
+
58
+ def ensemble_levo_thinking_policy(
59
+ Q_ensemble: np.ndarray,
60
+ state: int,
61
+ t: int,
62
+ A: float = 0.5,
63
+ omega: float = 0.1,
64
+ phase_offset: float = 0.0,
65
+ lambda_var: float = 0.5,
66
+ prior: Optional[np.ndarray] = None,
67
+ tau: float = 1.0,
68
+ ) -> np.ndarray:
69
+ """
70
+ LevoThinking ensemble policy.
71
+
72
+ Let Q_h be the Q-table of head h.
73
+
74
+ mu(a) = mean_h Q_h(s, a)
75
+ var(a) = var_h Q_h(s, a)
76
+
77
+ base_score(a) = mu(a) - lambda_var * var(a)
78
+ score(a) = base_score(a) + A cos(omega * t + phi_a + phase_offset)
79
+ """
80
+ q_heads = np.asarray(Q_ensemble[:, state, :], dtype=float)
81
+ mu = q_heads.mean(axis=0)
82
+ var = q_heads.var(axis=0)
83
+
84
+ n_actions = mu.shape[0]
85
+ phases = np.linspace(0.0, 2.0 * math.pi, n_actions, endpoint=False)
86
+ osc = A * np.cos(omega * float(t) + phases + phase_offset)
87
+
88
+ base_score = mu - lambda_var * var
89
+ score = base_score + osc
90
+
91
+ p = softmax(score, tau=tau)
92
+
93
+ if prior is None:
94
+ return p
95
+
96
+ prior = np.asarray(prior, dtype=float)
97
+ prior = prior / max(prior.sum(), 1e-8)
98
+ p_mix = 0.8 * p + 0.2 * prior
99
+ p_mix = np.clip(p_mix, 1e-8, 1.0)
100
+ p_mix /= p_mix.sum()
101
+ return p_mix
Down/AntiDown/utils/logging.py ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ Simple logging utilities for experiments.
3
+
4
+ Provides a minimal CSVLogger that creates the output directory if needed,
5
+ writes a header once, and appends rows as dictionaries.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ import csv
11
+ import os
12
+ from typing import Mapping, Sequence
13
+
14
+
15
+ class CSVLogger:
16
+ """
17
+ Minimal CSV logger for experiment metrics.
18
+
19
+ Parameters
20
+ ----------
21
+ filepath : str
22
+ Path to the CSV file to create/append.
23
+ fieldnames : Sequence[str]
24
+ Ordered list of column names to use as the CSV header.
25
+
26
+ Notes
27
+ -----
28
+ - The directory containing `filepath` is created if it does not exist.
29
+ - The file is overwritten when the logger is constructed.
30
+ - Each call to `log` appends a single row.
31
+ """
32
+
33
+ def __init__(self, filepath: str, fieldnames: Sequence[str]) -> None:
34
+ self.filepath = filepath
35
+ # Handle the case where filepath is in the current directory.
36
+ directory = os.path.dirname(filepath)
37
+ if directory:
38
+ os.makedirs(directory, exist_ok=True)
39
+
40
+ self.fieldnames = list(fieldnames)
41
+ self._init_file()
42
+
43
+ def _init_file(self) -> None:
44
+ """Create or overwrite the CSV file and write the header row."""
45
+ with open(self.filepath, mode="w", newline="") as f:
46
+ writer = csv.DictWriter(f, fieldnames=self.fieldnames)
47
+ writer.writeheader()
48
+
49
+ def log(self, row_dict: Mapping[str, object]) -> None:
50
+ """
51
+ Append a single row to the CSV file.
52
+
53
+ Parameters
54
+ ----------
55
+ row_dict : Mapping[str, object]
56
+ Dictionary mapping field name to value. Missing keys will be
57
+ written as empty cells; extra keys are ignored.
58
+ """
59
+ # Project to known fieldnames to avoid surprises.
60
+ row = {k: row_dict.get(k, "") for k in self.fieldnames}
61
+ with open(self.filepath, mode="a", newline="") as f:
62
+ writer = csv.DictWriter(f, fieldnames=self.fieldnames)
63
+ writer.writerow(row)
Down/MODEL.md ADDED
@@ -0,0 +1,96 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ \# Model Description: Down / AntiDown
2
+
3
+
4
+
5
+ \## Purpose
6
+
7
+
8
+
9
+ The Down / AntiDown models are reinforcement learning agents designed to expose and analyze failure modes under deceptive reward conditions. The emphasis is not on maximizing return, but on characterizing instability, collapse, and recovery dynamics.
10
+
11
+
12
+
13
+ \## Down Agent
14
+
15
+
16
+
17
+ \*\*Role:\*\*
18
+
19
+ The Down agent represents a learner operating under a corrupted reward signal that remains internally consistent but externally misaligned.
20
+
21
+
22
+
23
+ \*\*Key Properties:\*\*
24
+
25
+ \- Learns normally during early phases
26
+
27
+ \- Maintains high confidence even as reward becomes deceptive
28
+
29
+ \- Exhibits delayed collapse once misalignment compounds
30
+
31
+
32
+
33
+ \*\*Observed Behaviors:\*\*
34
+
35
+ \- Prolonged false stability
36
+
37
+ \- Sharp performance cliffs
38
+
39
+ \- Difficulty detecting reward corruption autonomously
40
+
41
+
42
+
43
+
44
+
45
+ \## AntiDown Agent
46
+
47
+
48
+
49
+ \*\*Role:\*\*
50
+
51
+ AntiDown serves as a contrasting hypothesis agent, exposed to the same environment but with altered sensitivity to reward inconsistencies.
52
+
53
+
54
+
55
+ \*\*Key Properties:\*\*
56
+
57
+ \- Increased sensitivity to instability signals
58
+
59
+ \- Earlier behavioral deviation under reward corruption
60
+
61
+ \- Serves as a comparative probe, not a “better” agent
62
+
63
+
64
+
65
+
66
+
67
+ \## Design
68
+
69
+
70
+
71
+ These models are not meant to be optimal. They are diagnostic instruments designed to surface questions such as:
72
+
73
+ \- When does optimization become actively misleading?
74
+
75
+ \- What internal signals precede collapse?
76
+
77
+ \- Can instability be detected before outcomes degrade?
78
+
79
+
80
+
81
+ \## Safety
82
+
83
+
84
+
85
+ Down / AntiDown formalize a common safety failure mode:
86
+
87
+ > Systems that behave correctly until they suddenly don’t — and give no warning when it matters.
88
+
89
+
90
+
91
+ They are intended as testbeds for studying monitoring, intervention, and robustness rather than performance.
92
+
93
+
94
+
95
+
96
+
Down/README.md ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ \# Reinforcement Learning under Deceptive Reward
2
+ \## Down / AntiDown
3
+
4
+ This project investigates failure modes in reinforcement learning systems operating under deceptive, corrupted, or mis-specified reward signals. Rather than optimizing for peak performance, the focus is on observing how agents behave when reward feedback becomes unreliable while confidence and apparent stability remain high.
5
+
6
+ The Down / AntiDown pair is designed as a controlled benchmark for studying robustness, collapse, and recovery dynamics under adversarial reward conditions, with direct relevance to AI safety and alignment research.
7
+
8
+ \## Core Idea
9
+
10
+ In many real-world and safety-critical settings, reward signals may be:
11
+
12
+ \- Misaligned with the true task objective
13
+
14
+ \- Delayed, noisy, or partially adversarial
15
+
16
+ \- Temporarily valid and then corrupted
17
+
18
+
19
+ This project studies how learning agents respond to these conditions, particularly:
20
+
21
+ \- How long they continue to act confidently under corrupted reward
22
+
23
+ \- Whether collapse occurs abruptly or gradually
24
+
25
+ \- Whether recovery is possible once reward integrity is restored
26
+
27
+
28
+ \## Project Structure
29
+
30
+ \- `agents/`
31
+
32
+ #Implementations of the Down and AntiDown agents.
33
+
34
+ \- `envs/`
35
+
36
+ #Custom environments modeling deceptive reward dynamics.
37
+
38
+ \- `run\_all.py`
39
+
40
+ #Entry point to run both Down and AntiDown agents in a unified experimental setup.
41
+
42
+
43
+ \## Running the Experiments
44
+
45
+ This project is designed to run without notebooks. (I resorted to Anaconda)
46
+
47
+ ```bash
48
+
49
+ conda activate your\_env
50
+
51
+ python run\_all.py
52
+
53
+ Relevance to AI Safety
54
+
55
+ This benchmark targets a known blind spot in current ML evaluation: agents that appear competent while optimizing the wrong objective. It provides concrete tools to study:
56
+
57
+ Misalignment under deceptive feedback
58
+
59
+ Early-warning signals preceding collapse
60
+
61
+ Limits of reward-centric evaluation
62
+
63
+ The project directly supports research on stability-aware and intervention-based safety mechanisms.
64
+
Down/down/envs/env_paradox.py ADDED
@@ -0,0 +1,193 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ import numpy as np
3
+ from dataclasses import dataclass
4
+ from typing import Tuple, Dict, Optional
5
+
6
+
7
+ @dataclass(frozen=True)
8
+ class ParadoxState:
9
+ """Structured view of the epistemic state."""
10
+ ambiguity_type: int # 0..2
11
+ evidence_bin: int # 0..2
12
+ risk_level: int # 0..1
13
+ phase: int # 1..3
14
+
15
+
16
+ class EpistemicValleyEnv:
17
+ """
18
+ Epistemic Valley Inframe v2
19
+
20
+ Discrete one-step environment modelling epistemic risk under ambiguity.
21
+
22
+ State s = (ambiguity_type, evidence_bin, risk_level, phase)
23
+ - ambiguity_type: 0=lexical, 1=scope, 2=missing-data
24
+ - evidence_bin: 0=low, 1=medium, 2=high
25
+ - risk_level: 0=low, 1=high
26
+ - phase: 1, 2, or 3 (reward regime)
27
+
28
+ Actions:
29
+ 0 = HOLD (stay with current uncertainty)
30
+ 1 = EXPAND (seek more evidence / broader context)
31
+ 2 = CLARIFY (ask a targeted clarification)
32
+ 3 = DEFER (explicitly postpone the decision)
33
+ 4 = ANSWER (commit to an answer)
34
+
35
+ Episodes are single-step: reset() -> step(action) -> done=True.
36
+ """
37
+ # actions (kept as attributes so agents can introspect)
38
+ HOLD = 0
39
+ EXPAND = 1
40
+ CLARIFY = 2
41
+ DEFER = 3
42
+ ANSWER = 4
43
+
44
+ def __init__(self, phase: int = 1, seed: Optional[int] = None) -> None:
45
+ assert phase in (1, 2, 3), "phase must be 1, 2 or 3"
46
+ self.ambiguity_types = ["lexical", "scope", "missing-data"]
47
+ self.evidence_bins = ["low", "medium", "high"]
48
+ self.risk_levels = ["low", "high"]
49
+ self.phases = [1, 2, 3]
50
+
51
+ self.n_ambiguity = len(self.ambiguity_types)
52
+ self.n_evidence = len(self.evidence_bins)
53
+ self.n_risk = len(self.risk_levels)
54
+ self.n_phase = len(self.phases)
55
+
56
+ self.n_states = self.n_ambiguity * self.n_evidence * self.n_risk * self.n_phase
57
+ self.n_actions = 5
58
+
59
+ self.phase = phase
60
+ self.rng = np.random.default_rng(seed)
61
+ self.state: Optional[ParadoxState] = None
62
+ self.done: bool = False
63
+
64
+ # ------------------------------------------------------------------
65
+ # state indexing helpers
66
+ # ------------------------------------------------------------------
67
+ def encode_state(self, s: ParadoxState) -> int:
68
+ """Flatten ParadoxState into [0, n_states)."""
69
+ idx = s.ambiguity_type
70
+ idx = idx * self.n_evidence + s.evidence_bin
71
+ idx = idx * self.n_risk + s.risk_level
72
+ # phase is 1..3, internally we use 0..2
73
+ phase_index = s.phase - 1
74
+ idx = idx * self.n_phase + phase_index
75
+ return idx
76
+
77
+ def decode_state(self, idx: int) -> ParadoxState:
78
+ """Inverse of encode_state."""
79
+ phase_index = idx % self.n_phase
80
+ idx //= self.n_phase
81
+ risk_level = idx % self.n_risk
82
+ idx //= self.n_risk
83
+ evidence_bin = idx % self.n_evidence
84
+ idx //= self.n_evidence
85
+ ambiguity_type = idx
86
+ return ParadoxState(
87
+ ambiguity_type=int(ambiguity_type),
88
+ evidence_bin=int(evidence_bin),
89
+ risk_level=int(risk_level),
90
+ phase=int(phase_index + 1),
91
+ )
92
+
93
+ # ------------------------------------------------------------------
94
+ # core env API
95
+ # ------------------------------------------------------------------
96
+ def _sample_state(self) -> ParadoxState:
97
+ a = int(self.rng.integers(0, self.n_ambiguity))
98
+ e = int(self.rng.integers(0, self.n_evidence))
99
+ r = int(self.rng.integers(0, self.n_risk))
100
+ return ParadoxState(
101
+ ambiguity_type=a,
102
+ evidence_bin=e,
103
+ risk_level=r,
104
+ phase=self.phase,
105
+ )
106
+
107
+ def reset(self) -> Tuple[int, Dict]:
108
+ """Sample a new epistemic state and return its index + info."""
109
+ self.state = self._sample_state()
110
+ self.done = False
111
+ s_idx = self.encode_state(self.state)
112
+ return s_idx, {"state": self.state}
113
+
114
+ def step(self, action: int) -> Tuple[int, float, bool, Dict]:
115
+ """Apply one action, return (next_state_index, reward, done, info)."""
116
+ assert self.state is not None, "Call reset() before step()."
117
+ s = self.state
118
+ reward, failure_mode = self._reward(s, action)
119
+ self.done = True
120
+ info = {
121
+ "state": s,
122
+ "failure_mode": failure_mode,
123
+ }
124
+ # one-step episode; next state is irrelevant for this env
125
+ return self.encode_state(s), float(reward), self.done, info
126
+
127
+ # ------------------------------------------------------------------
128
+ # reward function
129
+ # ------------------------------------------------------------------
130
+ def _reward(self, s: ParadoxState, action: int) -> Tuple[float, str]:
131
+ """
132
+ Reward shaped by:
133
+ - evidence / risk alignment
134
+ - failure mode (overconfident vs overcautious)
135
+ - phase (reward regime and noise)
136
+
137
+ We implement a clean, reproducible version matching the narrative in
138
+ the original MODELS document: aggressive actions are good when
139
+ evidence is strong and risk is low, dangerous when evidence is weak
140
+ and risk is high, and conservative actions behave inversely.
141
+ """
142
+ e_str = self.evidence_bins[s.evidence_bin]
143
+ r_str = self.risk_levels[s.risk_level]
144
+ phase = s.phase
145
+
146
+ high_risk = (r_str == "high")
147
+ low_risk = (r_str == "low")
148
+ low_evidence = (e_str == "low")
149
+ high_evidence = (e_str == "high")
150
+
151
+ failure_mode = "neutral"
152
+ base = 0.0
153
+
154
+ # --- classify aggressive vs conservative actions ---
155
+ aggressive = action in (self.EXPAND, self.ANSWER)
156
+ conservative = action in (self.HOLD, self.DEFER)
157
+
158
+ # --- base reward logic before phase-specific shaping ---
159
+ if aggressive and high_risk and low_evidence:
160
+ # archetypal overconfidence: answer aggressively with little support
161
+ base = -2.0
162
+ failure_mode = "overconfident"
163
+ elif conservative and low_risk and high_evidence:
164
+ # archetypal overcautious: you could answer safely but you freeze
165
+ base = -0.8
166
+ failure_mode = "overcautious"
167
+ else:
168
+ # reasonably aligned choices
169
+ if aggressive and high_evidence and low_risk:
170
+ base = +2.0
171
+ elif aggressive and not (high_risk and low_evidence):
172
+ base = +0.8
173
+ elif conservative and high_risk and low_evidence:
174
+ base = +1.2
175
+ else:
176
+ base = 0.0
177
+
178
+ # --- phase-specific shaping ---
179
+ if phase == 1:
180
+ # Slight bonus for successful aggressive behaviour
181
+ if aggressive and base > 0:
182
+ base += 0.5
183
+ elif phase == 2:
184
+ # Harsher overconfidence penalty
185
+ if failure_mode == "overconfident":
186
+ base -= 1.0
187
+ elif phase == 3:
188
+ # Noisy feedback regime
189
+ noise = float(self.rng.normal(0.0, 0.5))
190
+ base += noise
191
+ base = float(np.clip(base, -3.0, 3.0))
192
+
193
+ return base, failure_mode
Down/down/exp/plot_paradox_results.py ADDED
@@ -0,0 +1,82 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Plot results produced by exp/run_paradox_tabular.py.
2
+
3
+ Creates PNG plots under down/graphics/.
4
+ """
5
+
6
+ from __future__ import annotations
7
+
8
+ import csv
9
+ import os
10
+ from pathlib import Path
11
+ from typing import Dict, List
12
+
13
+ import matplotlib.pyplot as plt
14
+
15
+
16
+ def _load_csv(path: Path) -> List[Dict[str, str]]:
17
+ with path.open("r", newline="") as f:
18
+ return list(csv.DictReader(f))
19
+
20
+
21
+ def main() -> None:
22
+ quark_dir = Path(__file__).resolve().parents[1] # .../down
23
+ results_dir = Path(os.environ.get("TWOQUARKS_RESULTS_DIR", (quark_dir / "results").as_posix()))
24
+ graphics_dir = Path(os.environ.get("TWOQUARKS_GRAPHICS_DIR", (quark_dir / "graphics").as_posix()))
25
+ results_dir.mkdir(parents=True, exist_ok=True)
26
+ graphics_dir.mkdir(parents=True, exist_ok=True)
27
+ results_csv = results_dir / "down_paradox_tabular_results.csv"
28
+
29
+ if not results_csv.exists():
30
+ raise FileNotFoundError(f"Missing results CSV: {results_csv}")
31
+
32
+ rows = _load_csv(results_csv)
33
+ if not rows:
34
+ raise RuntimeError(f"CSV is empty: {results_csv}")
35
+
36
+ # Normalize columns (older versions used episode_reward/rho_state)
37
+ def to_float(x: str) -> float:
38
+ try:
39
+ return float(x)
40
+ except Exception:
41
+ return float("nan")
42
+
43
+ # Build per-agent series
44
+ agents = sorted({r.get("agent", "unknown") for r in rows})
45
+ xs_all = [int(r.get("global_episode", r.get("episode", 0)) or 0) for r in rows]
46
+
47
+ # Episode reward plot
48
+ plt.figure()
49
+ for a in agents:
50
+ xs = [int(r.get("global_episode", r.get("episode", 0)) or 0) for r in rows if r.get("agent") == a]
51
+ ys = [to_float(r.get("episode_reward", r.get("return", "nan"))) for r in rows if r.get("agent") == a]
52
+ if xs:
53
+ plt.plot(xs, ys, label=a)
54
+ plt.xlabel("Global episode")
55
+ plt.ylabel("Episode reward")
56
+ plt.title("DOWN: reward over training")
57
+ plt.legend()
58
+ out1 = graphics_dir / "down_paradox_tabular_reward.png"
59
+ plt.savefig(out1, dpi=160, bbox_inches="tight")
60
+ plt.close()
61
+
62
+ # Rho plot (if present)
63
+ if any(("rho_state" in r) for r in rows) or any(("rho" in r) for r in rows):
64
+ plt.figure()
65
+ for a in agents:
66
+ xs = [int(r.get("global_episode", r.get("episode", 0)) or 0) for r in rows if r.get("agent") == a]
67
+ ys = [to_float(r.get("rho_state", r.get("rho", "nan"))) for r in rows if r.get("agent") == a]
68
+ if xs:
69
+ plt.plot(xs, ys, label=a)
70
+ plt.xlabel("Global episode")
71
+ plt.ylabel("rho")
72
+ plt.title("DOWN: rho over training")
73
+ plt.legend()
74
+ out2 = graphics_dir / "down_paradox_tabular_rho.png"
75
+ plt.savefig(out2, dpi=160, bbox_inches="tight")
76
+ plt.close()
77
+
78
+ print(f"Saved plots to {graphics_dir}")
79
+
80
+
81
+ if __name__ == "__main__":
82
+ main()
Down/down/exp/run_paradox_ppo_hybrid.py ADDED
@@ -0,0 +1,112 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ import csv
3
+ from pathlib import Path
4
+
5
+ import numpy as np
6
+
7
+ from pathlib import Path
8
+ import sys
9
+
10
+ _THIS_DIR = Path(__file__).resolve().parent
11
+ _QUARK_DIR = _THIS_DIR.parent
12
+ if str(_QUARK_DIR) not in sys.path:
13
+ sys.path.insert(0, str(_QUARK_DIR))
14
+
15
+ from envs.env_paradox import EpistemicValleyEnv
16
+ from levo.agent_levo_paradox import HFLevoAgent, LevoParadoxIsomerAgent
17
+
18
+
19
+ def run_ppo_hybrid(
20
+ out_csv: str | Path,
21
+ episodes_per_phase: int = 400,
22
+ seed: int = 2025,
23
+ update_every: int = 256,
24
+ ) -> None:
25
+ """
26
+ Train the Levo Paradox PPO Hybrid engine on Epistemic Valley and log results.
27
+
28
+ We keep the same CSV schema as the tabular runner, plus the PPO-specific
29
+ rho estimate for the visited state.
30
+ """
31
+ out_path = Path(out_csv)
32
+ out_path.parent.mkdir(parents=True, exist_ok=True)
33
+
34
+ rng = np.random.default_rng(seed)
35
+
36
+ # probe env for shapes
37
+ probe_env = EpistemicValleyEnv(phase=1, seed=seed)
38
+ n_states = probe_env.n_states
39
+ n_actions = probe_env.n_actions
40
+
41
+ agent = LevoParadoxPPOHybrid(
42
+ n_states=n_states,
43
+ n_actions=n_actions,
44
+ seed=seed,
45
+ )
46
+
47
+ global_ep = 0
48
+ steps_since_update = 0
49
+
50
+ with out_path.open("w", newline="") as f:
51
+ writer = csv.DictWriter(
52
+ f,
53
+ fieldnames=[
54
+ "global_episode",
55
+ "phase",
56
+ "episode",
57
+ "env_seed",
58
+ "agent",
59
+ "episode_reward",
60
+ "failure_mode",
61
+ "rho_state",
62
+ ],
63
+ )
64
+ writer.writeheader()
65
+
66
+ for phase in (1, 2, 3):
67
+ for local_ep in range(episodes_per_phase):
68
+ env_seed = int(rng.integers(0, 2**31 - 1))
69
+ env = EpistemicValleyEnv(phase=phase, seed=env_seed)
70
+
71
+ s_idx, info = env.reset()
72
+ action, logp, value_est, rho_est = agent.select_action(s_idx)
73
+ s_next_idx, reward, done, step_info = env.step(action)
74
+ failure_mode = step_info.get("failure_mode", "neutral")
75
+
76
+ agent.store_transition(
77
+ s_idx=s_idx,
78
+ action=action,
79
+ reward=reward,
80
+ log_prob=logp,
81
+ value=value_est,
82
+ rho=rho_est,
83
+ failure_mode=failure_mode,
84
+ )
85
+
86
+ writer.writerow(
87
+ {
88
+ "global_episode": global_ep,
89
+ "phase": phase,
90
+ "episode": local_ep,
91
+ "env_seed": env_seed,
92
+ "agent": "LevoParadoxPPOHybrid",
93
+ "episode_reward": float(reward),
94
+ "failure_mode": failure_mode,
95
+ "rho_state": rho_est,
96
+ }
97
+ )
98
+
99
+ global_ep += 1
100
+ steps_since_update += 1
101
+
102
+ if steps_since_update >= update_every:
103
+ agent.update()
104
+ steps_since_update = 0
105
+
106
+ # final update with any remaining samples
107
+ if steps_since_update > 0:
108
+ agent.update()
109
+
110
+
111
+ if __name__ == "__main__":
112
+ run_ppo_hybrid((_QUARK_DIR / "results/paradox_ppo_results.csv").as_posix(), episodes_per_phase=400)
Down/down/exp/run_paradox_tabular.py ADDED
@@ -0,0 +1,124 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ # --- twoquarks bootstrap (path-stable imports) ---
3
+ import sys
4
+ from pathlib import Path
5
+ _ROOT = Path(__file__).resolve().parents[1] # project root (sibling of exp/)
6
+ if str(_ROOT) not in sys.path:
7
+ sys.path.insert(0, str(_ROOT))
8
+ # -------------------------------------------------
9
+
10
+ import csv
11
+ import os
12
+ from pathlib import Path
13
+ import sys
14
+
15
+ import numpy as np
16
+
17
+ # Robust imports regardless of where python is launched from.
18
+ _THIS_DIR = Path(__file__).resolve().parent
19
+ _QUARK_DIR = _THIS_DIR.parent # .../down
20
+ _PROJECT_DIR = _QUARK_DIR.parent # .../Down
21
+
22
+ if str(_QUARK_DIR) not in sys.path:
23
+ sys.path.insert(0, str(_QUARK_DIR))
24
+
25
+ from envs.env_paradox import EpistemicValleyEnv
26
+ from levo.agent_levo_paradox import HFLevoAgent, LevoParadoxIsomerAgent
27
+
28
+
29
+ def run_experiment(
30
+ out_csv: str | Path,
31
+ episodes_per_phase: int = 400,
32
+ seed: int = 2025,
33
+ ) -> None:
34
+ """
35
+ Run HF-Levo and Levo Paradox tabular agents and log results to CSV.
36
+
37
+ The CSV schema is:
38
+
39
+ global_episode,phase,episode,env_seed,agent,episode_reward,failure_mode,rho_state
40
+ """
41
+ out_path = Path(out_csv)
42
+ out_path.parent.mkdir(parents=True, exist_ok=True)
43
+ out_path.parent.mkdir(parents=True, exist_ok=True)
44
+
45
+ rng = np.random.default_rng(seed)
46
+
47
+ # env for shape information only
48
+ probe_env = EpistemicValleyEnv(phase=1, seed=seed)
49
+ n_states = probe_env.n_states
50
+ n_actions = probe_env.n_actions
51
+
52
+ agents = [
53
+ HFLevoAgent(n_states, n_actions, seed=seed),
54
+ LevoParadoxIsomerAgent(n_states, n_actions, seed=seed + 1),
55
+ ]
56
+ agent_names = ["HFLevo", "LevoParadoxIsomer"]
57
+
58
+ global_ep = 0
59
+
60
+ with out_path.open("w", newline="") as f:
61
+ writer = csv.DictWriter(
62
+ f,
63
+ fieldnames=[
64
+ "global_episode",
65
+ "phase",
66
+ "episode",
67
+ "env_seed",
68
+ "agent",
69
+ "episode_reward",
70
+ "failure_mode",
71
+ "rho_state",
72
+ ],
73
+ )
74
+ writer.writeheader()
75
+
76
+ for phase in (1, 2, 3):
77
+ for local_ep in range(episodes_per_phase):
78
+ env_seed = int(rng.integers(0, 2**31 - 1))
79
+
80
+ for agent, name in zip(agents, agent_names, strict=True):
81
+ env = EpistemicValleyEnv(phase=phase, seed=env_seed)
82
+ s_idx, info = env.reset()
83
+ a = agent.select_action(s_idx)
84
+ s_next_idx, reward, done, step_info = env.step(a)
85
+
86
+ failure_mode = step_info.get("failure_mode", "neutral")
87
+
88
+ rho_state = (
89
+ float(getattr(agent, "rho")[s_idx]) # type: ignore[attr-defined]
90
+ if hasattr(agent, "rho")
91
+ else float("nan")
92
+ )
93
+
94
+ agent.update(
95
+ s_idx=s_idx,
96
+ a=a,
97
+ r=reward,
98
+ s_next_idx=s_next_idx,
99
+ done=done,
100
+ failure_mode=failure_mode,
101
+ )
102
+
103
+ writer.writerow(
104
+ {
105
+ "global_episode": global_ep,
106
+ "phase": phase,
107
+ "episode": local_ep,
108
+ "env_seed": env_seed,
109
+ "agent": name,
110
+ "episode_reward": float(reward),
111
+ "failure_mode": failure_mode,
112
+ "rho_state": rho_state,
113
+ }
114
+ )
115
+
116
+ global_ep += 1
117
+
118
+
119
+ if __name__ == "__main__":
120
+ # Allow a caller (e.g., run_all.py) to route outputs to a shared folder.
121
+ _results_dir = Path(os.environ.get("TWOQUARKS_RESULTS_DIR", (_QUARK_DIR / "results").as_posix()))
122
+ _results_dir.mkdir(parents=True, exist_ok=True)
123
+ _out_csv = _results_dir / "down_paradox_tabular_results.csv"
124
+ run_experiment(_out_csv.as_posix(), episodes_per_phase=400)
Down/down/levo/agent_levo_paradox.py ADDED
@@ -0,0 +1,399 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ from __future__ import annotations
3
+
4
+ import math
5
+ from dataclasses import dataclass
6
+ from typing import List, Tuple, Optional, Dict
7
+
8
+ import numpy as np
9
+
10
+ try:
11
+ import torch
12
+ import torch.nn as nn
13
+ import torch.optim as optim
14
+ except Exception: # pragma: no cover - torch might not be installed
15
+ torch = None # type: ignore[assignment]
16
+ nn = object # type: ignore[assignment]
17
+ optim = object # type: ignore[assignment]
18
+
19
+
20
+ # ---------------------------------------------------------------------------
21
+ # Tabular baselines (HF-Levo + isomeric Levo Paradox)
22
+ # ---------------------------------------------------------------------------
23
+
24
+
25
+ class HFLevoAgent:
26
+ """
27
+ Single-head HF-Levo baseline agent.
28
+
29
+ A simple Q-learning agent whose exploration temperature is modulated
30
+ by a high-frequency term:
31
+
32
+ T_t = tau * (1 + A * sin(omega * t))
33
+
34
+ This creates oscillatory exploration / exploitation cycles.
35
+ """
36
+
37
+ def __init__(
38
+ self,
39
+ n_states: int,
40
+ n_actions: int,
41
+ A: float = 0.5,
42
+ omega: float = 0.05,
43
+ tau: float = 0.7,
44
+ alpha: float = 0.1,
45
+ gamma: float = 0.95,
46
+ seed: Optional[int] = None,
47
+ ) -> None:
48
+ self.n_states = n_states
49
+ self.n_actions = n_actions
50
+ self.A = A
51
+ self.omega = omega
52
+ self.tau = tau
53
+ self.alpha = alpha
54
+ self.gamma = gamma
55
+
56
+ self.Q = np.zeros((n_states, n_actions), dtype=np.float32)
57
+ self.rng = np.random.default_rng(seed)
58
+ self.t = 0
59
+
60
+ def _temperature(self) -> float:
61
+ return float(self.tau * (1.0 + self.A * math.sin(self.omega * self.t)))
62
+
63
+ def _softmax(self, q: np.ndarray, temp: float) -> np.ndarray:
64
+ z = q - np.max(q)
65
+ e = np.exp(z / max(temp, 1e-6))
66
+ return e / e.sum()
67
+
68
+ def select_action(self, s_idx: int) -> int:
69
+ temp = self._temperature()
70
+ probs = self._softmax(self.Q[s_idx], temp)
71
+ a = int(self.rng.choice(self.n_actions, p=probs))
72
+ self.t += 1
73
+ return a
74
+
75
+ def update(
76
+ self,
77
+ s_idx: int,
78
+ a: int,
79
+ r: float,
80
+ s_next_idx: int,
81
+ done: bool,
82
+ failure_mode: str,
83
+ ) -> None:
84
+ q = self.Q
85
+ target = r if done else (r + self.gamma * float(np.max(q[s_next_idx])))
86
+ delta = target - float(q[s_idx, a])
87
+ q[s_idx, a] += self.alpha * delta
88
+
89
+
90
+ class LevoParadoxIsomerAgent:
91
+ """
92
+ Isomeric tabular agent with conservative and aggressive Q-functions.
93
+
94
+ Two heads Q_L (conservative) and Q_R (aggressive) are mixed by a
95
+ contextual polarization rho[s] in [0, 1]:
96
+
97
+ Q_mix[s] = (1 - rho[s]) * Q_L[s] + rho[s] * Q_R[s]
98
+
99
+ Polarization is nudged by failure modes reported by the environment:
100
+ - "overconfident" -> push rho down (more conservative)
101
+ - "overcautious" -> push rho up (more aggressive)
102
+ """
103
+
104
+ def __init__(
105
+ self,
106
+ n_states: int,
107
+ n_actions: int,
108
+ tau: float = 0.7,
109
+ alpha: float = 0.1,
110
+ gamma: float = 0.95,
111
+ eta: float = 0.05,
112
+ seed: Optional[int] = None,
113
+ ) -> None:
114
+ self.n_states = n_states
115
+ self.n_actions = n_actions
116
+ self.tau = tau
117
+ self.alpha = alpha
118
+ self.gamma = gamma
119
+ self.eta = eta
120
+
121
+ self.Q_L = np.zeros((n_states, n_actions), dtype=np.float32)
122
+ self.Q_R = np.zeros((n_states, n_actions), dtype=np.float32)
123
+ self.rho = np.full(n_states, 0.5, dtype=np.float32)
124
+
125
+ self.rng = np.random.default_rng(seed)
126
+
127
+ def _softmax(self, x: np.ndarray) -> np.ndarray:
128
+ z = x - np.max(x)
129
+ e = np.exp(z / max(self.tau, 1e-6))
130
+ return e / e.sum()
131
+
132
+ def select_action(self, s_idx: int) -> int:
133
+ rho_s = float(self.rho[s_idx])
134
+ q_mix = (1.0 - rho_s) * self.Q_L[s_idx] + rho_s * self.Q_R[s_idx]
135
+ probs = self._softmax(q_mix)
136
+ a = int(self.rng.choice(self.n_actions, p=probs))
137
+ return a
138
+
139
+ def update(
140
+ self,
141
+ s_idx: int,
142
+ a: int,
143
+ r: float,
144
+ s_next_idx: int,
145
+ done: bool,
146
+ failure_mode: str,
147
+ ) -> None:
148
+ # choose learning head: conservative for overconfidence,
149
+ # aggressive for overcautious, otherwise both share credit.
150
+ if failure_mode == "overconfident":
151
+ heads = ("L",)
152
+ elif failure_mode == "overcautious":
153
+ heads = ("R",)
154
+ else:
155
+ heads = ("L", "R")
156
+
157
+ for h in heads:
158
+ Q = self.Q_L if h == "L" else self.Q_R
159
+ target = r if done else (r + self.gamma * float(np.max(Q[s_next_idx])))
160
+ delta = target - float(Q[s_idx, a])
161
+ Q[s_idx, a] += self.alpha * delta
162
+
163
+ # polarization update
164
+ if failure_mode == "overconfident":
165
+ self.rho[s_idx] = np.clip(self.rho[s_idx] - self.eta, 0.0, 1.0)
166
+ elif failure_mode == "overcautious":
167
+ self.rho[s_idx] = np.clip(self.rho[s_idx] + self.eta, 0.0, 1.0)
168
+
169
+
170
+ # ---------------------------------------------------------------------------
171
+ # PPO Hybrid Engine (GPU-ready, isomeric actor-critic)
172
+ # ---------------------------------------------------------------------------
173
+
174
+
175
+ @dataclass
176
+ class Transition:
177
+ state_idx: int
178
+ action: int
179
+ reward: float
180
+ log_prob: float
181
+ value: float
182
+ rho: float
183
+ failure_mode: str
184
+
185
+
186
+ class ParadoxActorCritic(nn.Module): # type: ignore[misc]
187
+ """
188
+ Isomeric actor-critic.
189
+
190
+ - shared MLP trunk over a one-hot encoding of the discrete state
191
+ - two actor heads: conservative vs aggressive
192
+ - one scalar gating head producing rho(s) in [0, 1]
193
+ - one critic head V(s)
194
+
195
+ The final policy is a mixture of the two isomers, combined inside the
196
+ logits space and fed through softmax.
197
+ """
198
+
199
+ def __init__(self, n_states: int, n_actions: int, hidden_dim: int = 128) -> None:
200
+ super().__init__()
201
+ self.n_states = n_states
202
+ self.n_actions = n_actions
203
+
204
+ self.trunk = nn.Sequential(
205
+ nn.Linear(n_states, hidden_dim),
206
+ nn.ReLU(),
207
+ nn.Linear(hidden_dim, hidden_dim),
208
+ nn.ReLU(),
209
+ )
210
+ self.actor_cons = nn.Linear(hidden_dim, n_actions)
211
+ self.actor_aggr = nn.Linear(hidden_dim, n_actions)
212
+ self.gate = nn.Linear(hidden_dim, 1)
213
+ self.critic = nn.Linear(hidden_dim, 1)
214
+
215
+ def forward(self, state_one_hot: torch.Tensor) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor]:
216
+ z = self.trunk(state_one_hot)
217
+ logits_cons = self.actor_cons(z)
218
+ logits_aggr = self.actor_aggr(z)
219
+ rho = torch.sigmoid(self.gate(z)) # [B, 1]
220
+ value = self.critic(z).squeeze(-1) # [B]
221
+
222
+ # mixture in logit space
223
+ logits_mix = (1.0 - rho) * logits_cons + rho * logits_aggr
224
+ return logits_mix, value, rho.squeeze(-1), logits_cons * 1.0 # last term unused but can help debugging
225
+
226
+
227
+ class LevoParadoxPPOHybrid:
228
+ """
229
+ GPU-ready PPO hybrid engine with isomeric policy.
230
+
231
+ This agent combines:
232
+ - an isomeric actor (conservative + aggressive heads),
233
+ - a gating network rho(s) trained end-to-end,
234
+ - PPO-style clipped policy updates,
235
+ - and a value baseline for variance reduction.
236
+
237
+ It operates directly on the discrete Epistemic Valley state space using
238
+ a one-hot encoding, which keeps things simple and fully reproducible.
239
+ """
240
+
241
+ def __init__(
242
+ self,
243
+ n_states: int,
244
+ n_actions: int,
245
+ gamma: float = 0.99,
246
+ lam: float = 0.95,
247
+ clip_eps: float = 0.2,
248
+ entropy_coef: float = 0.01,
249
+ value_coef: float = 0.5,
250
+ lr: float = 3e-4,
251
+ batch_size: int = 256,
252
+ update_epochs: int = 8,
253
+ seed: Optional[int] = None,
254
+ ) -> None:
255
+ if torch is None:
256
+ raise RuntimeError("PyTorch is required for LevoParadoxPPOHybrid.")
257
+
258
+ self.n_states = n_states
259
+ self.n_actions = n_actions
260
+ self.gamma = gamma
261
+ self.lam = lam
262
+ self.clip_eps = clip_eps
263
+ self.entropy_coef = entropy_coef
264
+ self.value_coef = value_coef
265
+ self.batch_size = batch_size
266
+ self.update_epochs = update_epochs
267
+
268
+ if seed is not None:
269
+ torch.manual_seed(seed)
270
+ np.random.seed(seed)
271
+
272
+ self.device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
273
+ self.net = ParadoxActorCritic(n_states, n_actions).to(self.device)
274
+ self.optimizer = optim.Adam(self.net.parameters(), lr=lr)
275
+
276
+ self.buffer: List[Transition] = []
277
+
278
+ # ---------------------------- utilities -----------------------------
279
+
280
+ def _one_hot(self, idx: np.ndarray | int) -> torch.Tensor:
281
+ idx_arr = np.atleast_1d(idx).astype(np.int64)
282
+ x = np.zeros((idx_arr.shape[0], self.n_states), dtype=np.float32)
283
+ x[np.arange(idx_arr.shape[0]), idx_arr] = 1.0
284
+ return torch.from_numpy(x).to(self.device)
285
+
286
+ # ---------------------------- interaction ---------------------------
287
+
288
+ def select_action(self, s_idx: int) -> Tuple[int, float, float, float]:
289
+ """Return (action, log_prob, value_estimate, rho)."""
290
+ self.net.eval()
291
+ state_one_hot = self._one_hot(s_idx)
292
+ logits_mix, value, rho, _ = self.net(state_one_hot) # type: ignore[misc]
293
+ dist = torch.distributions.Categorical(logits=logits_mix)
294
+ action = dist.sample()
295
+ log_prob = dist.log_prob(action)
296
+ return int(action.item()), float(log_prob.item()), float(value.item()), float(rho.item())
297
+
298
+ def store_transition(
299
+ self,
300
+ s_idx: int,
301
+ action: int,
302
+ reward: float,
303
+ log_prob: float,
304
+ value: float,
305
+ rho: float,
306
+ failure_mode: str,
307
+ ) -> None:
308
+ self.buffer.append(
309
+ Transition(
310
+ state_idx=int(s_idx),
311
+ action=int(action),
312
+ reward=float(reward),
313
+ log_prob=float(log_prob),
314
+ value=float(value),
315
+ rho=float(rho),
316
+ failure_mode=failure_mode,
317
+ )
318
+ )
319
+
320
+ # ---------------------------- learning ------------------------------
321
+
322
+ def _compute_advantages(
323
+ self, rewards: np.ndarray, values: np.ndarray
324
+ ) -> Tuple[np.ndarray, np.ndarray]:
325
+ # For one-step episodes, advantage = reward - value, return = reward
326
+ returns = rewards.copy()
327
+ advantages = rewards - values
328
+ # Normalise for stability
329
+ advantages = (advantages - advantages.mean()) / (advantages.std() + 1e-8)
330
+ return returns, advantages
331
+
332
+ def update(self) -> Dict[str, float]:
333
+ if not self.buffer:
334
+ return {}
335
+
336
+ # Collect batch
337
+ states = np.array([t.state_idx for t in self.buffer], dtype=np.int64)
338
+ actions = np.array([t.action for t in self.buffer], dtype=np.int64)
339
+ rewards = np.array([t.reward for t in self.buffer], dtype=np.float32)
340
+ old_log_probs = np.array([t.log_prob for t in self.buffer], dtype=np.float32)
341
+ values = np.array([t.value for t in self.buffer], dtype=np.float32)
342
+
343
+ returns, advantages = self._compute_advantages(rewards, values)
344
+
345
+ # Convert to tensors
346
+ states_t = self._one_hot(states)
347
+ actions_t = torch.from_numpy(actions).to(self.device)
348
+ returns_t = torch.from_numpy(returns).to(self.device)
349
+ advantages_t = torch.from_numpy(advantages).to(self.device)
350
+ old_log_probs_t = torch.from_numpy(old_log_probs).to(self.device)
351
+
352
+ dataset_size = states_t.size(0)
353
+ idxs = np.arange(dataset_size)
354
+
355
+ stats: Dict[str, float] = {}
356
+
357
+ self.net.train()
358
+ for _ in range(self.update_epochs):
359
+ np.random.shuffle(idxs)
360
+ for start in range(0, dataset_size, self.batch_size):
361
+ batch_idx = idxs[start : start + self.batch_size]
362
+ if len(batch_idx) == 0:
363
+ continue
364
+
365
+ batch_states = states_t[batch_idx]
366
+ batch_actions = actions_t[batch_idx]
367
+ batch_returns = returns_t[batch_idx]
368
+ batch_adv = advantages_t[batch_idx]
369
+ batch_old_logp = old_log_probs_t[batch_idx]
370
+
371
+ logits_mix, values_pred, _, _ = self.net(batch_states) # type: ignore[misc]
372
+ dist = torch.distributions.Categorical(logits=logits_mix)
373
+ log_probs = dist.log_prob(batch_actions)
374
+ entropy = dist.entropy().mean()
375
+
376
+ # PPO clipped objective
377
+ ratio = torch.exp(log_probs - batch_old_logp)
378
+ unclipped = ratio * batch_adv
379
+ clipped = torch.clamp(ratio, 1.0 - self.clip_eps, 1.0 + self.clip_eps) * batch_adv
380
+ policy_loss = -torch.min(unclipped, clipped).mean()
381
+
382
+ value_loss = (batch_returns - values_pred).pow(2).mean()
383
+
384
+ loss = policy_loss + self.value_coef * value_loss - self.entropy_coef * entropy
385
+
386
+ self.optimizer.zero_grad()
387
+ loss.backward()
388
+ torch.nn.utils.clip_grad_norm_(self.net.parameters(), max_norm=1.0)
389
+ self.optimizer.step()
390
+
391
+ stats = {
392
+ "policy_loss": float(policy_loss.item()),
393
+ "value_loss": float(value_loss.item()),
394
+ "entropy": float(entropy.item()),
395
+ }
396
+
397
+ # clear buffer
398
+ self.buffer.clear()
399
+ return stats
Down/down/results/paradox_ppo_results.csv ADDED
@@ -0,0 +1,1201 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ global_episode,phase,episode,env_seed,agent,episode_reward,failure_mode,rho_state
2
+ 0,1,0,960941037,LevoParadoxPPOHybrid,1.3,neutral,0.4752805233001709
3
+ 1,1,1,2135581874,LevoParadoxPPOHybrid,1.3,neutral,0.47838863730430603
4
+ 2,1,2,2131554306,LevoParadoxPPOHybrid,0.0,neutral,0.47702598571777344
5
+ 3,1,3,820359671,LevoParadoxPPOHybrid,1.2,neutral,0.4746558368206024
6
+ 4,1,4,2047814545,LevoParadoxPPOHybrid,0.0,neutral,0.47702598571777344
7
+ 5,1,5,1776286830,LevoParadoxPPOHybrid,1.2,neutral,0.4746558368206024
8
+ 6,1,6,1373214917,LevoParadoxPPOHybrid,1.2,neutral,0.4743559956550598
9
+ 7,1,7,1797992013,LevoParadoxPPOHybrid,0.0,neutral,0.4752705693244934
10
+ 8,1,8,1645535739,LevoParadoxPPOHybrid,1.2,neutral,0.4746558368206024
11
+ 9,1,9,2095533891,LevoParadoxPPOHybrid,0.0,neutral,0.4752805233001709
12
+ 10,1,10,829401385,LevoParadoxPPOHybrid,0.0,neutral,0.48266562819480896
13
+ 11,1,11,165839486,LevoParadoxPPOHybrid,0.0,neutral,0.4784092605113983
14
+ 12,1,12,976680886,LevoParadoxPPOHybrid,-2.0,overconfident,0.4743559956550598
15
+ 13,1,13,681732448,LevoParadoxPPOHybrid,0.0,neutral,0.48266562819480896
16
+ 14,1,14,1046126860,LevoParadoxPPOHybrid,1.3,neutral,0.4752705693244934
17
+ 15,1,15,1974730198,LevoParadoxPPOHybrid,0.0,neutral,0.4789677560329437
18
+ 16,1,16,2073558604,LevoParadoxPPOHybrid,1.3,neutral,0.47702598571777344
19
+ 17,1,17,1451418837,LevoParadoxPPOHybrid,0.0,neutral,0.4780098497867584
20
+ 18,1,18,1365011226,LevoParadoxPPOHybrid,1.3,neutral,0.47567713260650635
21
+ 19,1,19,613804374,LevoParadoxPPOHybrid,0.0,neutral,0.47656360268592834
22
+ 20,1,20,32280267,LevoParadoxPPOHybrid,0.0,neutral,0.4780098497867584
23
+ 21,1,21,836537275,LevoParadoxPPOHybrid,0.0,neutral,0.4784092605113983
24
+ 22,1,22,975647501,LevoParadoxPPOHybrid,-0.8,overcautious,0.4810570776462555
25
+ 23,1,23,494392738,LevoParadoxPPOHybrid,1.3,neutral,0.47838863730430603
26
+ 24,1,24,1706901824,LevoParadoxPPOHybrid,0.0,neutral,0.4784092605113983
27
+ 25,1,25,358546340,LevoParadoxPPOHybrid,1.3,neutral,0.4752705693244934
28
+ 26,1,26,1030268022,LevoParadoxPPOHybrid,0.0,neutral,0.4743559956550598
29
+ 27,1,27,329502221,LevoParadoxPPOHybrid,2.5,neutral,0.4768047034740448
30
+ 28,1,28,746578914,LevoParadoxPPOHybrid,0.0,neutral,0.4752705693244934
31
+ 29,1,29,2091845998,LevoParadoxPPOHybrid,0.0,neutral,0.4784092605113983
32
+ 30,1,30,1436029081,LevoParadoxPPOHybrid,0.0,neutral,0.48266562819480896
33
+ 31,1,31,910309404,LevoParadoxPPOHybrid,0.0,neutral,0.4772508144378662
34
+ 32,1,32,472048561,LevoParadoxPPOHybrid,0.0,neutral,0.47567713260650635
35
+ 33,1,33,135600480,LevoParadoxPPOHybrid,0.0,neutral,0.4772508144378662
36
+ 34,1,34,1892894588,LevoParadoxPPOHybrid,1.3,neutral,0.47656360268592834
37
+ 35,1,35,1055673936,LevoParadoxPPOHybrid,1.2,neutral,0.4746558368206024
38
+ 36,1,36,1340667110,LevoParadoxPPOHybrid,-2.0,overconfident,0.47555792331695557
39
+ 37,1,37,619212679,LevoParadoxPPOHybrid,-2.0,overconfident,0.4743559956550598
40
+ 38,1,38,120545107,LevoParadoxPPOHybrid,0.0,neutral,0.47838863730430603
41
+ 39,1,39,454442609,LevoParadoxPPOHybrid,-0.8,overcautious,0.4768047034740448
42
+ 40,1,40,295287540,LevoParadoxPPOHybrid,1.2,neutral,0.4746558368206024
43
+ 41,1,41,445457645,LevoParadoxPPOHybrid,1.3,neutral,0.4784092605113983
44
+ 42,1,42,307622279,LevoParadoxPPOHybrid,1.3,neutral,0.4789677560329437
45
+ 43,1,43,1243437117,LevoParadoxPPOHybrid,0.0,neutral,0.4789677560329437
46
+ 44,1,44,244133596,LevoParadoxPPOHybrid,0.0,neutral,0.4752805233001709
47
+ 45,1,45,1268841274,LevoParadoxPPOHybrid,0.0,neutral,0.4780098497867584
48
+ 46,1,46,1225761364,LevoParadoxPPOHybrid,0.0,neutral,0.47656360268592834
49
+ 47,1,47,1907103971,LevoParadoxPPOHybrid,0.0,neutral,0.48266562819480896
50
+ 48,1,48,1034799201,LevoParadoxPPOHybrid,0.0,neutral,0.4752805233001709
51
+ 49,1,49,235864475,LevoParadoxPPOHybrid,1.2,neutral,0.4746558368206024
52
+ 50,1,50,691379092,LevoParadoxPPOHybrid,-2.0,overconfident,0.47555792331695557
53
+ 51,1,51,1065800727,LevoParadoxPPOHybrid,-0.8,overcautious,0.4810570776462555
54
+ 52,1,52,655184241,LevoParadoxPPOHybrid,-2.0,overconfident,0.4746558368206024
55
+ 53,1,53,623054291,LevoParadoxPPOHybrid,0.0,neutral,0.4810570776462555
56
+ 54,1,54,540036626,LevoParadoxPPOHybrid,0.0,neutral,0.4768047034740448
57
+ 55,1,55,1043358048,LevoParadoxPPOHybrid,0.0,neutral,0.47555792331695557
58
+ 56,1,56,1932965406,LevoParadoxPPOHybrid,1.3,neutral,0.48266562819480896
59
+ 57,1,57,2036930070,LevoParadoxPPOHybrid,0.0,neutral,0.4752705693244934
60
+ 58,1,58,1526743940,LevoParadoxPPOHybrid,0.0,neutral,0.4752705693244934
61
+ 59,1,59,1989662969,LevoParadoxPPOHybrid,-0.8,overcautious,0.4768047034740448
62
+ 60,1,60,2139514329,LevoParadoxPPOHybrid,0.0,neutral,0.47838863730430603
63
+ 61,1,61,1632303898,LevoParadoxPPOHybrid,1.3,neutral,0.4789677560329437
64
+ 62,1,62,1850997508,LevoParadoxPPOHybrid,0.0,neutral,0.47656360268592834
65
+ 63,1,63,1679388031,LevoParadoxPPOHybrid,1.3,neutral,0.4784092605113983
66
+ 64,1,64,994656789,LevoParadoxPPOHybrid,1.3,neutral,0.47567713260650635
67
+ 65,1,65,596802772,LevoParadoxPPOHybrid,0.0,neutral,0.47656360268592834
68
+ 66,1,66,2022213408,LevoParadoxPPOHybrid,0.0,neutral,0.4810570776462555
69
+ 67,1,67,1111583775,LevoParadoxPPOHybrid,0.0,neutral,0.47555792331695557
70
+ 68,1,68,243487825,LevoParadoxPPOHybrid,1.3,neutral,0.47656360268592834
71
+ 69,1,69,1727825584,LevoParadoxPPOHybrid,0.0,neutral,0.4810570776462555
72
+ 70,1,70,138221208,LevoParadoxPPOHybrid,0.0,neutral,0.4789677560329437
73
+ 71,1,71,1644995000,LevoParadoxPPOHybrid,0.0,neutral,0.4746558368206024
74
+ 72,1,72,609184021,LevoParadoxPPOHybrid,0.0,neutral,0.4752805233001709
75
+ 73,1,73,1231929388,LevoParadoxPPOHybrid,1.2,neutral,0.47555792331695557
76
+ 74,1,74,1344075265,LevoParadoxPPOHybrid,0.0,neutral,0.4740993082523346
77
+ 75,1,75,1828410100,LevoParadoxPPOHybrid,-2.0,overconfident,0.4746558368206024
78
+ 76,1,76,2048576691,LevoParadoxPPOHybrid,-2.0,overconfident,0.4743559956550598
79
+ 77,1,77,1829711174,LevoParadoxPPOHybrid,0.0,neutral,0.47656360268592834
80
+ 78,1,78,993502358,LevoParadoxPPOHybrid,0.0,neutral,0.47656360268592834
81
+ 79,1,79,796970628,LevoParadoxPPOHybrid,-0.8,overcautious,0.4768047034740448
82
+ 80,1,80,1037953041,LevoParadoxPPOHybrid,0.0,neutral,0.47702598571777344
83
+ 81,1,81,981620733,LevoParadoxPPOHybrid,1.3,neutral,0.47702598571777344
84
+ 82,1,82,729569317,LevoParadoxPPOHybrid,0.0,neutral,0.4768047034740448
85
+ 83,1,83,646784317,LevoParadoxPPOHybrid,-2.0,overconfident,0.4743559956550598
86
+ 84,1,84,740999785,LevoParadoxPPOHybrid,1.3,neutral,0.47702598571777344
87
+ 85,1,85,1740597160,LevoParadoxPPOHybrid,0.0,neutral,0.4746558368206024
88
+ 86,1,86,661906414,LevoParadoxPPOHybrid,0.0,neutral,0.47838863730430603
89
+ 87,1,87,1060388906,LevoParadoxPPOHybrid,1.3,neutral,0.4789677560329437
90
+ 88,1,88,359430184,LevoParadoxPPOHybrid,2.5,neutral,0.4758386015892029
91
+ 89,1,89,1208987810,LevoParadoxPPOHybrid,0.0,neutral,0.4780098497867584
92
+ 90,1,90,2009099257,LevoParadoxPPOHybrid,0.0,neutral,0.4780098497867584
93
+ 91,1,91,1034716133,LevoParadoxPPOHybrid,0.0,neutral,0.47656360268592834
94
+ 92,1,92,868969428,LevoParadoxPPOHybrid,-2.0,overconfident,0.47555792331695557
95
+ 93,1,93,545077016,LevoParadoxPPOHybrid,2.5,neutral,0.4758386015892029
96
+ 94,1,94,618241786,LevoParadoxPPOHybrid,1.3,neutral,0.4780098497867584
97
+ 95,1,95,2112109137,LevoParadoxPPOHybrid,-0.8,overcautious,0.4758386015892029
98
+ 96,1,96,300763006,LevoParadoxPPOHybrid,0.0,neutral,0.4740993082523346
99
+ 97,1,97,1182747845,LevoParadoxPPOHybrid,0.0,neutral,0.47838863730430603
100
+ 98,1,98,997933218,LevoParadoxPPOHybrid,0.0,neutral,0.4784092605113983
101
+ 99,1,99,2082537479,LevoParadoxPPOHybrid,0.0,neutral,0.47702598571777344
102
+ 100,1,100,948374647,LevoParadoxPPOHybrid,1.3,neutral,0.4772508144378662
103
+ 101,1,101,484158897,LevoParadoxPPOHybrid,0.0,neutral,0.4789677560329437
104
+ 102,1,102,1023803420,LevoParadoxPPOHybrid,2.5,neutral,0.4758386015892029
105
+ 103,1,103,1933155352,LevoParadoxPPOHybrid,-0.8,overcautious,0.4758386015892029
106
+ 104,1,104,531436601,LevoParadoxPPOHybrid,0.0,neutral,0.47567713260650635
107
+ 105,1,105,693213698,LevoParadoxPPOHybrid,0.0,neutral,0.48266562819480896
108
+ 106,1,106,1411219987,LevoParadoxPPOHybrid,-0.8,overcautious,0.4810570776462555
109
+ 107,1,107,707739816,LevoParadoxPPOHybrid,1.3,neutral,0.47702598571777344
110
+ 108,1,108,7444596,LevoParadoxPPOHybrid,1.3,neutral,0.47702598571777344
111
+ 109,1,109,1531464733,LevoParadoxPPOHybrid,0.0,neutral,0.4752705693244934
112
+ 110,1,110,1407225246,LevoParadoxPPOHybrid,0.0,neutral,0.47567713260650635
113
+ 111,1,111,1617971802,LevoParadoxPPOHybrid,0.0,neutral,0.4758386015892029
114
+ 112,1,112,1856904126,LevoParadoxPPOHybrid,1.3,neutral,0.47656360268592834
115
+ 113,1,113,2080438781,LevoParadoxPPOHybrid,-2.0,overconfident,0.4743559956550598
116
+ 114,1,114,92845013,LevoParadoxPPOHybrid,1.3,neutral,0.4752705693244934
117
+ 115,1,115,2051487433,LevoParadoxPPOHybrid,0.0,neutral,0.4752805233001709
118
+ 116,1,116,1625881056,LevoParadoxPPOHybrid,0.0,neutral,0.4780098497867584
119
+ 117,1,117,1999467027,LevoParadoxPPOHybrid,0.0,neutral,0.4772508144378662
120
+ 118,1,118,759769092,LevoParadoxPPOHybrid,2.5,neutral,0.4768047034740448
121
+ 119,1,119,1368848130,LevoParadoxPPOHybrid,0.0,neutral,0.4740993082523346
122
+ 120,1,120,2079957582,LevoParadoxPPOHybrid,1.3,neutral,0.4752705693244934
123
+ 121,1,121,858968924,LevoParadoxPPOHybrid,1.3,neutral,0.47656360268592834
124
+ 122,1,122,2037278180,LevoParadoxPPOHybrid,0.0,neutral,0.47656360268592834
125
+ 123,1,123,301224287,LevoParadoxPPOHybrid,-0.8,overcautious,0.4810570776462555
126
+ 124,1,124,595106119,LevoParadoxPPOHybrid,0.0,neutral,0.47656360268592834
127
+ 125,1,125,830628267,LevoParadoxPPOHybrid,0.0,neutral,0.4740993082523346
128
+ 126,1,126,2056643707,LevoParadoxPPOHybrid,1.3,neutral,0.47838863730430603
129
+ 127,1,127,676826452,LevoParadoxPPOHybrid,0.0,neutral,0.4772508144378662
130
+ 128,1,128,1391976925,LevoParadoxPPOHybrid,-0.8,overcautious,0.4810570776462555
131
+ 129,1,129,1312449805,LevoParadoxPPOHybrid,-2.0,overconfident,0.4743559956550598
132
+ 130,1,130,441735078,LevoParadoxPPOHybrid,0.0,neutral,0.4810570776462555
133
+ 131,1,131,1198114699,LevoParadoxPPOHybrid,0.0,neutral,0.4789677560329437
134
+ 132,1,132,1177544228,LevoParadoxPPOHybrid,0.0,neutral,0.48266562819480896
135
+ 133,1,133,235682355,LevoParadoxPPOHybrid,0.0,neutral,0.47838863730430603
136
+ 134,1,134,594730155,LevoParadoxPPOHybrid,2.5,neutral,0.4768047034740448
137
+ 135,1,135,1031283908,LevoParadoxPPOHybrid,0.0,neutral,0.4743559956550598
138
+ 136,1,136,1468565562,LevoParadoxPPOHybrid,0.0,neutral,0.47567713260650635
139
+ 137,1,137,1799515670,LevoParadoxPPOHybrid,1.2,neutral,0.47555792331695557
140
+ 138,1,138,1374703813,LevoParadoxPPOHybrid,0.0,neutral,0.48266562819480896
141
+ 139,1,139,1412669082,LevoParadoxPPOHybrid,0.0,neutral,0.4772508144378662
142
+ 140,1,140,342509991,LevoParadoxPPOHybrid,0.0,neutral,0.4752705693244934
143
+ 141,1,141,129641700,LevoParadoxPPOHybrid,1.2,neutral,0.47555792331695557
144
+ 142,1,142,1979539584,LevoParadoxPPOHybrid,0.0,neutral,0.4746558368206024
145
+ 143,1,143,181563758,LevoParadoxPPOHybrid,0.0,neutral,0.4789677560329437
146
+ 144,1,144,2121376515,LevoParadoxPPOHybrid,1.3,neutral,0.47702598571777344
147
+ 145,1,145,359483640,LevoParadoxPPOHybrid,-2.0,overconfident,0.47555792331695557
148
+ 146,1,146,1009660805,LevoParadoxPPOHybrid,1.3,neutral,0.47702598571777344
149
+ 147,1,147,1772095163,LevoParadoxPPOHybrid,-0.8,overcautious,0.4768047034740448
150
+ 148,1,148,793047113,LevoParadoxPPOHybrid,0.0,neutral,0.4752705693244934
151
+ 149,1,149,2123812620,LevoParadoxPPOHybrid,1.2,neutral,0.47555792331695557
152
+ 150,1,150,160023209,LevoParadoxPPOHybrid,-2.0,overconfident,0.47555792331695557
153
+ 151,1,151,883833601,LevoParadoxPPOHybrid,0.0,neutral,0.4784092605113983
154
+ 152,1,152,1345236526,LevoParadoxPPOHybrid,0.0,neutral,0.4784092605113983
155
+ 153,1,153,2123563640,LevoParadoxPPOHybrid,1.3,neutral,0.4740993082523346
156
+ 154,1,154,1188897582,LevoParadoxPPOHybrid,0.0,neutral,0.4752705693244934
157
+ 155,1,155,1835296655,LevoParadoxPPOHybrid,1.3,neutral,0.47567713260650635
158
+ 156,1,156,263292300,LevoParadoxPPOHybrid,0.0,neutral,0.47702598571777344
159
+ 157,1,157,339487389,LevoParadoxPPOHybrid,0.0,neutral,0.4740993082523346
160
+ 158,1,158,640187192,LevoParadoxPPOHybrid,2.5,neutral,0.4758386015892029
161
+ 159,1,159,1603617236,LevoParadoxPPOHybrid,0.0,neutral,0.48266562819480896
162
+ 160,1,160,437479272,LevoParadoxPPOHybrid,-0.8,overcautious,0.4768047034740448
163
+ 161,1,161,1297938304,LevoParadoxPPOHybrid,0.0,neutral,0.4752805233001709
164
+ 162,1,162,1736782144,LevoParadoxPPOHybrid,0.0,neutral,0.4740993082523346
165
+ 163,1,163,1188005741,LevoParadoxPPOHybrid,0.0,neutral,0.4772508144378662
166
+ 164,1,164,1925962876,LevoParadoxPPOHybrid,1.3,neutral,0.4772508144378662
167
+ 165,1,165,1419686978,LevoParadoxPPOHybrid,1.3,neutral,0.47567713260650635
168
+ 166,1,166,113085408,LevoParadoxPPOHybrid,0.0,neutral,0.4772508144378662
169
+ 167,1,167,2107650812,LevoParadoxPPOHybrid,0.0,neutral,0.4740993082523346
170
+ 168,1,168,1556544035,LevoParadoxPPOHybrid,0.0,neutral,0.4789677560329437
171
+ 169,1,169,409268109,LevoParadoxPPOHybrid,0.0,neutral,0.47656360268592834
172
+ 170,1,170,1707984479,LevoParadoxPPOHybrid,0.0,neutral,0.47838863730430603
173
+ 171,1,171,2028373425,LevoParadoxPPOHybrid,0.0,neutral,0.4789677560329437
174
+ 172,1,172,1712063860,LevoParadoxPPOHybrid,0.0,neutral,0.48266562819480896
175
+ 173,1,173,729831432,LevoParadoxPPOHybrid,0.0,neutral,0.4780098497867584
176
+ 174,1,174,1945712103,LevoParadoxPPOHybrid,0.0,neutral,0.4810570776462555
177
+ 175,1,175,1662118687,LevoParadoxPPOHybrid,1.3,neutral,0.4784092605113983
178
+ 176,1,176,1263277082,LevoParadoxPPOHybrid,0.0,neutral,0.4752705693244934
179
+ 177,1,177,600780774,LevoParadoxPPOHybrid,0.0,neutral,0.47567713260650635
180
+ 178,1,178,389237547,LevoParadoxPPOHybrid,1.3,neutral,0.4752705693244934
181
+ 179,1,179,531352528,LevoParadoxPPOHybrid,0.0,neutral,0.4740993082523346
182
+ 180,1,180,308998320,LevoParadoxPPOHybrid,1.2,neutral,0.47555792331695557
183
+ 181,1,181,133112608,LevoParadoxPPOHybrid,0.0,neutral,0.47702598571777344
184
+ 182,1,182,1335500866,LevoParadoxPPOHybrid,0.0,neutral,0.47656360268592834
185
+ 183,1,183,1455247303,LevoParadoxPPOHybrid,2.5,neutral,0.4758386015892029
186
+ 184,1,184,818574077,LevoParadoxPPOHybrid,-2.0,overconfident,0.4746558368206024
187
+ 185,1,185,783962675,LevoParadoxPPOHybrid,0.0,neutral,0.4743559956550598
188
+ 186,1,186,181722168,LevoParadoxPPOHybrid,-0.8,overcautious,0.4768047034740448
189
+ 187,1,187,922465315,LevoParadoxPPOHybrid,1.3,neutral,0.47567713260650635
190
+ 188,1,188,1058682574,LevoParadoxPPOHybrid,0.0,neutral,0.4784092605113983
191
+ 189,1,189,2126397323,LevoParadoxPPOHybrid,0.0,neutral,0.4752805233001709
192
+ 190,1,190,23796221,LevoParadoxPPOHybrid,0.0,neutral,0.4743559956550598
193
+ 191,1,191,677074079,LevoParadoxPPOHybrid,0.0,neutral,0.4810570776462555
194
+ 192,1,192,1977263236,LevoParadoxPPOHybrid,-2.0,overconfident,0.47555792331695557
195
+ 193,1,193,1768875981,LevoParadoxPPOHybrid,0.0,neutral,0.47838863730430603
196
+ 194,1,194,1212545188,LevoParadoxPPOHybrid,2.5,neutral,0.4758386015892029
197
+ 195,1,195,1186674390,LevoParadoxPPOHybrid,1.3,neutral,0.47656360268592834
198
+ 196,1,196,1056632766,LevoParadoxPPOHybrid,0.0,neutral,0.4752805233001709
199
+ 197,1,197,268535661,LevoParadoxPPOHybrid,1.3,neutral,0.4752705693244934
200
+ 198,1,198,888167157,LevoParadoxPPOHybrid,1.2,neutral,0.4743559956550598
201
+ 199,1,199,530391691,LevoParadoxPPOHybrid,1.3,neutral,0.48266562819480896
202
+ 200,1,200,50594990,LevoParadoxPPOHybrid,2.5,neutral,0.4758386015892029
203
+ 201,1,201,222395105,LevoParadoxPPOHybrid,-2.0,overconfident,0.47555792331695557
204
+ 202,1,202,287284573,LevoParadoxPPOHybrid,0.0,neutral,0.4752705693244934
205
+ 203,1,203,514973304,LevoParadoxPPOHybrid,0.0,neutral,0.4752705693244934
206
+ 204,1,204,1909475802,LevoParadoxPPOHybrid,-0.8,overcautious,0.4810570776462555
207
+ 205,1,205,1879525266,LevoParadoxPPOHybrid,-2.0,overconfident,0.4743559956550598
208
+ 206,1,206,1420380137,LevoParadoxPPOHybrid,-0.8,overcautious,0.4810570776462555
209
+ 207,1,207,1737331410,LevoParadoxPPOHybrid,0.0,neutral,0.4789677560329437
210
+ 208,1,208,1064923684,LevoParadoxPPOHybrid,0.0,neutral,0.47567713260650635
211
+ 209,1,209,1238273317,LevoParadoxPPOHybrid,0.0,neutral,0.4789677560329437
212
+ 210,1,210,144185798,LevoParadoxPPOHybrid,1.3,neutral,0.48266562819480896
213
+ 211,1,211,575162410,LevoParadoxPPOHybrid,0.0,neutral,0.4780098497867584
214
+ 212,1,212,707283582,LevoParadoxPPOHybrid,-0.8,overcautious,0.4758386015892029
215
+ 213,1,213,1405835406,LevoParadoxPPOHybrid,0.0,neutral,0.4740993082523346
216
+ 214,1,214,789235422,LevoParadoxPPOHybrid,0.0,neutral,0.47567713260650635
217
+ 215,1,215,1388271326,LevoParadoxPPOHybrid,0.0,neutral,0.4752805233001709
218
+ 216,1,216,1865718892,LevoParadoxPPOHybrid,0.0,neutral,0.47567713260650635
219
+ 217,1,217,1293915651,LevoParadoxPPOHybrid,0.0,neutral,0.47567713260650635
220
+ 218,1,218,1428150647,LevoParadoxPPOHybrid,0.0,neutral,0.4810570776462555
221
+ 219,1,219,19248056,LevoParadoxPPOHybrid,-0.8,overcautious,0.4758386015892029
222
+ 220,1,220,491031830,LevoParadoxPPOHybrid,1.3,neutral,0.47567713260650635
223
+ 221,1,221,636126198,LevoParadoxPPOHybrid,1.3,neutral,0.4789677560329437
224
+ 222,1,222,456728828,LevoParadoxPPOHybrid,0.0,neutral,0.4743559956550598
225
+ 223,1,223,966697912,LevoParadoxPPOHybrid,0.0,neutral,0.47555792331695557
226
+ 224,1,224,1166498720,LevoParadoxPPOHybrid,0.0,neutral,0.47656360268592834
227
+ 225,1,225,1571014065,LevoParadoxPPOHybrid,2.5,neutral,0.4768047034740448
228
+ 226,1,226,714126436,LevoParadoxPPOHybrid,0.0,neutral,0.47567713260650635
229
+ 227,1,227,1206418342,LevoParadoxPPOHybrid,0.0,neutral,0.47656360268592834
230
+ 228,1,228,1372090007,LevoParadoxPPOHybrid,-2.0,overconfident,0.4743559956550598
231
+ 229,1,229,769009050,LevoParadoxPPOHybrid,2.5,neutral,0.4758386015892029
232
+ 230,1,230,1353001314,LevoParadoxPPOHybrid,0.0,neutral,0.47702598571777344
233
+ 231,1,231,1733327736,LevoParadoxPPOHybrid,1.3,neutral,0.4752705693244934
234
+ 232,1,232,638285556,LevoParadoxPPOHybrid,1.3,neutral,0.48266562819480896
235
+ 233,1,233,988454733,LevoParadoxPPOHybrid,0.0,neutral,0.4784092605113983
236
+ 234,1,234,1459581848,LevoParadoxPPOHybrid,0.0,neutral,0.47567713260650635
237
+ 235,1,235,1106839428,LevoParadoxPPOHybrid,1.2,neutral,0.47555792331695557
238
+ 236,1,236,388494700,LevoParadoxPPOHybrid,-2.0,overconfident,0.47555792331695557
239
+ 237,1,237,1441804184,LevoParadoxPPOHybrid,0.0,neutral,0.4789677560329437
240
+ 238,1,238,683008548,LevoParadoxPPOHybrid,1.3,neutral,0.4784092605113983
241
+ 239,1,239,557447257,LevoParadoxPPOHybrid,0.0,neutral,0.4789677560329437
242
+ 240,1,240,1553434256,LevoParadoxPPOHybrid,-2.0,overconfident,0.4746558368206024
243
+ 241,1,241,1196216329,LevoParadoxPPOHybrid,0.0,neutral,0.4740993082523346
244
+ 242,1,242,205445195,LevoParadoxPPOHybrid,0.0,neutral,0.47567713260650635
245
+ 243,1,243,138987130,LevoParadoxPPOHybrid,1.3,neutral,0.48266562819480896
246
+ 244,1,244,1601279830,LevoParadoxPPOHybrid,0.0,neutral,0.4752805233001709
247
+ 245,1,245,523497866,LevoParadoxPPOHybrid,0.0,neutral,0.4768047034740448
248
+ 246,1,246,1681903654,LevoParadoxPPOHybrid,1.3,neutral,0.4772508144378662
249
+ 247,1,247,1447758672,LevoParadoxPPOHybrid,0.0,neutral,0.4784092605113983
250
+ 248,1,248,1263090791,LevoParadoxPPOHybrid,0.0,neutral,0.4746558368206024
251
+ 249,1,249,2069934169,LevoParadoxPPOHybrid,1.3,neutral,0.4752705693244934
252
+ 250,1,250,1175589659,LevoParadoxPPOHybrid,0.0,neutral,0.4746558368206024
253
+ 251,1,251,792436927,LevoParadoxPPOHybrid,1.3,neutral,0.4789677560329437
254
+ 252,1,252,77793463,LevoParadoxPPOHybrid,1.3,neutral,0.47567713260650635
255
+ 253,1,253,1178447001,LevoParadoxPPOHybrid,0.0,neutral,0.4752805233001709
256
+ 254,1,254,1867902247,LevoParadoxPPOHybrid,1.3,neutral,0.47702598571777344
257
+ 255,1,255,1132483487,LevoParadoxPPOHybrid,0.0,neutral,0.48266562819480896
258
+ 256,1,256,1108550737,LevoParadoxPPOHybrid,0.0,neutral,0.4818275570869446
259
+ 257,1,257,761845810,LevoParadoxPPOHybrid,0.0,neutral,0.47729626297950745
260
+ 258,1,258,2026103214,LevoParadoxPPOHybrid,-0.8,overcautious,0.4782043993473053
261
+ 259,1,259,1320383576,LevoParadoxPPOHybrid,-0.8,overcautious,0.4782043993473053
262
+ 260,1,260,165278918,LevoParadoxPPOHybrid,1.2,neutral,0.4783268868923187
263
+ 261,1,261,1264440670,LevoParadoxPPOHybrid,-0.8,overcautious,0.4791228175163269
264
+ 262,1,262,859892894,LevoParadoxPPOHybrid,1.3,neutral,0.48010820150375366
265
+ 263,1,263,411458685,LevoParadoxPPOHybrid,0.0,neutral,0.479666531085968
266
+ 264,1,264,1931263994,LevoParadoxPPOHybrid,0.0,neutral,0.4829937219619751
267
+ 265,1,265,213511530,LevoParadoxPPOHybrid,2.5,neutral,0.48367613554000854
268
+ 266,1,266,1137608613,LevoParadoxPPOHybrid,-2.0,overconfident,0.4773579239845276
269
+ 267,1,267,843567272,LevoParadoxPPOHybrid,0.0,neutral,0.4863224923610687
270
+ 268,1,268,11175988,LevoParadoxPPOHybrid,0.0,neutral,0.48010820150375366
271
+ 269,1,269,687107894,LevoParadoxPPOHybrid,1.3,neutral,0.47729626297950745
272
+ 270,1,270,291918902,LevoParadoxPPOHybrid,-0.8,overcautious,0.4782043993473053
273
+ 271,1,271,1087591275,LevoParadoxPPOHybrid,-0.8,overcautious,0.4782043993473053
274
+ 272,1,272,1813734633,LevoParadoxPPOHybrid,0.0,neutral,0.4791228175163269
275
+ 273,1,273,461816730,LevoParadoxPPOHybrid,0.0,neutral,0.4818275570869446
276
+ 274,1,274,441050625,LevoParadoxPPOHybrid,0.0,neutral,0.4863224923610687
277
+ 275,1,275,2141182885,LevoParadoxPPOHybrid,0.0,neutral,0.4808143377304077
278
+ 276,1,276,749647573,LevoParadoxPPOHybrid,-0.8,overcautious,0.4791228175163269
279
+ 277,1,277,702601389,LevoParadoxPPOHybrid,1.3,neutral,0.4818275570869446
280
+ 278,1,278,500813039,LevoParadoxPPOHybrid,1.3,neutral,0.4829937219619751
281
+ 279,1,279,1327850191,LevoParadoxPPOHybrid,0.0,neutral,0.4788035750389099
282
+ 280,1,280,1479353871,LevoParadoxPPOHybrid,0.0,neutral,0.48367613554000854
283
+ 281,1,281,875883029,LevoParadoxPPOHybrid,-0.8,overcautious,0.4791228175163269
284
+ 282,1,282,956514865,LevoParadoxPPOHybrid,0.0,neutral,0.4773579239845276
285
+ 283,1,283,140168808,LevoParadoxPPOHybrid,2.5,neutral,0.48367613554000854
286
+ 284,1,284,2023927855,LevoParadoxPPOHybrid,0.0,neutral,0.4777975380420685
287
+ 285,1,285,1850097089,LevoParadoxPPOHybrid,0.0,neutral,0.48010820150375366
288
+ 286,1,286,366267895,LevoParadoxPPOHybrid,1.3,neutral,0.48010820150375366
289
+ 287,1,287,833125277,LevoParadoxPPOHybrid,0.0,neutral,0.48244643211364746
290
+ 288,1,288,1062058470,LevoParadoxPPOHybrid,-0.8,overcautious,0.48367613554000854
291
+ 289,1,289,755011055,LevoParadoxPPOHybrid,1.3,neutral,0.4805646538734436
292
+ 290,1,290,1193341725,LevoParadoxPPOHybrid,0.0,neutral,0.4784007668495178
293
+ 291,1,291,47566427,LevoParadoxPPOHybrid,1.3,neutral,0.4829937219619751
294
+ 292,1,292,1480907230,LevoParadoxPPOHybrid,1.3,neutral,0.4818275570869446
295
+ 293,1,293,1193747826,LevoParadoxPPOHybrid,0.0,neutral,0.4863224923610687
296
+ 294,1,294,188056822,LevoParadoxPPOHybrid,1.3,neutral,0.479666531085968
297
+ 295,1,295,2058188731,LevoParadoxPPOHybrid,1.3,neutral,0.4784007668495178
298
+ 296,1,296,131903334,LevoParadoxPPOHybrid,2.5,neutral,0.48367613554000854
299
+ 297,1,297,2023999375,LevoParadoxPPOHybrid,0.0,neutral,0.4782043993473053
300
+ 298,1,298,14284283,LevoParadoxPPOHybrid,1.3,neutral,0.4829937219619751
301
+ 299,1,299,430728515,LevoParadoxPPOHybrid,1.3,neutral,0.4818275570869446
302
+ 300,1,300,1773637227,LevoParadoxPPOHybrid,0.0,neutral,0.4784007668495178
303
+ 301,1,301,1447643177,LevoParadoxPPOHybrid,2.5,neutral,0.4791228175163269
304
+ 302,1,302,980890604,LevoParadoxPPOHybrid,-0.8,overcautious,0.4791228175163269
305
+ 303,1,303,1738676116,LevoParadoxPPOHybrid,2.5,neutral,0.48367613554000854
306
+ 304,1,304,202567723,LevoParadoxPPOHybrid,1.3,neutral,0.479666531085968
307
+ 305,1,305,1153805088,LevoParadoxPPOHybrid,1.2,neutral,0.4783268868923187
308
+ 306,1,306,972971566,LevoParadoxPPOHybrid,-2.0,overconfident,0.4783268868923187
309
+ 307,1,307,1472596543,LevoParadoxPPOHybrid,-0.8,overcautious,0.48367613554000854
310
+ 308,1,308,1472317967,LevoParadoxPPOHybrid,1.3,neutral,0.48244643211364746
311
+ 309,1,309,215008918,LevoParadoxPPOHybrid,0.0,neutral,0.4818275570869446
312
+ 310,1,310,1105771947,LevoParadoxPPOHybrid,0.0,neutral,0.48244643211364746
313
+ 311,1,311,652569339,LevoParadoxPPOHybrid,0.0,neutral,0.4805646538734436
314
+ 312,1,312,1726057777,LevoParadoxPPOHybrid,-0.8,overcautious,0.48367613554000854
315
+ 313,1,313,1485944499,LevoParadoxPPOHybrid,1.3,neutral,0.48244643211364746
316
+ 314,1,314,294205674,LevoParadoxPPOHybrid,0.0,neutral,0.479666531085968
317
+ 315,1,315,1016871026,LevoParadoxPPOHybrid,0.0,neutral,0.4783268868923187
318
+ 316,1,316,1168910589,LevoParadoxPPOHybrid,0.0,neutral,0.48010820150375366
319
+ 317,1,317,1517292813,LevoParadoxPPOHybrid,0.0,neutral,0.4863224923610687
320
+ 318,1,318,2030522066,LevoParadoxPPOHybrid,-0.8,overcautious,0.4782043993473053
321
+ 319,1,319,959589186,LevoParadoxPPOHybrid,1.2,neutral,0.4773579239845276
322
+ 320,1,320,590193953,LevoParadoxPPOHybrid,1.3,neutral,0.479666531085968
323
+ 321,1,321,675005705,LevoParadoxPPOHybrid,0.0,neutral,0.4777975380420685
324
+ 322,1,322,925232956,LevoParadoxPPOHybrid,0.0,neutral,0.4784007668495178
325
+ 323,1,323,1408472699,LevoParadoxPPOHybrid,-0.8,overcautious,0.4791228175163269
326
+ 324,1,324,859189252,LevoParadoxPPOHybrid,1.3,neutral,0.4777975380420685
327
+ 325,1,325,399323533,LevoParadoxPPOHybrid,0.0,neutral,0.48244643211364746
328
+ 326,1,326,980315658,LevoParadoxPPOHybrid,-2.0,overconfident,0.4788035750389099
329
+ 327,1,327,123987181,LevoParadoxPPOHybrid,1.2,neutral,0.4773579239845276
330
+ 328,1,328,409996997,LevoParadoxPPOHybrid,0.0,neutral,0.48010820150375366
331
+ 329,1,329,708892450,LevoParadoxPPOHybrid,-2.0,overconfident,0.4783268868923187
332
+ 330,1,330,1373932302,LevoParadoxPPOHybrid,1.3,neutral,0.47729626297950745
333
+ 331,1,331,2077742390,LevoParadoxPPOHybrid,1.3,neutral,0.4784007668495178
334
+ 332,1,332,761108960,LevoParadoxPPOHybrid,0.0,neutral,0.4784007668495178
335
+ 333,1,333,1211512608,LevoParadoxPPOHybrid,0.0,neutral,0.4863224923610687
336
+ 334,1,334,1884662523,LevoParadoxPPOHybrid,0.0,neutral,0.4777975380420685
337
+ 335,1,335,2002191522,LevoParadoxPPOHybrid,0.0,neutral,0.4863224923610687
338
+ 336,1,336,2028646946,LevoParadoxPPOHybrid,0.0,neutral,0.4818275570869446
339
+ 337,1,337,589112024,LevoParadoxPPOHybrid,0.0,neutral,0.48244643211364746
340
+ 338,1,338,610703030,LevoParadoxPPOHybrid,0.0,neutral,0.4802131950855255
341
+ 339,1,339,972829234,LevoParadoxPPOHybrid,0.0,neutral,0.4777975380420685
342
+ 340,1,340,465154269,LevoParadoxPPOHybrid,2.5,neutral,0.4782043993473053
343
+ 341,1,341,470901255,LevoParadoxPPOHybrid,0.0,neutral,0.48244643211364746
344
+ 342,1,342,1990213325,LevoParadoxPPOHybrid,0.0,neutral,0.47729626297950745
345
+ 343,1,343,1646775850,LevoParadoxPPOHybrid,0.0,neutral,0.4829937219619751
346
+ 344,1,344,1057311607,LevoParadoxPPOHybrid,1.3,neutral,0.4802131950855255
347
+ 345,1,345,590319545,LevoParadoxPPOHybrid,0.0,neutral,0.4802131950855255
348
+ 346,1,346,516318123,LevoParadoxPPOHybrid,1.3,neutral,0.47729626297950745
349
+ 347,1,347,70890343,LevoParadoxPPOHybrid,0.0,neutral,0.47729626297950745
350
+ 348,1,348,804413128,LevoParadoxPPOHybrid,2.5,neutral,0.4782043993473053
351
+ 349,1,349,1504695760,LevoParadoxPPOHybrid,1.3,neutral,0.4805646538734436
352
+ 350,1,350,940669613,LevoParadoxPPOHybrid,0.0,neutral,0.4808143377304077
353
+ 351,1,351,821018278,LevoParadoxPPOHybrid,1.3,neutral,0.48010820150375366
354
+ 352,1,352,2080007758,LevoParadoxPPOHybrid,0.0,neutral,0.48367613554000854
355
+ 353,1,353,461373511,LevoParadoxPPOHybrid,0.0,neutral,0.4808143377304077
356
+ 354,1,354,1987269884,LevoParadoxPPOHybrid,0.0,neutral,0.4805646538734436
357
+ 355,1,355,885162807,LevoParadoxPPOHybrid,1.3,neutral,0.4863224923610687
358
+ 356,1,356,779768070,LevoParadoxPPOHybrid,0.0,neutral,0.4802131950855255
359
+ 357,1,357,966063187,LevoParadoxPPOHybrid,-2.0,overconfident,0.4783268868923187
360
+ 358,1,358,1359588046,LevoParadoxPPOHybrid,1.3,neutral,0.4808143377304077
361
+ 359,1,359,393633121,LevoParadoxPPOHybrid,0.0,neutral,0.4802131950855255
362
+ 360,1,360,991070115,LevoParadoxPPOHybrid,1.3,neutral,0.4818275570869446
363
+ 361,1,361,1695833246,LevoParadoxPPOHybrid,1.3,neutral,0.4808143377304077
364
+ 362,1,362,259218709,LevoParadoxPPOHybrid,0.0,neutral,0.4773579239845276
365
+ 363,1,363,1252523270,LevoParadoxPPOHybrid,1.2,neutral,0.4788035750389099
366
+ 364,1,364,618943155,LevoParadoxPPOHybrid,0.0,neutral,0.48010820150375366
367
+ 365,1,365,1149281050,LevoParadoxPPOHybrid,1.3,neutral,0.4805646538734436
368
+ 366,1,366,605383710,LevoParadoxPPOHybrid,1.3,neutral,0.4784007668495178
369
+ 367,1,367,1156676417,LevoParadoxPPOHybrid,-2.0,overconfident,0.4788035750389099
370
+ 368,1,368,988215448,LevoParadoxPPOHybrid,1.3,neutral,0.4802131950855255
371
+ 369,1,369,1630817173,LevoParadoxPPOHybrid,-0.8,overcautious,0.48367613554000854
372
+ 370,1,370,1326405127,LevoParadoxPPOHybrid,1.3,neutral,0.4863224923610687
373
+ 371,1,371,279363521,LevoParadoxPPOHybrid,1.3,neutral,0.4805646538734436
374
+ 372,1,372,673386525,LevoParadoxPPOHybrid,0.0,neutral,0.479666531085968
375
+ 373,1,373,1485190259,LevoParadoxPPOHybrid,1.3,neutral,0.4808143377304077
376
+ 374,1,374,757249346,LevoParadoxPPOHybrid,1.3,neutral,0.4784007668495178
377
+ 375,1,375,2139173341,LevoParadoxPPOHybrid,-0.8,overcautious,0.4782043993473053
378
+ 376,1,376,1407830714,LevoParadoxPPOHybrid,0.0,neutral,0.4777975380420685
379
+ 377,1,377,1328293493,LevoParadoxPPOHybrid,-2.0,overconfident,0.4783268868923187
380
+ 378,1,378,1561225140,LevoParadoxPPOHybrid,0.0,neutral,0.4802131950855255
381
+ 379,1,379,2054053838,LevoParadoxPPOHybrid,0.0,neutral,0.4791228175163269
382
+ 380,1,380,1538665569,LevoParadoxPPOHybrid,0.0,neutral,0.4773579239845276
383
+ 381,1,381,578245576,LevoParadoxPPOHybrid,1.3,neutral,0.4802131950855255
384
+ 382,1,382,1001750142,LevoParadoxPPOHybrid,1.3,neutral,0.4863224923610687
385
+ 383,1,383,247349919,LevoParadoxPPOHybrid,0.0,neutral,0.48010820150375366
386
+ 384,1,384,1913641746,LevoParadoxPPOHybrid,0.0,neutral,0.48010820150375366
387
+ 385,1,385,191896624,LevoParadoxPPOHybrid,-0.8,overcautious,0.4782043993473053
388
+ 386,1,386,358450787,LevoParadoxPPOHybrid,0.0,neutral,0.47729626297950745
389
+ 387,1,387,1304006934,LevoParadoxPPOHybrid,1.3,neutral,0.4863224923610687
390
+ 388,1,388,854476003,LevoParadoxPPOHybrid,1.3,neutral,0.48244643211364746
391
+ 389,1,389,718810870,LevoParadoxPPOHybrid,0.0,neutral,0.48244643211364746
392
+ 390,1,390,2087848673,LevoParadoxPPOHybrid,0.0,neutral,0.4818275570869446
393
+ 391,1,391,565983639,LevoParadoxPPOHybrid,0.0,neutral,0.48367613554000854
394
+ 392,1,392,406083697,LevoParadoxPPOHybrid,0.0,neutral,0.4805646538734436
395
+ 393,1,393,1812367355,LevoParadoxPPOHybrid,0.0,neutral,0.4818275570869446
396
+ 394,1,394,1054994518,LevoParadoxPPOHybrid,1.3,neutral,0.4802131950855255
397
+ 395,1,395,235136936,LevoParadoxPPOHybrid,0.0,neutral,0.4808143377304077
398
+ 396,1,396,111732250,LevoParadoxPPOHybrid,-2.0,overconfident,0.4773579239845276
399
+ 397,1,397,289408596,LevoParadoxPPOHybrid,1.3,neutral,0.4802131950855255
400
+ 398,1,398,1197540953,LevoParadoxPPOHybrid,0.0,neutral,0.479666531085968
401
+ 399,1,399,34196977,LevoParadoxPPOHybrid,0.0,neutral,0.4818275570869446
402
+ 400,2,0,2034269964,LevoParadoxPPOHybrid,0.0,neutral,0.47760096192359924
403
+ 401,2,1,912146831,LevoParadoxPPOHybrid,0.0,neutral,0.48142847418785095
404
+ 402,2,2,144856919,LevoParadoxPPOHybrid,1.2,neutral,0.47782430052757263
405
+ 403,2,3,685506823,LevoParadoxPPOHybrid,1.2,neutral,0.4803639352321625
406
+ 404,2,4,1939181862,LevoParadoxPPOHybrid,0.0,neutral,0.4791390895843506
407
+ 405,2,5,1502803201,LevoParadoxPPOHybrid,0.0,neutral,0.47879713773727417
408
+ 406,2,6,1504803878,LevoParadoxPPOHybrid,-3.0,overconfident,0.4803639352321625
409
+ 407,2,7,67883367,LevoParadoxPPOHybrid,2.0,neutral,0.48142847418785095
410
+ 408,2,8,235174993,LevoParadoxPPOHybrid,0.8,neutral,0.48121845722198486
411
+ 409,2,9,1767017071,LevoParadoxPPOHybrid,2.0,neutral,0.48142847418785095
412
+ 410,2,10,1195637117,LevoParadoxPPOHybrid,-3.0,overconfident,0.48439839482307434
413
+ 411,2,11,2140388521,LevoParadoxPPOHybrid,0.0,neutral,0.47790008783340454
414
+ 412,2,12,285128217,LevoParadoxPPOHybrid,0.0,neutral,0.47782430052757263
415
+ 413,2,13,1297214282,LevoParadoxPPOHybrid,0.0,neutral,0.4793781638145447
416
+ 414,2,14,2128926662,LevoParadoxPPOHybrid,0.8,neutral,0.4789300858974457
417
+ 415,2,15,1227615478,LevoParadoxPPOHybrid,0.0,neutral,0.4791390895843506
418
+ 416,2,16,562820587,LevoParadoxPPOHybrid,-3.0,overconfident,0.48439839482307434
419
+ 417,2,17,1938965903,LevoParadoxPPOHybrid,2.0,neutral,0.47879713773727417
420
+ 418,2,18,1938899583,LevoParadoxPPOHybrid,0.0,neutral,0.48121845722198486
421
+ 419,2,19,146416322,LevoParadoxPPOHybrid,2.0,neutral,0.47879713773727417
422
+ 420,2,20,2034761172,LevoParadoxPPOHybrid,0.0,neutral,0.4793781638145447
423
+ 421,2,21,1531184118,LevoParadoxPPOHybrid,0.8,neutral,0.47790008783340454
424
+ 422,2,22,1624823478,LevoParadoxPPOHybrid,-3.0,overconfident,0.47782430052757263
425
+ 423,2,23,1973982599,LevoParadoxPPOHybrid,0.0,neutral,0.47879713773727417
426
+ 424,2,24,1433121745,LevoParadoxPPOHybrid,0.0,neutral,0.47766703367233276
427
+ 425,2,25,269942302,LevoParadoxPPOHybrid,-0.8,overcautious,0.47879713773727417
428
+ 426,2,26,662577618,LevoParadoxPPOHybrid,-3.0,overconfident,0.48439839482307434
429
+ 427,2,27,1680792863,LevoParadoxPPOHybrid,1.2,neutral,0.47782430052757263
430
+ 428,2,28,608196857,LevoParadoxPPOHybrid,0.0,neutral,0.4791390895843506
431
+ 429,2,29,750797946,LevoParadoxPPOHybrid,0.0,neutral,0.4793781638145447
432
+ 430,2,30,1703067462,LevoParadoxPPOHybrid,0.0,neutral,0.4789300858974457
433
+ 431,2,31,354277540,LevoParadoxPPOHybrid,2.0,neutral,0.48142847418785095
434
+ 432,2,32,516686757,LevoParadoxPPOHybrid,0.0,neutral,0.4789300858974457
435
+ 433,2,33,145581260,LevoParadoxPPOHybrid,0.8,neutral,0.47702041268348694
436
+ 434,2,34,1801241574,LevoParadoxPPOHybrid,2.0,neutral,0.47879713773727417
437
+ 435,2,35,2100309440,LevoParadoxPPOHybrid,2.0,neutral,0.47879713773727417
438
+ 436,2,36,1637824222,LevoParadoxPPOHybrid,0.0,neutral,0.4793781638145447
439
+ 437,2,37,1781578254,LevoParadoxPPOHybrid,0.0,neutral,0.47879713773727417
440
+ 438,2,38,774535340,LevoParadoxPPOHybrid,0.0,neutral,0.47766703367233276
441
+ 439,2,39,1592536280,LevoParadoxPPOHybrid,0.8,neutral,0.47760096192359924
442
+ 440,2,40,803715272,LevoParadoxPPOHybrid,0.0,neutral,0.47968432307243347
443
+ 441,2,41,1295445709,LevoParadoxPPOHybrid,-0.8,overcautious,0.47879713773727417
444
+ 442,2,42,580455628,LevoParadoxPPOHybrid,0.8,neutral,0.47702041268348694
445
+ 443,2,43,608571353,LevoParadoxPPOHybrid,0.0,neutral,0.47760096192359924
446
+ 444,2,44,220247617,LevoParadoxPPOHybrid,0.8,neutral,0.47702041268348694
447
+ 445,2,45,1007502304,LevoParadoxPPOHybrid,0.0,neutral,0.4793781638145447
448
+ 446,2,46,1485027697,LevoParadoxPPOHybrid,1.2,neutral,0.47782430052757263
449
+ 447,2,47,308424123,LevoParadoxPPOHybrid,0.8,neutral,0.481337308883667
450
+ 448,2,48,1831539103,LevoParadoxPPOHybrid,0.0,neutral,0.4791390895843506
451
+ 449,2,49,96205481,LevoParadoxPPOHybrid,0.0,neutral,0.4793781638145447
452
+ 450,2,50,572983894,LevoParadoxPPOHybrid,0.8,neutral,0.4789300858974457
453
+ 451,2,51,1559559556,LevoParadoxPPOHybrid,0.0,neutral,0.48121845722198486
454
+ 452,2,52,289588363,LevoParadoxPPOHybrid,0.0,neutral,0.4781184792518616
455
+ 453,2,53,1021080331,LevoParadoxPPOHybrid,0.8,neutral,0.47968432307243347
456
+ 454,2,54,43845046,LevoParadoxPPOHybrid,0.0,neutral,0.47968432307243347
457
+ 455,2,55,1969391451,LevoParadoxPPOHybrid,0.0,neutral,0.47984620928764343
458
+ 456,2,56,112141255,LevoParadoxPPOHybrid,0.0,neutral,0.47984620928764343
459
+ 457,2,57,407044235,LevoParadoxPPOHybrid,0.0,neutral,0.48121845722198486
460
+ 458,2,58,1413331621,LevoParadoxPPOHybrid,0.0,neutral,0.4791390895843506
461
+ 459,2,59,1124438664,LevoParadoxPPOHybrid,2.0,neutral,0.479806512594223
462
+ 460,2,60,1823383091,LevoParadoxPPOHybrid,0.0,neutral,0.47702041268348694
463
+ 461,2,61,1452420947,LevoParadoxPPOHybrid,-3.0,overconfident,0.47782430052757263
464
+ 462,2,62,2031250630,LevoParadoxPPOHybrid,-3.0,overconfident,0.4803639352321625
465
+ 463,2,63,788674418,LevoParadoxPPOHybrid,0.0,neutral,0.47760096192359924
466
+ 464,2,64,1437390327,LevoParadoxPPOHybrid,0.8,neutral,0.48121845722198486
467
+ 465,2,65,879262169,LevoParadoxPPOHybrid,0.0,neutral,0.479806512594223
468
+ 466,2,66,958652521,LevoParadoxPPOHybrid,0.8,neutral,0.4793781638145447
469
+ 467,2,67,2142602411,LevoParadoxPPOHybrid,0.0,neutral,0.4789300858974457
470
+ 468,2,68,59947504,LevoParadoxPPOHybrid,0.8,neutral,0.47766703367233276
471
+ 469,2,69,384107305,LevoParadoxPPOHybrid,0.0,neutral,0.47968432307243347
472
+ 470,2,70,1830507375,LevoParadoxPPOHybrid,0.8,neutral,0.4789300858974457
473
+ 471,2,71,571519169,LevoParadoxPPOHybrid,0.8,neutral,0.4793781638145447
474
+ 472,2,72,1626492832,LevoParadoxPPOHybrid,0.8,neutral,0.4789300858974457
475
+ 473,2,73,1386853771,LevoParadoxPPOHybrid,0.8,neutral,0.47760096192359924
476
+ 474,2,74,1706685627,LevoParadoxPPOHybrid,-0.8,overcautious,0.47879713773727417
477
+ 475,2,75,1611897310,LevoParadoxPPOHybrid,2.0,neutral,0.48142847418785095
478
+ 476,2,76,1751003019,LevoParadoxPPOHybrid,0.8,neutral,0.47790008783340454
479
+ 477,2,77,1422082962,LevoParadoxPPOHybrid,1.2,neutral,0.48439839482307434
480
+ 478,2,78,1883691922,LevoParadoxPPOHybrid,0.0,neutral,0.481337308883667
481
+ 479,2,79,1013721795,LevoParadoxPPOHybrid,0.8,neutral,0.4791390895843506
482
+ 480,2,80,820766304,LevoParadoxPPOHybrid,0.0,neutral,0.47760096192359924
483
+ 481,2,81,292577686,LevoParadoxPPOHybrid,0.8,neutral,0.481337308883667
484
+ 482,2,82,1774181236,LevoParadoxPPOHybrid,0.8,neutral,0.47968432307243347
485
+ 483,2,83,16477750,LevoParadoxPPOHybrid,0.8,neutral,0.4781184792518616
486
+ 484,2,84,270709347,LevoParadoxPPOHybrid,0.0,neutral,0.47766703367233276
487
+ 485,2,85,117649210,LevoParadoxPPOHybrid,0.8,neutral,0.47790008783340454
488
+ 486,2,86,1315442558,LevoParadoxPPOHybrid,0.0,neutral,0.47984620928764343
489
+ 487,2,87,2057676732,LevoParadoxPPOHybrid,0.0,neutral,0.4793781638145447
490
+ 488,2,88,211459733,LevoParadoxPPOHybrid,0.0,neutral,0.4793781638145447
491
+ 489,2,89,91146202,LevoParadoxPPOHybrid,0.0,neutral,0.47702041268348694
492
+ 490,2,90,588068454,LevoParadoxPPOHybrid,0.8,neutral,0.47968432307243347
493
+ 491,2,91,467526601,LevoParadoxPPOHybrid,-0.8,overcautious,0.479806512594223
494
+ 492,2,92,335299668,LevoParadoxPPOHybrid,0.8,neutral,0.47984620928764343
495
+ 493,2,93,779362037,LevoParadoxPPOHybrid,0.0,neutral,0.47968432307243347
496
+ 494,2,94,660339976,LevoParadoxPPOHybrid,2.0,neutral,0.479806512594223
497
+ 495,2,95,637136818,LevoParadoxPPOHybrid,1.2,neutral,0.48439839482307434
498
+ 496,2,96,1999866855,LevoParadoxPPOHybrid,0.0,neutral,0.47760096192359924
499
+ 497,2,97,139896496,LevoParadoxPPOHybrid,0.0,neutral,0.47760096192359924
500
+ 498,2,98,863743810,LevoParadoxPPOHybrid,0.0,neutral,0.4781184792518616
501
+ 499,2,99,1908673249,LevoParadoxPPOHybrid,2.0,neutral,0.479806512594223
502
+ 500,2,100,1039141574,LevoParadoxPPOHybrid,0.0,neutral,0.47984620928764343
503
+ 501,2,101,1051567495,LevoParadoxPPOHybrid,-3.0,overconfident,0.4803639352321625
504
+ 502,2,102,837394817,LevoParadoxPPOHybrid,0.8,neutral,0.47968432307243347
505
+ 503,2,103,2013481887,LevoParadoxPPOHybrid,0.0,neutral,0.47760096192359924
506
+ 504,2,104,438355621,LevoParadoxPPOHybrid,0.0,neutral,0.481337308883667
507
+ 505,2,105,993080718,LevoParadoxPPOHybrid,0.0,neutral,0.4781184792518616
508
+ 506,2,106,1682379032,LevoParadoxPPOHybrid,0.0,neutral,0.47766703367233276
509
+ 507,2,107,1013432362,LevoParadoxPPOHybrid,0.8,neutral,0.47702041268348694
510
+ 508,2,108,1856562955,LevoParadoxPPOHybrid,0.8,neutral,0.47702041268348694
511
+ 509,2,109,1667805176,LevoParadoxPPOHybrid,1.2,neutral,0.48439839482307434
512
+ 510,2,110,506300911,LevoParadoxPPOHybrid,0.0,neutral,0.4781184792518616
513
+ 511,2,111,222604131,LevoParadoxPPOHybrid,0.0,neutral,0.4793781638145447
514
+ 512,2,112,804599567,LevoParadoxPPOHybrid,0.0,neutral,0.4839756190776825
515
+ 513,2,113,1492613445,LevoParadoxPPOHybrid,0.0,neutral,0.481283962726593
516
+ 514,2,114,552650077,LevoParadoxPPOHybrid,-3.0,overconfident,0.4819849133491516
517
+ 515,2,115,930025102,LevoParadoxPPOHybrid,0.8,neutral,0.48286885023117065
518
+ 516,2,116,873459449,LevoParadoxPPOHybrid,2.0,neutral,0.48265746235847473
519
+ 517,2,117,467662889,LevoParadoxPPOHybrid,-0.8,overcautious,0.4842311441898346
520
+ 518,2,118,445679122,LevoParadoxPPOHybrid,0.0,neutral,0.4811937212944031
521
+ 519,2,119,1328599419,LevoParadoxPPOHybrid,2.0,neutral,0.4842311441898346
522
+ 520,2,120,1323806708,LevoParadoxPPOHybrid,0.0,neutral,0.48329493403434753
523
+ 521,2,121,1034589592,LevoParadoxPPOHybrid,0.0,neutral,0.4818005859851837
524
+ 522,2,122,413811598,LevoParadoxPPOHybrid,0.8,neutral,0.4818005859851837
525
+ 523,2,123,753550936,LevoParadoxPPOHybrid,0.0,neutral,0.4846201539039612
526
+ 524,2,124,1202521986,LevoParadoxPPOHybrid,0.0,neutral,0.48286885023117065
527
+ 525,2,125,1933381577,LevoParadoxPPOHybrid,0.0,neutral,0.4850122034549713
528
+ 526,2,126,1963329040,LevoParadoxPPOHybrid,0.8,neutral,0.48379752039909363
529
+ 527,2,127,1399821071,LevoParadoxPPOHybrid,0.0,neutral,0.4850122034549713
530
+ 528,2,128,1828929971,LevoParadoxPPOHybrid,-3.0,overconfident,0.4876437187194824
531
+ 529,2,129,1100686433,LevoParadoxPPOHybrid,0.0,neutral,0.4818302094936371
532
+ 530,2,130,423774818,LevoParadoxPPOHybrid,0.8,neutral,0.4854736030101776
533
+ 531,2,131,2047001195,LevoParadoxPPOHybrid,0.0,neutral,0.4857918918132782
534
+ 532,2,132,127060851,LevoParadoxPPOHybrid,0.8,neutral,0.48286885023117065
535
+ 533,2,133,1430942851,LevoParadoxPPOHybrid,-3.0,overconfident,0.4876437187194824
536
+ 534,2,134,1194133788,LevoParadoxPPOHybrid,2.0,neutral,0.4842311441898346
537
+ 535,2,135,30246456,LevoParadoxPPOHybrid,0.0,neutral,0.4818005859851837
538
+ 536,2,136,1871301169,LevoParadoxPPOHybrid,0.0,neutral,0.4829106330871582
539
+ 537,2,137,1724977905,LevoParadoxPPOHybrid,0.0,neutral,0.4846201539039612
540
+ 538,2,138,1717796771,LevoParadoxPPOHybrid,0.8,neutral,0.4818005859851837
541
+ 539,2,139,1593858573,LevoParadoxPPOHybrid,0.8,neutral,0.4818005859851837
542
+ 540,2,140,200663940,LevoParadoxPPOHybrid,-3.0,overconfident,0.4846201539039612
543
+ 541,2,141,1366649604,LevoParadoxPPOHybrid,0.0,neutral,0.48379752039909363
544
+ 542,2,142,1673519505,LevoParadoxPPOHybrid,0.8,neutral,0.4811937212944031
545
+ 543,2,143,1177626327,LevoParadoxPPOHybrid,0.0,neutral,0.48379752039909363
546
+ 544,2,144,262855495,LevoParadoxPPOHybrid,0.0,neutral,0.4839756190776825
547
+ 545,2,145,1035690989,LevoParadoxPPOHybrid,0.0,neutral,0.4819849133491516
548
+ 546,2,146,192999926,LevoParadoxPPOHybrid,0.8,neutral,0.4811937212944031
549
+ 547,2,147,1097961901,LevoParadoxPPOHybrid,-0.8,overcautious,0.48265746235847473
550
+ 548,2,148,1040646467,LevoParadoxPPOHybrid,2.0,neutral,0.4850122034549713
551
+ 549,2,149,1995566658,LevoParadoxPPOHybrid,0.0,neutral,0.4839756190776825
552
+ 550,2,150,390674833,LevoParadoxPPOHybrid,-0.8,overcautious,0.4842311441898346
553
+ 551,2,151,662645968,LevoParadoxPPOHybrid,1.2,neutral,0.4846201539039612
554
+ 552,2,152,111224037,LevoParadoxPPOHybrid,-0.8,overcautious,0.4850122034549713
555
+ 553,2,153,1242319339,LevoParadoxPPOHybrid,0.0,neutral,0.4818005859851837
556
+ 554,2,154,1295579201,LevoParadoxPPOHybrid,0.0,neutral,0.4854736030101776
557
+ 555,2,155,88079789,LevoParadoxPPOHybrid,0.0,neutral,0.48329493403434753
558
+ 556,2,156,1218832160,LevoParadoxPPOHybrid,0.0,neutral,0.4857918918132782
559
+ 557,2,157,1199450774,LevoParadoxPPOHybrid,0.8,neutral,0.48379752039909363
560
+ 558,2,158,93920744,LevoParadoxPPOHybrid,0.0,neutral,0.4818005859851837
561
+ 559,2,159,301211568,LevoParadoxPPOHybrid,0.0,neutral,0.4829106330871582
562
+ 560,2,160,606831608,LevoParadoxPPOHybrid,0.0,neutral,0.4829106330871582
563
+ 561,2,161,248267762,LevoParadoxPPOHybrid,2.0,neutral,0.4842311441898346
564
+ 562,2,162,479831997,LevoParadoxPPOHybrid,0.0,neutral,0.4811937212944031
565
+ 563,2,163,443794762,LevoParadoxPPOHybrid,1.2,neutral,0.4876437187194824
566
+ 564,2,164,317845088,LevoParadoxPPOHybrid,0.0,neutral,0.48286885023117065
567
+ 565,2,165,976368810,LevoParadoxPPOHybrid,0.0,neutral,0.4876437187194824
568
+ 566,2,166,1096060710,LevoParadoxPPOHybrid,1.2,neutral,0.4846201539039612
569
+ 567,2,167,1786432503,LevoParadoxPPOHybrid,0.0,neutral,0.4839756190776825
570
+ 568,2,168,92915493,LevoParadoxPPOHybrid,0.0,neutral,0.48286885023117065
571
+ 569,2,169,169421372,LevoParadoxPPOHybrid,0.8,neutral,0.4818005859851837
572
+ 570,2,170,827738447,LevoParadoxPPOHybrid,-0.8,overcautious,0.48265746235847473
573
+ 571,2,171,91871503,LevoParadoxPPOHybrid,0.8,neutral,0.4812925159931183
574
+ 572,2,172,1181786707,LevoParadoxPPOHybrid,-3.0,overconfident,0.4876437187194824
575
+ 573,2,173,14354338,LevoParadoxPPOHybrid,0.0,neutral,0.48329493403434753
576
+ 574,2,174,2140443672,LevoParadoxPPOHybrid,0.0,neutral,0.4819849133491516
577
+ 575,2,175,318790932,LevoParadoxPPOHybrid,2.0,neutral,0.48265746235847473
578
+ 576,2,176,721850175,LevoParadoxPPOHybrid,2.0,neutral,0.48265746235847473
579
+ 577,2,177,1030785601,LevoParadoxPPOHybrid,0.0,neutral,0.48379752039909363
580
+ 578,2,178,1316251630,LevoParadoxPPOHybrid,0.0,neutral,0.4850122034549713
581
+ 579,2,179,1719447051,LevoParadoxPPOHybrid,0.0,neutral,0.48379752039909363
582
+ 580,2,180,574594100,LevoParadoxPPOHybrid,0.0,neutral,0.4854736030101776
583
+ 581,2,181,2130613154,LevoParadoxPPOHybrid,0.0,neutral,0.4857918918132782
584
+ 582,2,182,527701015,LevoParadoxPPOHybrid,0.0,neutral,0.4857918918132782
585
+ 583,2,183,1227208042,LevoParadoxPPOHybrid,-3.0,overconfident,0.4846201539039612
586
+ 584,2,184,633972706,LevoParadoxPPOHybrid,0.8,neutral,0.4818302094936371
587
+ 585,2,185,1481264686,LevoParadoxPPOHybrid,0.0,neutral,0.4839756190776825
588
+ 586,2,186,1403332419,LevoParadoxPPOHybrid,0.8,neutral,0.48329493403434753
589
+ 587,2,187,573328882,LevoParadoxPPOHybrid,-3.0,overconfident,0.4876437187194824
590
+ 588,2,188,896430961,LevoParadoxPPOHybrid,0.0,neutral,0.4854736030101776
591
+ 589,2,189,861308429,LevoParadoxPPOHybrid,-3.0,overconfident,0.4819849133491516
592
+ 590,2,190,857542805,LevoParadoxPPOHybrid,-3.0,overconfident,0.4846201539039612
593
+ 591,2,191,555627012,LevoParadoxPPOHybrid,0.0,neutral,0.48329493403434753
594
+ 592,2,192,883473089,LevoParadoxPPOHybrid,1.2,neutral,0.4876437187194824
595
+ 593,2,193,1183906577,LevoParadoxPPOHybrid,-0.8,overcautious,0.48265746235847473
596
+ 594,2,194,1295404722,LevoParadoxPPOHybrid,0.0,neutral,0.4842311441898346
597
+ 595,2,195,1602782174,LevoParadoxPPOHybrid,0.0,neutral,0.4811937212944031
598
+ 596,2,196,1168170146,LevoParadoxPPOHybrid,0.0,neutral,0.4839756190776825
599
+ 597,2,197,247049848,LevoParadoxPPOHybrid,0.8,neutral,0.4829106330871582
600
+ 598,2,198,1217521579,LevoParadoxPPOHybrid,2.0,neutral,0.4850122034549713
601
+ 599,2,199,1154221074,LevoParadoxPPOHybrid,-3.0,overconfident,0.4846201539039612
602
+ 600,2,200,1039822287,LevoParadoxPPOHybrid,0.0,neutral,0.4839756190776825
603
+ 601,2,201,403774715,LevoParadoxPPOHybrid,0.8,neutral,0.48286885023117065
604
+ 602,2,202,1937799744,LevoParadoxPPOHybrid,0.0,neutral,0.4812925159931183
605
+ 603,2,203,1530207800,LevoParadoxPPOHybrid,0.8,neutral,0.48379752039909363
606
+ 604,2,204,899360822,LevoParadoxPPOHybrid,0.8,neutral,0.4812925159931183
607
+ 605,2,205,839140609,LevoParadoxPPOHybrid,2.0,neutral,0.48265746235847473
608
+ 606,2,206,2141035731,LevoParadoxPPOHybrid,0.0,neutral,0.4842311441898346
609
+ 607,2,207,778084307,LevoParadoxPPOHybrid,1.2,neutral,0.4846201539039612
610
+ 608,2,208,350945807,LevoParadoxPPOHybrid,0.0,neutral,0.4854736030101776
611
+ 609,2,209,970046052,LevoParadoxPPOHybrid,-0.8,overcautious,0.4842311441898346
612
+ 610,2,210,828658713,LevoParadoxPPOHybrid,-3.0,overconfident,0.4876437187194824
613
+ 611,2,211,899193899,LevoParadoxPPOHybrid,0.0,neutral,0.4811937212944031
614
+ 612,2,212,1918263815,LevoParadoxPPOHybrid,-3.0,overconfident,0.4876437187194824
615
+ 613,2,213,861402774,LevoParadoxPPOHybrid,0.0,neutral,0.4839756190776825
616
+ 614,2,214,545630730,LevoParadoxPPOHybrid,0.0,neutral,0.48286885023117065
617
+ 615,2,215,1771344806,LevoParadoxPPOHybrid,0.8,neutral,0.4818302094936371
618
+ 616,2,216,835556689,LevoParadoxPPOHybrid,2.0,neutral,0.4842311441898346
619
+ 617,2,217,920739262,LevoParadoxPPOHybrid,0.8,neutral,0.4857918918132782
620
+ 618,2,218,1075133249,LevoParadoxPPOHybrid,0.0,neutral,0.4857918918132782
621
+ 619,2,219,1466130915,LevoParadoxPPOHybrid,0.8,neutral,0.4811937212944031
622
+ 620,2,220,1545638251,LevoParadoxPPOHybrid,-3.0,overconfident,0.4819849133491516
623
+ 621,2,221,379504837,LevoParadoxPPOHybrid,0.0,neutral,0.48379752039909363
624
+ 622,2,222,833504022,LevoParadoxPPOHybrid,0.8,neutral,0.4839756190776825
625
+ 623,2,223,1846676001,LevoParadoxPPOHybrid,1.2,neutral,0.4876437187194824
626
+ 624,2,224,6416948,LevoParadoxPPOHybrid,0.0,neutral,0.4818302094936371
627
+ 625,2,225,1751117666,LevoParadoxPPOHybrid,0.8,neutral,0.4818005859851837
628
+ 626,2,226,284570123,LevoParadoxPPOHybrid,0.8,neutral,0.48379752039909363
629
+ 627,2,227,189352376,LevoParadoxPPOHybrid,0.0,neutral,0.4818005859851837
630
+ 628,2,228,1370043294,LevoParadoxPPOHybrid,0.0,neutral,0.4857918918132782
631
+ 629,2,229,1967776583,LevoParadoxPPOHybrid,0.0,neutral,0.4818302094936371
632
+ 630,2,230,1013942334,LevoParadoxPPOHybrid,0.0,neutral,0.4829106330871582
633
+ 631,2,231,600184202,LevoParadoxPPOHybrid,0.8,neutral,0.4829106330871582
634
+ 632,2,232,2085636407,LevoParadoxPPOHybrid,0.0,neutral,0.48329493403434753
635
+ 633,2,233,328848547,LevoParadoxPPOHybrid,0.0,neutral,0.48286885023117065
636
+ 634,2,234,63425983,LevoParadoxPPOHybrid,-0.8,overcautious,0.4850122034549713
637
+ 635,2,235,531264304,LevoParadoxPPOHybrid,0.0,neutral,0.48265746235847473
638
+ 636,2,236,1531168957,LevoParadoxPPOHybrid,0.0,neutral,0.4839756190776825
639
+ 637,2,237,1789312949,LevoParadoxPPOHybrid,2.0,neutral,0.4842311441898346
640
+ 638,2,238,1084402395,LevoParadoxPPOHybrid,0.0,neutral,0.48329493403434753
641
+ 639,2,239,1545622175,LevoParadoxPPOHybrid,0.8,neutral,0.4854736030101776
642
+ 640,2,240,999431888,LevoParadoxPPOHybrid,0.0,neutral,0.4818005859851837
643
+ 641,2,241,1725426490,LevoParadoxPPOHybrid,0.0,neutral,0.48286885023117065
644
+ 642,2,242,669407095,LevoParadoxPPOHybrid,0.0,neutral,0.48286885023117065
645
+ 643,2,243,1417993163,LevoParadoxPPOHybrid,0.8,neutral,0.4818302094936371
646
+ 644,2,244,1057045593,LevoParadoxPPOHybrid,0.8,neutral,0.4829106330871582
647
+ 645,2,245,1380890934,LevoParadoxPPOHybrid,0.0,neutral,0.4811937212944031
648
+ 646,2,246,238129855,LevoParadoxPPOHybrid,0.8,neutral,0.4854736030101776
649
+ 647,2,247,1486485713,LevoParadoxPPOHybrid,0.8,neutral,0.4811937212944031
650
+ 648,2,248,30716145,LevoParadoxPPOHybrid,0.0,neutral,0.48329493403434753
651
+ 649,2,249,1615261593,LevoParadoxPPOHybrid,0.0,neutral,0.48286885023117065
652
+ 650,2,250,2052819092,LevoParadoxPPOHybrid,0.8,neutral,0.4818005859851837
653
+ 651,2,251,11185487,LevoParadoxPPOHybrid,0.0,neutral,0.4812925159931183
654
+ 652,2,252,928000143,LevoParadoxPPOHybrid,2.0,neutral,0.4842311441898346
655
+ 653,2,253,2023963770,LevoParadoxPPOHybrid,1.2,neutral,0.4876437187194824
656
+ 654,2,254,1301736393,LevoParadoxPPOHybrid,0.0,neutral,0.48379752039909363
657
+ 655,2,255,398352915,LevoParadoxPPOHybrid,0.8,neutral,0.48286885023117065
658
+ 656,2,256,299104752,LevoParadoxPPOHybrid,0.0,neutral,0.4811937212944031
659
+ 657,2,257,1900619662,LevoParadoxPPOHybrid,2.0,neutral,0.4842311441898346
660
+ 658,2,258,402834001,LevoParadoxPPOHybrid,1.2,neutral,0.4846201539039612
661
+ 659,2,259,618191185,LevoParadoxPPOHybrid,1.2,neutral,0.4876437187194824
662
+ 660,2,260,1107226955,LevoParadoxPPOHybrid,-0.8,overcautious,0.4850122034549713
663
+ 661,2,261,1079996997,LevoParadoxPPOHybrid,0.8,neutral,0.4857918918132782
664
+ 662,2,262,1090799708,LevoParadoxPPOHybrid,2.0,neutral,0.4842311441898346
665
+ 663,2,263,614807561,LevoParadoxPPOHybrid,-3.0,overconfident,0.4876437187194824
666
+ 664,2,264,1110540374,LevoParadoxPPOHybrid,0.0,neutral,0.4850122034549713
667
+ 665,2,265,230358128,LevoParadoxPPOHybrid,0.8,neutral,0.4857918918132782
668
+ 666,2,266,1307025172,LevoParadoxPPOHybrid,0.0,neutral,0.4857918918132782
669
+ 667,2,267,2128513208,LevoParadoxPPOHybrid,-3.0,overconfident,0.4846201539039612
670
+ 668,2,268,1813190214,LevoParadoxPPOHybrid,1.2,neutral,0.4876437187194824
671
+ 669,2,269,427517589,LevoParadoxPPOHybrid,-0.8,overcautious,0.4850122034549713
672
+ 670,2,270,971704768,LevoParadoxPPOHybrid,0.0,neutral,0.4857918918132782
673
+ 671,2,271,379120844,LevoParadoxPPOHybrid,0.8,neutral,0.4857918918132782
674
+ 672,2,272,366674027,LevoParadoxPPOHybrid,-0.8,overcautious,0.4850122034549713
675
+ 673,2,273,1267589757,LevoParadoxPPOHybrid,0.8,neutral,0.4818302094936371
676
+ 674,2,274,397609752,LevoParadoxPPOHybrid,0.8,neutral,0.4839756190776825
677
+ 675,2,275,544583423,LevoParadoxPPOHybrid,0.0,neutral,0.4829106330871582
678
+ 676,2,276,1765101426,LevoParadoxPPOHybrid,0.8,neutral,0.48286885023117065
679
+ 677,2,277,569693597,LevoParadoxPPOHybrid,2.0,neutral,0.4842311441898346
680
+ 678,2,278,189460983,LevoParadoxPPOHybrid,0.0,neutral,0.48329493403434753
681
+ 679,2,279,505940532,LevoParadoxPPOHybrid,0.0,neutral,0.481283962726593
682
+ 680,2,280,961700536,LevoParadoxPPOHybrid,1.2,neutral,0.4819849133491516
683
+ 681,2,281,932456279,LevoParadoxPPOHybrid,-0.8,overcautious,0.4850122034549713
684
+ 682,2,282,390287427,LevoParadoxPPOHybrid,2.0,neutral,0.4850122034549713
685
+ 683,2,283,297976648,LevoParadoxPPOHybrid,-0.8,overcautious,0.4842311441898346
686
+ 684,2,284,436098708,LevoParadoxPPOHybrid,0.0,neutral,0.481283962726593
687
+ 685,2,285,794629335,LevoParadoxPPOHybrid,2.0,neutral,0.4842311441898346
688
+ 686,2,286,1214082779,LevoParadoxPPOHybrid,0.8,neutral,0.481283962726593
689
+ 687,2,287,1935214602,LevoParadoxPPOHybrid,0.0,neutral,0.4842311441898346
690
+ 688,2,288,284248471,LevoParadoxPPOHybrid,0.0,neutral,0.4854736030101776
691
+ 689,2,289,1230641234,LevoParadoxPPOHybrid,0.0,neutral,0.4839756190776825
692
+ 690,2,290,388858966,LevoParadoxPPOHybrid,2.0,neutral,0.4842311441898346
693
+ 691,2,291,1021791854,LevoParadoxPPOHybrid,-0.8,overcautious,0.4842311441898346
694
+ 692,2,292,603303402,LevoParadoxPPOHybrid,0.8,neutral,0.48379752039909363
695
+ 693,2,293,862608619,LevoParadoxPPOHybrid,0.8,neutral,0.481283962726593
696
+ 694,2,294,1651871421,LevoParadoxPPOHybrid,0.8,neutral,0.4811937212944031
697
+ 695,2,295,2051444313,LevoParadoxPPOHybrid,0.0,neutral,0.48329493403434753
698
+ 696,2,296,144628230,LevoParadoxPPOHybrid,0.8,neutral,0.48329493403434753
699
+ 697,2,297,1520429634,LevoParadoxPPOHybrid,0.8,neutral,0.4839756190776825
700
+ 698,2,298,881109934,LevoParadoxPPOHybrid,0.8,neutral,0.4839756190776825
701
+ 699,2,299,1255956995,LevoParadoxPPOHybrid,0.0,neutral,0.481283962726593
702
+ 700,2,300,208230768,LevoParadoxPPOHybrid,0.8,neutral,0.4829106330871582
703
+ 701,2,301,1460257335,LevoParadoxPPOHybrid,0.0,neutral,0.48286885023117065
704
+ 702,2,302,1011782590,LevoParadoxPPOHybrid,0.0,neutral,0.4829106330871582
705
+ 703,2,303,1789340557,LevoParadoxPPOHybrid,2.0,neutral,0.48265746235847473
706
+ 704,2,304,1869217819,LevoParadoxPPOHybrid,0.0,neutral,0.4854736030101776
707
+ 705,2,305,1673802110,LevoParadoxPPOHybrid,0.0,neutral,0.481283962726593
708
+ 706,2,306,62463393,LevoParadoxPPOHybrid,-0.8,overcautious,0.4842311441898346
709
+ 707,2,307,2074841997,LevoParadoxPPOHybrid,-3.0,overconfident,0.4846201539039612
710
+ 708,2,308,1764116324,LevoParadoxPPOHybrid,-3.0,overconfident,0.4819849133491516
711
+ 709,2,309,1361763883,LevoParadoxPPOHybrid,0.0,neutral,0.4819849133491516
712
+ 710,2,310,2068149571,LevoParadoxPPOHybrid,0.0,neutral,0.48286885023117065
713
+ 711,2,311,1761270974,LevoParadoxPPOHybrid,0.8,neutral,0.4839756190776825
714
+ 712,2,312,1610445955,LevoParadoxPPOHybrid,0.8,neutral,0.4818302094936371
715
+ 713,2,313,527574022,LevoParadoxPPOHybrid,0.8,neutral,0.4857918918132782
716
+ 714,2,314,1948416385,LevoParadoxPPOHybrid,0.8,neutral,0.4812925159931183
717
+ 715,2,315,842515162,LevoParadoxPPOHybrid,1.2,neutral,0.4846201539039612
718
+ 716,2,316,728127582,LevoParadoxPPOHybrid,0.0,neutral,0.4839756190776825
719
+ 717,2,317,1807809684,LevoParadoxPPOHybrid,-0.8,overcautious,0.4842311441898346
720
+ 718,2,318,1911608906,LevoParadoxPPOHybrid,0.8,neutral,0.481283962726593
721
+ 719,2,319,507860031,LevoParadoxPPOHybrid,0.8,neutral,0.48329493403434753
722
+ 720,2,320,1559660249,LevoParadoxPPOHybrid,0.0,neutral,0.4812925159931183
723
+ 721,2,321,817113483,LevoParadoxPPOHybrid,0.0,neutral,0.48379752039909363
724
+ 722,2,322,181612330,LevoParadoxPPOHybrid,0.0,neutral,0.4818302094936371
725
+ 723,2,323,330146939,LevoParadoxPPOHybrid,0.0,neutral,0.48379752039909363
726
+ 724,2,324,1451519916,LevoParadoxPPOHybrid,0.8,neutral,0.48329493403434753
727
+ 725,2,325,429715005,LevoParadoxPPOHybrid,0.0,neutral,0.4839756190776825
728
+ 726,2,326,1836744305,LevoParadoxPPOHybrid,2.0,neutral,0.48265746235847473
729
+ 727,2,327,200999922,LevoParadoxPPOHybrid,0.8,neutral,0.4818005859851837
730
+ 728,2,328,686960989,LevoParadoxPPOHybrid,1.2,neutral,0.4819849133491516
731
+ 729,2,329,2137759524,LevoParadoxPPOHybrid,0.0,neutral,0.4857918918132782
732
+ 730,2,330,48470119,LevoParadoxPPOHybrid,0.0,neutral,0.48379752039909363
733
+ 731,2,331,1429722682,LevoParadoxPPOHybrid,0.8,neutral,0.48286885023117065
734
+ 732,2,332,218074447,LevoParadoxPPOHybrid,0.0,neutral,0.4839756190776825
735
+ 733,2,333,2104545774,LevoParadoxPPOHybrid,0.8,neutral,0.4811937212944031
736
+ 734,2,334,1816453390,LevoParadoxPPOHybrid,0.0,neutral,0.4829106330871582
737
+ 735,2,335,639577193,LevoParadoxPPOHybrid,0.0,neutral,0.48379752039909363
738
+ 736,2,336,231860645,LevoParadoxPPOHybrid,1.2,neutral,0.4846201539039612
739
+ 737,2,337,1142197128,LevoParadoxPPOHybrid,0.0,neutral,0.4854736030101776
740
+ 738,2,338,1321680746,LevoParadoxPPOHybrid,0.8,neutral,0.48379752039909363
741
+ 739,2,339,1746554905,LevoParadoxPPOHybrid,0.0,neutral,0.4812925159931183
742
+ 740,2,340,396707811,LevoParadoxPPOHybrid,0.8,neutral,0.4854736030101776
743
+ 741,2,341,491514850,LevoParadoxPPOHybrid,0.8,neutral,0.48286885023117065
744
+ 742,2,342,461674718,LevoParadoxPPOHybrid,-0.8,overcautious,0.4842311441898346
745
+ 743,2,343,1701500925,LevoParadoxPPOHybrid,0.8,neutral,0.4839756190776825
746
+ 744,2,344,1344298913,LevoParadoxPPOHybrid,0.0,neutral,0.4818302094936371
747
+ 745,2,345,1354823084,LevoParadoxPPOHybrid,0.0,neutral,0.4811937212944031
748
+ 746,2,346,118160105,LevoParadoxPPOHybrid,1.2,neutral,0.4819849133491516
749
+ 747,2,347,1044584312,LevoParadoxPPOHybrid,0.8,neutral,0.4839756190776825
750
+ 748,2,348,1524392230,LevoParadoxPPOHybrid,0.0,neutral,0.4819849133491516
751
+ 749,2,349,428869864,LevoParadoxPPOHybrid,0.8,neutral,0.48329493403434753
752
+ 750,2,350,180994417,LevoParadoxPPOHybrid,0.8,neutral,0.4829106330871582
753
+ 751,2,351,885019589,LevoParadoxPPOHybrid,0.0,neutral,0.4812925159931183
754
+ 752,2,352,1231928222,LevoParadoxPPOHybrid,0.0,neutral,0.4854736030101776
755
+ 753,2,353,1670237802,LevoParadoxPPOHybrid,0.0,neutral,0.4839756190776825
756
+ 754,2,354,1414482049,LevoParadoxPPOHybrid,0.8,neutral,0.4854736030101776
757
+ 755,2,355,1971477631,LevoParadoxPPOHybrid,2.0,neutral,0.4842311441898346
758
+ 756,2,356,883215094,LevoParadoxPPOHybrid,0.0,neutral,0.4846201539039612
759
+ 757,2,357,343285816,LevoParadoxPPOHybrid,-3.0,overconfident,0.4819849133491516
760
+ 758,2,358,1993664325,LevoParadoxPPOHybrid,-0.8,overcautious,0.4850122034549713
761
+ 759,2,359,538994041,LevoParadoxPPOHybrid,0.8,neutral,0.4818005859851837
762
+ 760,2,360,365720817,LevoParadoxPPOHybrid,-0.8,overcautious,0.4842311441898346
763
+ 761,2,361,1931073180,LevoParadoxPPOHybrid,0.0,neutral,0.48286885023117065
764
+ 762,2,362,330654991,LevoParadoxPPOHybrid,0.0,neutral,0.4818005859851837
765
+ 763,2,363,2117986561,LevoParadoxPPOHybrid,-3.0,overconfident,0.4876437187194824
766
+ 764,2,364,1745610389,LevoParadoxPPOHybrid,0.0,neutral,0.48265746235847473
767
+ 765,2,365,1935491097,LevoParadoxPPOHybrid,0.8,neutral,0.481283962726593
768
+ 766,2,366,816460352,LevoParadoxPPOHybrid,0.0,neutral,0.48329493403434753
769
+ 767,2,367,2034287239,LevoParadoxPPOHybrid,0.0,neutral,0.4829106330871582
770
+ 768,2,368,1494357375,LevoParadoxPPOHybrid,0.8,neutral,0.48519960045814514
771
+ 769,2,369,525099930,LevoParadoxPPOHybrid,0.8,neutral,0.48731231689453125
772
+ 770,2,370,461861420,LevoParadoxPPOHybrid,0.8,neutral,0.4886108636856079
773
+ 771,2,371,424434369,LevoParadoxPPOHybrid,0.0,neutral,0.48417460918426514
774
+ 772,2,372,1696040440,LevoParadoxPPOHybrid,0.0,neutral,0.48826003074645996
775
+ 773,2,373,1327732050,LevoParadoxPPOHybrid,0.8,neutral,0.48468780517578125
776
+ 774,2,374,1275639253,LevoParadoxPPOHybrid,0.8,neutral,0.48519960045814514
777
+ 775,2,375,180175624,LevoParadoxPPOHybrid,0.0,neutral,0.48731231689453125
778
+ 776,2,376,853325992,LevoParadoxPPOHybrid,1.2,neutral,0.48919999599456787
779
+ 777,2,377,35314844,LevoParadoxPPOHybrid,0.0,neutral,0.4842897355556488
780
+ 778,2,378,512421119,LevoParadoxPPOHybrid,-0.8,overcautious,0.48792359232902527
781
+ 779,2,379,1818877815,LevoParadoxPPOHybrid,0.0,neutral,0.4842897355556488
782
+ 780,2,380,244612068,LevoParadoxPPOHybrid,0.8,neutral,0.48738181591033936
783
+ 781,2,381,438090890,LevoParadoxPPOHybrid,0.8,neutral,0.4872293472290039
784
+ 782,2,382,71908212,LevoParadoxPPOHybrid,0.0,neutral,0.4857252836227417
785
+ 783,2,383,763979621,LevoParadoxPPOHybrid,0.0,neutral,0.4857252836227417
786
+ 784,2,384,492409950,LevoParadoxPPOHybrid,0.8,neutral,0.4872293472290039
787
+ 785,2,385,1939330706,LevoParadoxPPOHybrid,-3.0,overconfident,0.48516950011253357
788
+ 786,2,386,304266562,LevoParadoxPPOHybrid,0.8,neutral,0.4857252836227417
789
+ 787,2,387,1839152413,LevoParadoxPPOHybrid,0.8,neutral,0.48519960045814514
790
+ 788,2,388,1584964798,LevoParadoxPPOHybrid,0.8,neutral,0.48738181591033936
791
+ 789,2,389,1705345529,LevoParadoxPPOHybrid,0.0,neutral,0.48468780517578125
792
+ 790,2,390,530680927,LevoParadoxPPOHybrid,0.0,neutral,0.48826003074645996
793
+ 791,2,391,601158382,LevoParadoxPPOHybrid,-3.0,overconfident,0.4865123927593231
794
+ 792,2,392,661312537,LevoParadoxPPOHybrid,0.8,neutral,0.4886108636856079
795
+ 793,2,393,1099910893,LevoParadoxPPOHybrid,0.8,neutral,0.48417460918426514
796
+ 794,2,394,1777836792,LevoParadoxPPOHybrid,1.2,neutral,0.4865123927593231
797
+ 795,2,395,320819501,LevoParadoxPPOHybrid,0.0,neutral,0.48519960045814514
798
+ 796,2,396,1262930064,LevoParadoxPPOHybrid,0.0,neutral,0.48468780517578125
799
+ 797,2,397,1476382876,LevoParadoxPPOHybrid,0.8,neutral,0.48468780517578125
800
+ 798,2,398,229480971,LevoParadoxPPOHybrid,0.0,neutral,0.48731231689453125
801
+ 799,2,399,1346765522,LevoParadoxPPOHybrid,0.0,neutral,0.48731231689453125
802
+ 800,3,0,1015467875,LevoParadoxPPOHybrid,0.49029308438457947,neutral,0.48342037200927734
803
+ 801,3,1,871703027,LevoParadoxPPOHybrid,0.2583186351063763,neutral,0.48847508430480957
804
+ 802,3,2,1121193219,LevoParadoxPPOHybrid,-0.9285687801394484,overcautious,0.4896336793899536
805
+ 803,3,3,1844331605,LevoParadoxPPOHybrid,1.268712954493355,neutral,0.4856588840484619
806
+ 804,3,4,376821421,LevoParadoxPPOHybrid,-2.1540989698282287,overconfident,0.49011749029159546
807
+ 805,3,5,1528947293,LevoParadoxPPOHybrid,1.9236203197456223,neutral,0.49011749029159546
808
+ 806,3,6,1457385050,LevoParadoxPPOHybrid,-0.388878696540991,neutral,0.48847508430480957
809
+ 807,3,7,1930833205,LevoParadoxPPOHybrid,1.8947708652049988,neutral,0.4878310561180115
810
+ 808,3,8,331658631,LevoParadoxPPOHybrid,-0.34637226145235095,overcautious,0.48912549018859863
811
+ 809,3,9,1392760183,LevoParadoxPPOHybrid,-1.7470900488231007,overconfident,0.48763468861579895
812
+ 810,3,10,1410154195,LevoParadoxPPOHybrid,0.37503834948416703,neutral,0.48973292112350464
813
+ 811,3,11,1330897656,LevoParadoxPPOHybrid,1.9046013636486836,neutral,0.49011749029159546
814
+ 812,3,12,755426389,LevoParadoxPPOHybrid,-0.08449315822425026,neutral,0.4876002371311188
815
+ 813,3,13,478344337,LevoParadoxPPOHybrid,-0.20334804248604185,neutral,0.48973292112350464
816
+ 814,3,14,2135473267,LevoParadoxPPOHybrid,-0.321538017298501,neutral,0.48342037200927734
817
+ 815,3,15,1381920965,LevoParadoxPPOHybrid,-0.8946149359899849,neutral,0.4856588840484619
818
+ 816,3,16,790353978,LevoParadoxPPOHybrid,0.805089675891586,neutral,0.48261088132858276
819
+ 817,3,17,886917887,LevoParadoxPPOHybrid,-2.0434560465424223,overconfident,0.48763468861579895
820
+ 818,3,18,1326287162,LevoParadoxPPOHybrid,0.35056089697345333,neutral,0.4878310561180115
821
+ 819,3,19,132467973,LevoParadoxPPOHybrid,0.7640856467236494,neutral,0.49011749029159546
822
+ 820,3,20,896694920,LevoParadoxPPOHybrid,0.6314368917416728,neutral,0.48973292112350464
823
+ 821,3,21,265295982,LevoParadoxPPOHybrid,0.472286750236512,neutral,0.48261088132858276
824
+ 822,3,22,188123431,LevoParadoxPPOHybrid,0.7270211373649718,neutral,0.4841948449611664
825
+ 823,3,23,1385912200,LevoParadoxPPOHybrid,0.5742713840510624,neutral,0.48847508430480957
826
+ 824,3,24,449987729,LevoParadoxPPOHybrid,0.150792838879278,neutral,0.4853600561618805
827
+ 825,3,25,593302824,LevoParadoxPPOHybrid,-0.045015931355259255,neutral,0.48763468861579895
828
+ 826,3,26,194879931,LevoParadoxPPOHybrid,0.17815411284413574,neutral,0.4832690358161926
829
+ 827,3,27,1758518115,LevoParadoxPPOHybrid,1.045585673873838,neutral,0.49009424448013306
830
+ 828,3,28,1545311517,LevoParadoxPPOHybrid,0.1627856125489353,neutral,0.4856588840484619
831
+ 829,3,29,562603550,LevoParadoxPPOHybrid,1.2183364147364109,neutral,0.48261088132858276
832
+ 830,3,30,1059808449,LevoParadoxPPOHybrid,1.2917831804345576,neutral,0.48261088132858276
833
+ 831,3,31,614383066,LevoParadoxPPOHybrid,0.016342221885410586,neutral,0.48973292112350464
834
+ 832,3,32,1192512057,LevoParadoxPPOHybrid,-0.5442359769557571,overcautious,0.48912549018859863
835
+ 833,3,33,950581637,LevoParadoxPPOHybrid,-0.8977958223217277,neutral,0.48956099152565
836
+ 834,3,34,1863772308,LevoParadoxPPOHybrid,0.45308998140979106,neutral,0.48973292112350464
837
+ 835,3,35,1007304414,LevoParadoxPPOHybrid,0.5254077508874286,neutral,0.48956099152565
838
+ 836,3,36,809066309,LevoParadoxPPOHybrid,-1.1110986321443062,overcautious,0.4853600561618805
839
+ 837,3,37,1514006645,LevoParadoxPPOHybrid,-0.3418469151415457,neutral,0.48763468861579895
840
+ 838,3,38,1146495174,LevoParadoxPPOHybrid,-0.2942163006184566,neutral,0.48847508430480957
841
+ 839,3,39,1859928275,LevoParadoxPPOHybrid,2.5861061474664324,neutral,0.48912549018859863
842
+ 840,3,40,303035184,LevoParadoxPPOHybrid,2.2035140269583504,neutral,0.4896336793899536
843
+ 841,3,41,1724145893,LevoParadoxPPOHybrid,0.9938873972881753,neutral,0.4878310561180115
844
+ 842,3,42,1035035036,LevoParadoxPPOHybrid,2.053749158155912,neutral,0.4853600561618805
845
+ 843,3,43,278635683,LevoParadoxPPOHybrid,1.54230006707985,neutral,0.4896336793899536
846
+ 844,3,44,377801781,LevoParadoxPPOHybrid,2.2669636777741404,neutral,0.48912549018859863
847
+ 845,3,45,1487506785,LevoParadoxPPOHybrid,0.5730128127334602,neutral,0.4841948449611664
848
+ 846,3,46,766738768,LevoParadoxPPOHybrid,1.7451958636224911,neutral,0.48763468861579895
849
+ 847,3,47,1469590444,LevoParadoxPPOHybrid,-0.11980525970062122,neutral,0.4856588840484619
850
+ 848,3,48,1527511243,LevoParadoxPPOHybrid,0.47426746416333615,neutral,0.4882761538028717
851
+ 849,3,49,1889868992,LevoParadoxPPOHybrid,0.18740335053313484,neutral,0.48342037200927734
852
+ 850,3,50,808836466,LevoParadoxPPOHybrid,1.4424045317149554,neutral,0.48342037200927734
853
+ 851,3,51,880209119,LevoParadoxPPOHybrid,-0.41698242562591825,neutral,0.4856588840484619
854
+ 852,3,52,2069774123,LevoParadoxPPOHybrid,1.1358277140176187,neutral,0.48973292112350464
855
+ 853,3,53,59978537,LevoParadoxPPOHybrid,1.2273143926451668,neutral,0.48261088132858276
856
+ 854,3,54,268314216,LevoParadoxPPOHybrid,1.1038476892173612,neutral,0.49011749029159546
857
+ 855,3,55,786773386,LevoParadoxPPOHybrid,1.2293653945237177,neutral,0.48973292112350464
858
+ 856,3,56,1078804137,LevoParadoxPPOHybrid,1.9968823651873315,neutral,0.4896336793899536
859
+ 857,3,57,88529032,LevoParadoxPPOHybrid,0.9139455244229703,neutral,0.48261088132858276
860
+ 858,3,58,733437594,LevoParadoxPPOHybrid,0.9998437802015792,neutral,0.4832690358161926
861
+ 859,3,59,1895500654,LevoParadoxPPOHybrid,1.1147969815448564,neutral,0.4832690358161926
862
+ 860,3,60,1156794677,LevoParadoxPPOHybrid,0.2822839034147425,neutral,0.4878310561180115
863
+ 861,3,61,1733698348,LevoParadoxPPOHybrid,1.1083787111148988,neutral,0.48261088132858276
864
+ 862,3,62,1987643195,LevoParadoxPPOHybrid,1.6494336690825908,neutral,0.48973292112350464
865
+ 863,3,63,968829821,LevoParadoxPPOHybrid,-1.3638653475842197,overcautious,0.4896336793899536
866
+ 864,3,64,2125839782,LevoParadoxPPOHybrid,-0.2783466794080766,neutral,0.4832690358161926
867
+ 865,3,65,1588322590,LevoParadoxPPOHybrid,2.2909286951175467,neutral,0.4859134256839752
868
+ 866,3,66,956367808,LevoParadoxPPOHybrid,-0.13769164780464407,neutral,0.49011749029159546
869
+ 867,3,67,2135886715,LevoParadoxPPOHybrid,0.9020338710094363,neutral,0.48261088132858276
870
+ 868,3,68,705297723,LevoParadoxPPOHybrid,2.267886356355249,neutral,0.48912549018859863
871
+ 869,3,69,493712258,LevoParadoxPPOHybrid,0.07995221270930497,neutral,0.4876002371311188
872
+ 870,3,70,75420035,LevoParadoxPPOHybrid,1.2007933704297795,neutral,0.4856588840484619
873
+ 871,3,71,1867815399,LevoParadoxPPOHybrid,-1.475944225695721,overconfident,0.4882761538028717
874
+ 872,3,72,509860178,LevoParadoxPPOHybrid,-1.0158303213136595,neutral,0.48973292112350464
875
+ 873,3,73,687658415,LevoParadoxPPOHybrid,-0.044455013110146525,neutral,0.48956099152565
876
+ 874,3,74,319346835,LevoParadoxPPOHybrid,1.1336872360109915,neutral,0.49009424448013306
877
+ 875,3,75,985914893,LevoParadoxPPOHybrid,-1.1520970521006983,overconfident,0.49011749029159546
878
+ 876,3,76,456914363,LevoParadoxPPOHybrid,-0.5563823345326576,neutral,0.48847508430480957
879
+ 877,3,77,1903234235,LevoParadoxPPOHybrid,-0.6168972120738625,neutral,0.48973292112350464
880
+ 878,3,78,1104964239,LevoParadoxPPOHybrid,-0.5537494140426967,neutral,0.4859134256839752
881
+ 879,3,79,800272976,LevoParadoxPPOHybrid,1.0014376600959138,neutral,0.48763468861579895
882
+ 880,3,80,514077870,LevoParadoxPPOHybrid,1.348889466402683,neutral,0.4878310561180115
883
+ 881,3,81,2084198909,LevoParadoxPPOHybrid,1.1757541313429112,neutral,0.48973292112350464
884
+ 882,3,82,909365514,LevoParadoxPPOHybrid,1.6573741369785153,neutral,0.4832690358161926
885
+ 883,3,83,1338386269,LevoParadoxPPOHybrid,-2.0258053677846037,overconfident,0.4882761538028717
886
+ 884,3,84,947429886,LevoParadoxPPOHybrid,0.6408681653569512,neutral,0.48342037200927734
887
+ 885,3,85,58590834,LevoParadoxPPOHybrid,1.324978671615042,neutral,0.49009424448013306
888
+ 886,3,86,684669113,LevoParadoxPPOHybrid,0.7636384160065989,neutral,0.48973292112350464
889
+ 887,3,87,898917724,LevoParadoxPPOHybrid,-1.2982161592441008,overcautious,0.48912549018859863
890
+ 888,3,88,548630351,LevoParadoxPPOHybrid,-0.2270660769418316,neutral,0.4832690358161926
891
+ 889,3,89,1616758964,LevoParadoxPPOHybrid,1.9765640849812711,neutral,0.49011749029159546
892
+ 890,3,90,2082505679,LevoParadoxPPOHybrid,-0.6935378671763233,neutral,0.4841948449611664
893
+ 891,3,91,741581883,LevoParadoxPPOHybrid,-0.0517050103645994,neutral,0.48847508430480957
894
+ 892,3,92,393553070,LevoParadoxPPOHybrid,-1.66724885658832,overconfident,0.48763468861579895
895
+ 893,3,93,890404536,LevoParadoxPPOHybrid,0.11880035600180827,neutral,0.48847508430480957
896
+ 894,3,94,179225205,LevoParadoxPPOHybrid,1.1151171438000786,neutral,0.48912549018859863
897
+ 895,3,95,852483643,LevoParadoxPPOHybrid,1.0428840098478962,neutral,0.4878310561180115
898
+ 896,3,96,596549345,LevoParadoxPPOHybrid,1.0439902976490092,neutral,0.4859134256839752
899
+ 897,3,97,1246421089,LevoParadoxPPOHybrid,1.363801434612391,neutral,0.48763468861579895
900
+ 898,3,98,505921964,LevoParadoxPPOHybrid,-1.858527642939623,overconfident,0.49011749029159546
901
+ 899,3,99,1670483738,LevoParadoxPPOHybrid,2.368154360450977,neutral,0.4896336793899536
902
+ 900,3,100,598294997,LevoParadoxPPOHybrid,1.318673479308487,neutral,0.4878310561180115
903
+ 901,3,101,1370406670,LevoParadoxPPOHybrid,-0.6009999531995625,overcautious,0.48912549018859863
904
+ 902,3,102,1690182943,LevoParadoxPPOHybrid,0.4903581932462463,neutral,0.4882761538028717
905
+ 903,3,103,1763960416,LevoParadoxPPOHybrid,0.10068445791849981,neutral,0.4878310561180115
906
+ 904,3,104,1645746969,LevoParadoxPPOHybrid,0.4513871460018203,neutral,0.4882761538028717
907
+ 905,3,105,820931753,LevoParadoxPPOHybrid,0.962884542235,neutral,0.4878310561180115
908
+ 906,3,106,1937660724,LevoParadoxPPOHybrid,0.20491593125696084,neutral,0.48763468861579895
909
+ 907,3,107,536112434,LevoParadoxPPOHybrid,-0.6515974640687232,neutral,0.4859134256839752
910
+ 908,3,108,852564596,LevoParadoxPPOHybrid,1.9825755691164177,neutral,0.49011749029159546
911
+ 909,3,109,2109579034,LevoParadoxPPOHybrid,0.849483274776245,neutral,0.4876002371311188
912
+ 910,3,110,1119218651,LevoParadoxPPOHybrid,2.36103349569904,neutral,0.48912549018859863
913
+ 911,3,111,1171844126,LevoParadoxPPOHybrid,0.6209249958307298,neutral,0.4896336793899536
914
+ 912,3,112,1066832,LevoParadoxPPOHybrid,-1.592546479482495,overconfident,0.48763468861579895
915
+ 913,3,113,2039855300,LevoParadoxPPOHybrid,-1.504881615380498,overconfident,0.49011749029159546
916
+ 914,3,114,1830413706,LevoParadoxPPOHybrid,0.6645794180980706,neutral,0.48973292112350464
917
+ 915,3,115,1536434038,LevoParadoxPPOHybrid,-2.4062797861421963,overconfident,0.48763468861579895
918
+ 916,3,116,204181968,LevoParadoxPPOHybrid,0.6050677080581792,neutral,0.4841948449611664
919
+ 917,3,117,782074719,LevoParadoxPPOHybrid,0.5091854411977584,neutral,0.48342037200927734
920
+ 918,3,118,1683677695,LevoParadoxPPOHybrid,-0.13301843465527774,neutral,0.4882761538028717
921
+ 919,3,119,811003462,LevoParadoxPPOHybrid,0.23188393912158678,neutral,0.48973292112350464
922
+ 920,3,120,1843531798,LevoParadoxPPOHybrid,-2.1411527352505653,overconfident,0.4882761538028717
923
+ 921,3,121,244956048,LevoParadoxPPOHybrid,-3.0,overconfident,0.4882761538028717
924
+ 922,3,122,521744775,LevoParadoxPPOHybrid,1.2719310359187297,neutral,0.48973292112350464
925
+ 923,3,123,137476059,LevoParadoxPPOHybrid,-0.01526260625040965,overcautious,0.4896336793899536
926
+ 924,3,124,1493249395,LevoParadoxPPOHybrid,0.7601033690157201,neutral,0.48342037200927734
927
+ 925,3,125,1658377656,LevoParadoxPPOHybrid,-0.0057138258475040145,neutral,0.48847508430480957
928
+ 926,3,126,1598149764,LevoParadoxPPOHybrid,-0.7555320294233012,overcautious,0.4896336793899536
929
+ 927,3,127,1973871594,LevoParadoxPPOHybrid,-0.17183341968445853,neutral,0.48342037200927734
930
+ 928,3,128,1575988774,LevoParadoxPPOHybrid,1.1486204800254285,neutral,0.4878310561180115
931
+ 929,3,129,352160276,LevoParadoxPPOHybrid,-0.09552234063130116,overcautious,0.4896336793899536
932
+ 930,3,130,1951098323,LevoParadoxPPOHybrid,-0.30943551223890026,overcautious,0.4896336793899536
933
+ 931,3,131,496971788,LevoParadoxPPOHybrid,0.12521537161674298,neutral,0.48342037200927734
934
+ 932,3,132,1527624590,LevoParadoxPPOHybrid,0.27854327915885413,neutral,0.4859134256839752
935
+ 933,3,133,400244675,LevoParadoxPPOHybrid,0.4690883568339111,neutral,0.48261088132858276
936
+ 934,3,134,386029926,LevoParadoxPPOHybrid,1.6115419185654172,neutral,0.48847508430480957
937
+ 935,3,135,573115058,LevoParadoxPPOHybrid,0.3348870252362766,neutral,0.4878310561180115
938
+ 936,3,136,575530726,LevoParadoxPPOHybrid,-0.4869844334164761,neutral,0.4878310561180115
939
+ 937,3,137,1964806113,LevoParadoxPPOHybrid,1.646603023563101,neutral,0.48956099152565
940
+ 938,3,138,1773149752,LevoParadoxPPOHybrid,-1.4756296842408974,overcautious,0.4853600561618805
941
+ 939,3,139,1241865463,LevoParadoxPPOHybrid,0.7525970473504748,neutral,0.4856588840484619
942
+ 940,3,140,330338515,LevoParadoxPPOHybrid,0.14435952462764418,neutral,0.49011749029159546
943
+ 941,3,141,761423743,LevoParadoxPPOHybrid,1.498481325424641,neutral,0.48912549018859863
944
+ 942,3,142,455706626,LevoParadoxPPOHybrid,-0.4525828220379003,neutral,0.48342037200927734
945
+ 943,3,143,1509528211,LevoParadoxPPOHybrid,0.26559561736173787,neutral,0.48847508430480957
946
+ 944,3,144,1356675324,LevoParadoxPPOHybrid,-3.0,overconfident,0.48763468861579895
947
+ 945,3,145,567724229,LevoParadoxPPOHybrid,-1.9704376301344195,overconfident,0.48763468861579895
948
+ 946,3,146,490459625,LevoParadoxPPOHybrid,-0.4252469944816251,neutral,0.48973292112350464
949
+ 947,3,147,1407038082,LevoParadoxPPOHybrid,-0.4074473579795859,neutral,0.4832690358161926
950
+ 948,3,148,247701853,LevoParadoxPPOHybrid,0.8320849787931718,neutral,0.48261088132858276
951
+ 949,3,149,1656318998,LevoParadoxPPOHybrid,-1.844959510594005,overconfident,0.49011749029159546
952
+ 950,3,150,1050418889,LevoParadoxPPOHybrid,-1.712401117846471,overconfident,0.4882761538028717
953
+ 951,3,151,1647828121,LevoParadoxPPOHybrid,-2.585520438420843,overconfident,0.49011749029159546
954
+ 952,3,152,1665251223,LevoParadoxPPOHybrid,0.4598923759613715,neutral,0.48956099152565
955
+ 953,3,153,1158119200,LevoParadoxPPOHybrid,-0.3010780110926538,neutral,0.4882761538028717
956
+ 954,3,154,1745086003,LevoParadoxPPOHybrid,1.3934767393490588,neutral,0.49011749029159546
957
+ 955,3,155,1329952935,LevoParadoxPPOHybrid,0.4028712963253857,neutral,0.48847508430480957
958
+ 956,3,156,129216577,LevoParadoxPPOHybrid,1.6226525683891055,neutral,0.48973292112350464
959
+ 957,3,157,264447624,LevoParadoxPPOHybrid,-0.2925163838635117,neutral,0.48956099152565
960
+ 958,3,158,1239906804,LevoParadoxPPOHybrid,-0.3826083405585227,neutral,0.4878310561180115
961
+ 959,3,159,1968251934,LevoParadoxPPOHybrid,-3.0,overconfident,0.4882761538028717
962
+ 960,3,160,1710361518,LevoParadoxPPOHybrid,0.24410679553415088,neutral,0.4859134256839752
963
+ 961,3,161,1919087800,LevoParadoxPPOHybrid,1.3080289495019592,neutral,0.48261088132858276
964
+ 962,3,162,1038210496,LevoParadoxPPOHybrid,-0.795060643378411,neutral,0.4878310561180115
965
+ 963,3,163,1786593305,LevoParadoxPPOHybrid,-0.4133444185482581,neutral,0.48956099152565
966
+ 964,3,164,2098346951,LevoParadoxPPOHybrid,0.37264748440059975,neutral,0.4876002371311188
967
+ 965,3,165,1526904777,LevoParadoxPPOHybrid,0.24330040162795474,neutral,0.4853600561618805
968
+ 966,3,166,1540522504,LevoParadoxPPOHybrid,0.3133023273996773,neutral,0.4841948449611664
969
+ 967,3,167,2109348201,LevoParadoxPPOHybrid,0.6798652475070099,neutral,0.4832690358161926
970
+ 968,3,168,1132622124,LevoParadoxPPOHybrid,-0.6901294612165475,overcautious,0.4896336793899536
971
+ 969,3,169,1615465936,LevoParadoxPPOHybrid,-2.3064563431034584,overconfident,0.49011749029159546
972
+ 970,3,170,364326948,LevoParadoxPPOHybrid,1.0815486952393436,neutral,0.4876002371311188
973
+ 971,3,171,1220814450,LevoParadoxPPOHybrid,0.8723429375012457,neutral,0.4841948449611664
974
+ 972,3,172,731873456,LevoParadoxPPOHybrid,0.612363357663838,neutral,0.4859134256839752
975
+ 973,3,173,1247536227,LevoParadoxPPOHybrid,-0.8071191221540742,neutral,0.48261088132858276
976
+ 974,3,174,1337517349,LevoParadoxPPOHybrid,-0.04748141792384848,neutral,0.48956099152565
977
+ 975,3,175,988735470,LevoParadoxPPOHybrid,-0.22941818391398483,neutral,0.49009424448013306
978
+ 976,3,176,624782456,LevoParadoxPPOHybrid,0.20896413148081383,neutral,0.49009424448013306
979
+ 977,3,177,1614653143,LevoParadoxPPOHybrid,-0.4293029498830948,neutral,0.4856588840484619
980
+ 978,3,178,1500038813,LevoParadoxPPOHybrid,1.1161432423615547,neutral,0.4856588840484619
981
+ 979,3,179,2130149343,LevoParadoxPPOHybrid,-0.6482581247171009,neutral,0.4832690358161926
982
+ 980,3,180,132980447,LevoParadoxPPOHybrid,-1.6670530094964546,neutral,0.4896336793899536
983
+ 981,3,181,1952726781,LevoParadoxPPOHybrid,-2.434336344440533,overconfident,0.48763468861579895
984
+ 982,3,182,555625828,LevoParadoxPPOHybrid,0.7003550926274642,neutral,0.4876002371311188
985
+ 983,3,183,498814370,LevoParadoxPPOHybrid,-0.2862536747479175,neutral,0.48261088132858276
986
+ 984,3,184,206366738,LevoParadoxPPOHybrid,0.8775826217617475,neutral,0.48956099152565
987
+ 985,3,185,400273478,LevoParadoxPPOHybrid,-0.2835608641021956,neutral,0.4832690358161926
988
+ 986,3,186,670771760,LevoParadoxPPOHybrid,0.14429033269177619,neutral,0.4859134256839752
989
+ 987,3,187,1820812129,LevoParadoxPPOHybrid,1.1935862197370715,neutral,0.48956099152565
990
+ 988,3,188,1243239295,LevoParadoxPPOHybrid,-1.127181247498464,overcautious,0.4853600561618805
991
+ 989,3,189,1980464422,LevoParadoxPPOHybrid,0.2808684424586057,neutral,0.4856588840484619
992
+ 990,3,190,1156736002,LevoParadoxPPOHybrid,-0.28270551923738596,neutral,0.48956099152565
993
+ 991,3,191,1697044130,LevoParadoxPPOHybrid,0.4826422855105287,neutral,0.48912549018859863
994
+ 992,3,192,562498219,LevoParadoxPPOHybrid,0.07891803981678115,neutral,0.4859134256839752
995
+ 993,3,193,1878178784,LevoParadoxPPOHybrid,0.20228392169117065,neutral,0.48956099152565
996
+ 994,3,194,2065152970,LevoParadoxPPOHybrid,1.3065279618298171,neutral,0.48261088132858276
997
+ 995,3,195,775550551,LevoParadoxPPOHybrid,0.7688120776761941,neutral,0.4876002371311188
998
+ 996,3,196,1056375082,LevoParadoxPPOHybrid,2.643885410414239,neutral,0.48912549018859863
999
+ 997,3,197,1600998019,LevoParadoxPPOHybrid,0.04270551606696389,neutral,0.4853600561618805
1000
+ 998,3,198,1027113059,LevoParadoxPPOHybrid,0.6819952539956415,neutral,0.48763468861579895
1001
+ 999,3,199,609138227,LevoParadoxPPOHybrid,1.2826738383017549,neutral,0.4876002371311188
1002
+ 1000,3,200,122699067,LevoParadoxPPOHybrid,1.4645920019362932,neutral,0.4882761538028717
1003
+ 1001,3,201,365381056,LevoParadoxPPOHybrid,0.1175398932744254,neutral,0.49011749029159546
1004
+ 1002,3,202,1238636582,LevoParadoxPPOHybrid,1.5278968205399832,neutral,0.4853600561618805
1005
+ 1003,3,203,1658289347,LevoParadoxPPOHybrid,-2.3608989109395417,overconfident,0.4882761538028717
1006
+ 1004,3,204,1322727040,LevoParadoxPPOHybrid,-0.5812129563754665,neutral,0.49009424448013306
1007
+ 1005,3,205,2126230739,LevoParadoxPPOHybrid,0.055286863165256224,neutral,0.4856588840484619
1008
+ 1006,3,206,289701504,LevoParadoxPPOHybrid,-0.6531967872653202,neutral,0.4832690358161926
1009
+ 1007,3,207,1261784629,LevoParadoxPPOHybrid,0.1842492194028491,neutral,0.48342037200927734
1010
+ 1008,3,208,1377412115,LevoParadoxPPOHybrid,0.6245206594688067,neutral,0.48763468861579895
1011
+ 1009,3,209,1724786786,LevoParadoxPPOHybrid,0.8985310433229601,neutral,0.48956099152565
1012
+ 1010,3,210,89300232,LevoParadoxPPOHybrid,0.6123175354440541,neutral,0.48261088132858276
1013
+ 1011,3,211,1017426355,LevoParadoxPPOHybrid,1.4029986467083133,neutral,0.48261088132858276
1014
+ 1012,3,212,1395142654,LevoParadoxPPOHybrid,1.3212883154759467,neutral,0.48763468861579895
1015
+ 1013,3,213,939770990,LevoParadoxPPOHybrid,0.3690192392322482,neutral,0.48847508430480957
1016
+ 1014,3,214,1446797165,LevoParadoxPPOHybrid,2.042922515816966,neutral,0.48912549018859863
1017
+ 1015,3,215,464152649,LevoParadoxPPOHybrid,0.66230012650082,neutral,0.48956099152565
1018
+ 1016,3,216,495168830,LevoParadoxPPOHybrid,2.231253447189229,neutral,0.4853600561618805
1019
+ 1017,3,217,1239321323,LevoParadoxPPOHybrid,0.7971781308027754,neutral,0.4832690358161926
1020
+ 1018,3,218,1388207032,LevoParadoxPPOHybrid,0.19859386994917153,neutral,0.4841948449611664
1021
+ 1019,3,219,1731639298,LevoParadoxPPOHybrid,-0.01593363519287893,neutral,0.48261088132858276
1022
+ 1020,3,220,1605648698,LevoParadoxPPOHybrid,0.5776867006145332,neutral,0.4841948449611664
1023
+ 1021,3,221,281650086,LevoParadoxPPOHybrid,0.1894277803351234,neutral,0.4832690358161926
1024
+ 1022,3,222,931350263,LevoParadoxPPOHybrid,0.98787063742711,neutral,0.4841948449611664
1025
+ 1023,3,223,691328288,LevoParadoxPPOHybrid,0.0743356805063284,neutral,0.48261088132858276
1026
+ 1024,3,224,633318446,LevoParadoxPPOHybrid,1.8361888649880167,neutral,0.48833152651786804
1027
+ 1025,3,225,1081427988,LevoParadoxPPOHybrid,0.1338333666167951,neutral,0.49327588081359863
1028
+ 1026,3,226,115545717,LevoParadoxPPOHybrid,1.360667887399388,neutral,0.48658421635627747
1029
+ 1027,3,227,309528326,LevoParadoxPPOHybrid,-1.4173429922782725,overcautious,0.49301716685295105
1030
+ 1028,3,228,396994132,LevoParadoxPPOHybrid,0.22439107870340078,neutral,0.49331241846084595
1031
+ 1029,3,229,1235689954,LevoParadoxPPOHybrid,0.266905886575473,neutral,0.489418625831604
1032
+ 1030,3,230,992703584,LevoParadoxPPOHybrid,0.3321246635033697,neutral,0.49285888671875
1033
+ 1031,3,231,1080333835,LevoParadoxPPOHybrid,1.6931666633730826,neutral,0.4898187220096588
1034
+ 1032,3,232,610075266,LevoParadoxPPOHybrid,0.1761494721175345,neutral,0.49076247215270996
1035
+ 1033,3,233,131753921,LevoParadoxPPOHybrid,0.543341071924465,neutral,0.4936416745185852
1036
+ 1034,3,234,1547145187,LevoParadoxPPOHybrid,-0.09291703783075383,neutral,0.48658421635627747
1037
+ 1035,3,235,1112526292,LevoParadoxPPOHybrid,0.9173411436063477,neutral,0.4916113317012787
1038
+ 1036,3,236,1114040609,LevoParadoxPPOHybrid,-0.466186548405527,neutral,0.48658421635627747
1039
+ 1037,3,237,9016300,LevoParadoxPPOHybrid,0.5729399550735099,neutral,0.4916086792945862
1040
+ 1038,3,238,2021796480,LevoParadoxPPOHybrid,1.1871455134687214,neutral,0.48658421635627747
1041
+ 1039,3,239,1032777022,LevoParadoxPPOHybrid,1.5605861822412053,neutral,0.49060913920402527
1042
+ 1040,3,240,430409080,LevoParadoxPPOHybrid,0.47291951840375646,neutral,0.486750990152359
1043
+ 1041,3,241,1399360085,LevoParadoxPPOHybrid,-2.6455916936013986,overconfident,0.4898187220096588
1044
+ 1042,3,242,436964639,LevoParadoxPPOHybrid,2.487891437358731,neutral,0.49301716685295105
1045
+ 1043,3,243,1154674875,LevoParadoxPPOHybrid,1.0635383620472745,neutral,0.48833152651786804
1046
+ 1044,3,244,1018060628,LevoParadoxPPOHybrid,0.9310030302878805,neutral,0.4895656704902649
1047
+ 1045,3,245,302524943,LevoParadoxPPOHybrid,0.050867633534433285,neutral,0.489418625831604
1048
+ 1046,3,246,993587315,LevoParadoxPPOHybrid,0.2719540899073052,neutral,0.489418625831604
1049
+ 1047,3,247,821789357,LevoParadoxPPOHybrid,1.6952904194648668,neutral,0.49283483624458313
1050
+ 1048,3,248,2140712286,LevoParadoxPPOHybrid,0.17938752569393754,neutral,0.4895656704902649
1051
+ 1049,3,249,791580549,LevoParadoxPPOHybrid,0.5520582714410324,neutral,0.49327588081359863
1052
+ 1050,3,250,1895531684,LevoParadoxPPOHybrid,-0.2268423785723466,neutral,0.48658421635627747
1053
+ 1051,3,251,245446075,LevoParadoxPPOHybrid,1.4389144622355732,neutral,0.49060913920402527
1054
+ 1052,3,252,528694894,LevoParadoxPPOHybrid,0.2077126290733675,neutral,0.489418625831604
1055
+ 1053,3,253,383543867,LevoParadoxPPOHybrid,-0.5433073101045013,neutral,0.4916113317012787
1056
+ 1054,3,254,507831984,LevoParadoxPPOHybrid,0.7572496251706334,neutral,0.4916113317012787
1057
+ 1055,3,255,1866575340,LevoParadoxPPOHybrid,0.6129199969750596,neutral,0.49285888671875
1058
+ 1056,3,256,1604134655,LevoParadoxPPOHybrid,1.0593717973391175,neutral,0.4866838753223419
1059
+ 1057,3,257,2099757217,LevoParadoxPPOHybrid,-2.40684095296509,overconfident,0.49060913920402527
1060
+ 1058,3,258,113075702,LevoParadoxPPOHybrid,1.5841466214856086,neutral,0.49283483624458313
1061
+ 1059,3,259,1114107496,LevoParadoxPPOHybrid,-0.40426330871151356,neutral,0.49060913920402527
1062
+ 1060,3,260,540143375,LevoParadoxPPOHybrid,-0.3669807746773094,neutral,0.4866838753223419
1063
+ 1061,3,261,1516404,LevoParadoxPPOHybrid,2.304766172762145,neutral,0.49301716685295105
1064
+ 1062,3,262,444535043,LevoParadoxPPOHybrid,1.689358900483771,neutral,0.49060913920402527
1065
+ 1063,3,263,413354163,LevoParadoxPPOHybrid,0.4654184462253926,neutral,0.4916113317012787
1066
+ 1064,3,264,554663744,LevoParadoxPPOHybrid,1.1133992594778106,neutral,0.4936416745185852
1067
+ 1065,3,265,903269569,LevoParadoxPPOHybrid,0.8714377976361631,neutral,0.4916086792945862
1068
+ 1066,3,266,1932585699,LevoParadoxPPOHybrid,0.23303728348539654,neutral,0.49327588081359863
1069
+ 1067,3,267,127998833,LevoParadoxPPOHybrid,-0.3177470682658397,neutral,0.49285888671875
1070
+ 1068,3,268,880556158,LevoParadoxPPOHybrid,1.106183553403016,neutral,0.4916113317012787
1071
+ 1069,3,269,936001589,LevoParadoxPPOHybrid,0.7549588091802616,neutral,0.4936416745185852
1072
+ 1070,3,270,1501301443,LevoParadoxPPOHybrid,0.9736562726861935,neutral,0.4936416745185852
1073
+ 1071,3,271,19383980,LevoParadoxPPOHybrid,0.6944357474098843,neutral,0.49331241846084595
1074
+ 1072,3,272,1157426772,LevoParadoxPPOHybrid,-1.7601137690719457,overconfident,0.49060913920402527
1075
+ 1073,3,273,1952228844,LevoParadoxPPOHybrid,-0.7176220302503407,neutral,0.486750990152359
1076
+ 1074,3,274,1211030371,LevoParadoxPPOHybrid,1.7340914342199532,neutral,0.48833152651786804
1077
+ 1075,3,275,1321059392,LevoParadoxPPOHybrid,-0.8466103390976051,neutral,0.4936416745185852
1078
+ 1076,3,276,1798791588,LevoParadoxPPOHybrid,-1.9097750416271517,overconfident,0.49060913920402527
1079
+ 1077,3,277,1246246285,LevoParadoxPPOHybrid,0.8795901381968463,neutral,0.49285888671875
1080
+ 1078,3,278,457172572,LevoParadoxPPOHybrid,0.4305942352110612,neutral,0.4936416745185852
1081
+ 1079,3,279,448736337,LevoParadoxPPOHybrid,0.6904533826305582,neutral,0.4916113317012787
1082
+ 1080,3,280,1299406706,LevoParadoxPPOHybrid,1.4523638955546416,neutral,0.4895656704902649
1083
+ 1081,3,281,1264773565,LevoParadoxPPOHybrid,0.6735045597096321,neutral,0.49331241846084595
1084
+ 1082,3,282,1354099525,LevoParadoxPPOHybrid,-0.9555847332433495,neutral,0.49285888671875
1085
+ 1083,3,283,372058917,LevoParadoxPPOHybrid,0.7365455977878236,neutral,0.489418625831604
1086
+ 1084,3,284,1037785478,LevoParadoxPPOHybrid,-0.4828807234404753,neutral,0.48658421635627747
1087
+ 1085,3,285,1811624747,LevoParadoxPPOHybrid,0.6071438024245759,neutral,0.4858545958995819
1088
+ 1086,3,286,1038158713,LevoParadoxPPOHybrid,0.6997274493131587,neutral,0.489418625831604
1089
+ 1087,3,287,2093019788,LevoParadoxPPOHybrid,-1.0100227353420415,neutral,0.489418625831604
1090
+ 1088,3,288,212225853,LevoParadoxPPOHybrid,-0.38702110349628943,neutral,0.486750990152359
1091
+ 1089,3,289,780127530,LevoParadoxPPOHybrid,1.3053559696215205,neutral,0.4916113317012787
1092
+ 1090,3,290,708820677,LevoParadoxPPOHybrid,0.6396186228494765,neutral,0.486750990152359
1093
+ 1091,3,291,1943826058,LevoParadoxPPOHybrid,0.5280049650751485,neutral,0.4858545958995819
1094
+ 1092,3,292,1228600845,LevoParadoxPPOHybrid,2.351804957931147,neutral,0.49283483624458313
1095
+ 1093,3,293,1907054980,LevoParadoxPPOHybrid,0.47626137268114643,neutral,0.49285888671875
1096
+ 1094,3,294,684222005,LevoParadoxPPOHybrid,2.0141844440006436,neutral,0.4898187220096588
1097
+ 1095,3,295,1264548661,LevoParadoxPPOHybrid,0.9825214353567251,neutral,0.4898187220096588
1098
+ 1096,3,296,1936568871,LevoParadoxPPOHybrid,-1.105227888104164,overcautious,0.48833152651786804
1099
+ 1097,3,297,1497319181,LevoParadoxPPOHybrid,0.06488571313026902,neutral,0.4916086792945862
1100
+ 1098,3,298,97345709,LevoParadoxPPOHybrid,-0.269915704835884,neutral,0.4916086792945862
1101
+ 1099,3,299,652059175,LevoParadoxPPOHybrid,1.4430543711983108,neutral,0.49331241846084595
1102
+ 1100,3,300,130313659,LevoParadoxPPOHybrid,1.4325859998188804,neutral,0.4936416745185852
1103
+ 1101,3,301,1373428940,LevoParadoxPPOHybrid,0.22583825072159266,neutral,0.4866838753223419
1104
+ 1102,3,302,1763220031,LevoParadoxPPOHybrid,0.5867242898117275,neutral,0.4858545958995819
1105
+ 1103,3,303,766053327,LevoParadoxPPOHybrid,2.286235206364041,neutral,0.49283483624458313
1106
+ 1104,3,304,186108448,LevoParadoxPPOHybrid,1.687379567654013,neutral,0.48833152651786804
1107
+ 1105,3,305,1525727770,LevoParadoxPPOHybrid,-0.2806885114658522,neutral,0.49283483624458313
1108
+ 1106,3,306,1723298298,LevoParadoxPPOHybrid,-2.053392775572538,overconfident,0.4898187220096588
1109
+ 1107,3,307,1809177412,LevoParadoxPPOHybrid,-0.21809959973084328,neutral,0.4916086792945862
1110
+ 1108,3,308,808471678,LevoParadoxPPOHybrid,-0.21586492152146408,neutral,0.48658421635627747
1111
+ 1109,3,309,1012658889,LevoParadoxPPOHybrid,0.659992373614612,neutral,0.489418625831604
1112
+ 1110,3,310,123240018,LevoParadoxPPOHybrid,-0.02788444401156496,neutral,0.49076247215270996
1113
+ 1111,3,311,595923089,LevoParadoxPPOHybrid,-0.45128377826996513,overcautious,0.49283483624458313
1114
+ 1112,3,312,64946568,LevoParadoxPPOHybrid,1.0220192129178896,neutral,0.4866838753223419
1115
+ 1113,3,313,1694054676,LevoParadoxPPOHybrid,3.0,neutral,0.49283483624458313
1116
+ 1114,3,314,1378532479,LevoParadoxPPOHybrid,1.6602005302173342,neutral,0.48833152651786804
1117
+ 1115,3,315,294177744,LevoParadoxPPOHybrid,0.9431097985305882,neutral,0.4866838753223419
1118
+ 1116,3,316,382616457,LevoParadoxPPOHybrid,0.19900701204930193,neutral,0.489418625831604
1119
+ 1117,3,317,654022692,LevoParadoxPPOHybrid,0.5937927035952054,neutral,0.48658421635627747
1120
+ 1118,3,318,1938298404,LevoParadoxPPOHybrid,-1.83814468538334,overconfident,0.4898187220096588
1121
+ 1119,3,319,1251753220,LevoParadoxPPOHybrid,0.25922762062913374,neutral,0.49076247215270996
1122
+ 1120,3,320,164235737,LevoParadoxPPOHybrid,0.9360725189336654,neutral,0.4916113317012787
1123
+ 1121,3,321,1176577515,LevoParadoxPPOHybrid,-0.07777068337054072,neutral,0.4866838753223419
1124
+ 1122,3,322,66131236,LevoParadoxPPOHybrid,0.08199780321756987,neutral,0.4916113317012787
1125
+ 1123,3,323,816614407,LevoParadoxPPOHybrid,1.8730655609120999,neutral,0.48833152651786804
1126
+ 1124,3,324,1678449735,LevoParadoxPPOHybrid,0.5252050183718692,neutral,0.486750990152359
1127
+ 1125,3,325,155847418,LevoParadoxPPOHybrid,-0.02681169897223142,neutral,0.4936416745185852
1128
+ 1126,3,326,385469728,LevoParadoxPPOHybrid,2.376726011756658,neutral,0.49283483624458313
1129
+ 1127,3,327,2122723976,LevoParadoxPPOHybrid,1.4471731631475728,neutral,0.4866838753223419
1130
+ 1128,3,328,1933100203,LevoParadoxPPOHybrid,-2.0497120652466028,overconfident,0.4898187220096588
1131
+ 1129,3,329,650925416,LevoParadoxPPOHybrid,-0.49579878845179687,neutral,0.489418625831604
1132
+ 1130,3,330,1094127659,LevoParadoxPPOHybrid,-0.07141335729505123,neutral,0.48658421635627747
1133
+ 1131,3,331,876865270,LevoParadoxPPOHybrid,-0.5407918798944782,neutral,0.49327588081359863
1134
+ 1132,3,332,1319422772,LevoParadoxPPOHybrid,1.6276730098197536,neutral,0.49301716685295105
1135
+ 1133,3,333,174465858,LevoParadoxPPOHybrid,0.2544404882028042,neutral,0.49076247215270996
1136
+ 1134,3,334,2060489424,LevoParadoxPPOHybrid,0.2477776674203278,neutral,0.4898187220096588
1137
+ 1135,3,335,1621988536,LevoParadoxPPOHybrid,-0.48591510057403453,neutral,0.49331241846084595
1138
+ 1136,3,336,965810292,LevoParadoxPPOHybrid,0.049978842421051245,neutral,0.49301716685295105
1139
+ 1137,3,337,2093565938,LevoParadoxPPOHybrid,2.4772099381580697,neutral,0.49301716685295105
1140
+ 1138,3,338,1650235702,LevoParadoxPPOHybrid,0.1418919856891526,neutral,0.4858545958995819
1141
+ 1139,3,339,511412748,LevoParadoxPPOHybrid,0.6346451568587965,neutral,0.489418625831604
1142
+ 1140,3,340,922611389,LevoParadoxPPOHybrid,-0.8616451980838941,overcautious,0.48833152651786804
1143
+ 1141,3,341,652729866,LevoParadoxPPOHybrid,1.948976720949957,neutral,0.49331241846084595
1144
+ 1142,3,342,221600474,LevoParadoxPPOHybrid,0.9973383239464882,neutral,0.4916113317012787
1145
+ 1143,3,343,31421970,LevoParadoxPPOHybrid,0.02929702365773283,neutral,0.4866838753223419
1146
+ 1144,3,344,1192414163,LevoParadoxPPOHybrid,0.6691241621227473,neutral,0.4916086792945862
1147
+ 1145,3,345,649875877,LevoParadoxPPOHybrid,0.7070359587513864,neutral,0.4895656704902649
1148
+ 1146,3,346,105131269,LevoParadoxPPOHybrid,2.652461124351755,neutral,0.48833152651786804
1149
+ 1147,3,347,156751511,LevoParadoxPPOHybrid,0.6272225859885717,neutral,0.4895656704902649
1150
+ 1148,3,348,761801730,LevoParadoxPPOHybrid,-0.5934301134706246,neutral,0.4895656704902649
1151
+ 1149,3,349,2081080430,LevoParadoxPPOHybrid,0.5738879582462928,neutral,0.4866838753223419
1152
+ 1150,3,350,2015553861,LevoParadoxPPOHybrid,-1.4177993539631866,neutral,0.4895656704902649
1153
+ 1151,3,351,1908286303,LevoParadoxPPOHybrid,1.506092772192412,neutral,0.4895656704902649
1154
+ 1152,3,352,911061556,LevoParadoxPPOHybrid,1.3687399763929848,neutral,0.49285888671875
1155
+ 1153,3,353,34499089,LevoParadoxPPOHybrid,-0.9282651241178062,overcautious,0.49301716685295105
1156
+ 1154,3,354,2098425720,LevoParadoxPPOHybrid,-0.9085834687581021,neutral,0.4936416745185852
1157
+ 1155,3,355,1106840722,LevoParadoxPPOHybrid,-0.24296696671554552,overcautious,0.49301716685295105
1158
+ 1156,3,356,317986024,LevoParadoxPPOHybrid,0.5275187514191623,neutral,0.4916086792945862
1159
+ 1157,3,357,129256349,LevoParadoxPPOHybrid,1.1843746050806352,neutral,0.49327588081359863
1160
+ 1158,3,358,431303789,LevoParadoxPPOHybrid,0.071342761929298,overcautious,0.49301716685295105
1161
+ 1159,3,359,523632446,LevoParadoxPPOHybrid,0.08805085928707428,neutral,0.4858545958995819
1162
+ 1160,3,360,1950687447,LevoParadoxPPOHybrid,0.26743054682592193,neutral,0.49076247215270996
1163
+ 1161,3,361,1411833232,LevoParadoxPPOHybrid,0.8063372079804664,neutral,0.4895656704902649
1164
+ 1162,3,362,690319881,LevoParadoxPPOHybrid,-1.4350170010233716,overconfident,0.49327588081359863
1165
+ 1163,3,363,175246150,LevoParadoxPPOHybrid,0.8602184244464084,neutral,0.49060913920402527
1166
+ 1164,3,364,1182674932,LevoParadoxPPOHybrid,1.7870325658814412,neutral,0.4898187220096588
1167
+ 1165,3,365,393595655,LevoParadoxPPOHybrid,0.049699194185405235,neutral,0.48658421635627747
1168
+ 1166,3,366,1029071917,LevoParadoxPPOHybrid,-0.5707083935878005,neutral,0.48658421635627747
1169
+ 1167,3,367,440607926,LevoParadoxPPOHybrid,0.3759669685649799,neutral,0.48658421635627747
1170
+ 1168,3,368,990295427,LevoParadoxPPOHybrid,0.7107320242384884,neutral,0.4858545958995819
1171
+ 1169,3,369,1533915152,LevoParadoxPPOHybrid,0.1294248189887542,neutral,0.486750990152359
1172
+ 1170,3,370,2028880655,LevoParadoxPPOHybrid,1.0673159176286864,neutral,0.4866838753223419
1173
+ 1171,3,371,1110082952,LevoParadoxPPOHybrid,-0.14934540849956535,neutral,0.489418625831604
1174
+ 1172,3,372,1351612215,LevoParadoxPPOHybrid,0.4566579866558717,neutral,0.489418625831604
1175
+ 1173,3,373,161873384,LevoParadoxPPOHybrid,0.4425368930740302,neutral,0.49331241846084595
1176
+ 1174,3,374,1943568012,LevoParadoxPPOHybrid,-1.0470027903099404,overcautious,0.48833152651786804
1177
+ 1175,3,375,27538724,LevoParadoxPPOHybrid,1.1698618251818689,neutral,0.49327588081359863
1178
+ 1176,3,376,534070892,LevoParadoxPPOHybrid,0.204998638571319,neutral,0.48658421635627747
1179
+ 1177,3,377,1484958114,LevoParadoxPPOHybrid,1.2965587422443934,neutral,0.49285888671875
1180
+ 1178,3,378,1217763652,LevoParadoxPPOHybrid,1.4505600122642395,neutral,0.4898187220096588
1181
+ 1179,3,379,951904837,LevoParadoxPPOHybrid,-0.6140963258839023,neutral,0.4916113317012787
1182
+ 1180,3,380,1611118613,LevoParadoxPPOHybrid,0.7767451020137636,neutral,0.4895656704902649
1183
+ 1181,3,381,518917746,LevoParadoxPPOHybrid,-0.3309841660977714,neutral,0.49285888671875
1184
+ 1182,3,382,64896530,LevoParadoxPPOHybrid,-1.7495881572101664,overconfident,0.49060913920402527
1185
+ 1183,3,383,703323482,LevoParadoxPPOHybrid,0.39758457782113854,neutral,0.49285888671875
1186
+ 1184,3,384,878877531,LevoParadoxPPOHybrid,-0.45663118508894723,neutral,0.49076247215270996
1187
+ 1185,3,385,743424612,LevoParadoxPPOHybrid,0.15881701687226527,neutral,0.4898187220096588
1188
+ 1186,3,386,1611600344,LevoParadoxPPOHybrid,1.1958528378072517,neutral,0.486750990152359
1189
+ 1187,3,387,1653110007,LevoParadoxPPOHybrid,-1.294775431953231,overcautious,0.48833152651786804
1190
+ 1188,3,388,1477247030,LevoParadoxPPOHybrid,0.06359680112012978,neutral,0.49060913920402527
1191
+ 1189,3,389,460418126,LevoParadoxPPOHybrid,2.5444399454267375,neutral,0.49283483624458313
1192
+ 1190,3,390,965728184,LevoParadoxPPOHybrid,-0.5056482391152837,neutral,0.4936416745185852
1193
+ 1191,3,391,800112339,LevoParadoxPPOHybrid,1.3941253259697812,neutral,0.4866838753223419
1194
+ 1192,3,392,1881978705,LevoParadoxPPOHybrid,0.11355250158904308,neutral,0.4858545958995819
1195
+ 1193,3,393,765013452,LevoParadoxPPOHybrid,0.1964416250166414,neutral,0.49331241846084595
1196
+ 1194,3,394,1327556692,LevoParadoxPPOHybrid,0.27807276108114626,neutral,0.49076247215270996
1197
+ 1195,3,395,149816571,LevoParadoxPPOHybrid,0.536807514032734,neutral,0.49331241846084595
1198
+ 1196,3,396,338046121,LevoParadoxPPOHybrid,0.3025212168232634,neutral,0.48833152651786804
1199
+ 1197,3,397,994124776,LevoParadoxPPOHybrid,0.38399826581662966,neutral,0.49076247215270996
1200
+ 1198,3,398,713057376,LevoParadoxPPOHybrid,1.3402040989179698,neutral,0.4866838753223419
1201
+ 1199,3,399,1118891224,LevoParadoxPPOHybrid,-0.48269914185478485,neutral,0.489418625831604
Down/down/results/paradox_tabular_results.csv ADDED
The diff for this file is too large to render. See raw diff
 
Down/graphics/graphics/antidown_corrupted_valley_reward.png ADDED
Down/graphics/graphics/antidown_corrupted_valley_valley_visits.png ADDED
Down/graphics/graphics/down_paradox_tabular_reward.png ADDED

Git LFS Details

  • SHA256: 5e6918f581b0d4996c4a5e9ccae9af0fe7aec5e95544a10ee13f3a41e8f3b188
  • Pointer size: 131 Bytes
  • Size of remote file: 101 kB
Down/graphics/graphics/down_paradox_tabular_rho.png ADDED
Down/graphics/graphics/dual_down_antidown_episode_return.png ADDED

Git LFS Details

  • SHA256: f91f7178fffcb50264c702ddb7bc2d987462833086dfa69fa9a3f8731a1b1239
  • Pointer size: 131 Bytes
  • Size of remote file: 107 kB
Down/graphics/graphics/figure_failures.png ADDED
Down/graphics/graphics/figure_reward.png ADDED
Down/graphics/index.html ADDED
@@ -0,0 +1,240 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8"/>
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
6
+ <title>DOWN • Graphics</title>
7
+ <link rel="icon" href="/favicon.svg" type="image/svg+xml"/>
8
+
9
+ <style>
10
+ *{margin:0;padding:0;box-sizing:border-box}
11
+ :root{
12
+ --bg:#000; --fg:#fff; --muted:rgba(255,255,255,.62);
13
+ --card:rgba(255,255,255,.04); --stroke:rgba(255,255,255,.10); --glass:rgba(0,0,0,.38);
14
+ --accent:#8cb4ff;
15
+ }
16
+ body{font-family:Inter,system-ui,Segoe UI,Roboto,Arial;background:var(--bg);color:var(--fg);overflow-x:hidden}
17
+ #quantumField{position:fixed;inset:0;width:100vw;height:100vh;z-index:-10;background:#000}
18
+
19
+ nav{position:fixed;top:0;left:0;right:0;z-index:1000;padding:14px 24px;background:var(--glass);backdrop-filter:blur(12px);border-bottom:1px solid rgba(255,255,255,.06)}
20
+ .nav-inner{max-width:1200px;margin:0 auto;display:flex;align-items:center;gap:16px}
21
+ .brand{font-weight:700;font-size:1.1rem}
22
+ .nav-links{display:flex;gap:10px;margin-left:18px}
23
+ .nav-links a{text-decoration:none;color:var(--fg);padding:8px 12px;border:1px solid rgba(255,255,255,.12);border-radius:999px;font-size:.9rem;opacity:.86;transition:.15s ease;white-space:nowrap}
24
+ .nav-links a:hover{opacity:1;background:rgba(255,255,255,.06)}
25
+ .spacer{flex:1}
26
+ .menu-btn{width:40px;height:40px;display:flex;align-items:center;justify-content:center;border:1px solid rgba(255,255,255,.18);border-radius:12px;cursor:pointer;background:rgba(255,255,255,.02)}
27
+ .menu-btn span{display:block;width:18px;height:2px;background:#fff;position:relative}
28
+ .menu-btn span::before,.menu-btn span::after{content:"";position:absolute;left:0;width:18px;height:2px;background:#fff}
29
+ .menu-btn span::before{top:-6px} .menu-btn span::after{top:6px}
30
+ .menu{position:absolute;top:60px;right:24px;min-width:220px;padding:10px;border-radius:14px;background:var(--glass);backdrop-filter:blur(14px);border:1px solid rgba(255,255,255,.10);box-shadow:0 0 30px rgba(0,0,0,.6);display:none}
31
+ .menu.open{display:block}
32
+ .menu a{display:block;padding:10px 10px;border-radius:10px;text-decoration:none;color:var(--fg);opacity:.9}
33
+ .menu a:hover{background:rgba(255,255,255,.06);opacity:1}
34
+ .menu .sep{height:1px;background:rgba(255,255,255,.10);margin:8px 2px}
35
+
36
+ .wrap{max-width:1100px;margin:0 auto;padding:110px 6vw 70px}
37
+ .h{font-size:1.35rem;font-weight:650}
38
+ .sub{color:var(--muted);margin-top:10px;line-height:1.6;max-width:980px}
39
+
40
+ .viewer{margin-top:20px;display:grid;gap:18px;justify-items:center}
41
+
42
+ /* 15% smaller */
43
+ img{
44
+ width:85%;
45
+ max-width:850px;
46
+ max-height:60vh;
47
+ object-fit:contain;
48
+ border-radius:14px;
49
+ background:rgba(255,255,255,.03);
50
+ border:1px solid rgba(255,255,255,.10)
51
+ }
52
+
53
+ /* centered controls */
54
+ .controls{
55
+ display:flex;
56
+ justify-content:center;
57
+ align-items:center;
58
+ gap:18px;
59
+ margin-top:6px;
60
+ }
61
+
62
+ .btn{text-decoration:none;color:var(--fg);padding:10px 14px;border-radius:999px;border:1px solid rgba(255,255,255,.14);background:rgba(255,255,255,.03);opacity:.92;transition:.15s ease}
63
+ .btn:hover{opacity:1;background:rgba(255,255,255,.07)}
64
+
65
+ .kbd{font-family:ui-monospace,Menlo,Consolas,monospace;background:#15151b;border:1px solid #2a2a33;border-radius:6px;padding:2px 6px;font-size:.85em;color:var(--muted)}
66
+
67
+ .cap{color:var(--muted);max-width:980px;line-height:1.55;text-align:center}
68
+ .cap strong{color:rgba(255,255,255,.9)}
69
+ .rule{border:0;border-top:1px solid rgba(255,255,255,.10);margin:22px 0}
70
+ .interp{color:var(--muted);max-width:980px;line-height:1.65}
71
+ </style>
72
+ </head>
73
+
74
+ <body>
75
+ <canvas id="quantumField"></canvas>
76
+
77
+ <nav>
78
+ <div class="nav-inner">
79
+ <div class="brand">TwoQuarks</div>
80
+ <div class="nav-links">
81
+ <a href="../../../index.html#down">DOWN</a>
82
+ <a href="../../../index.html#strange">STRANGE</a>
83
+ <a href="../../../index.html#top">TOP</a>
84
+ <a href="../../../index.html#charm">CHARM</a>
85
+ <a href="../../../index.html#up">UP</a>
86
+ <a href="../../../index.html#bottom">BOTTOM</a>
87
+ </div>
88
+ <div class="spacer"></div>
89
+ <div class="menu-btn" id="menuBtn"><span></span></div>
90
+ <div class="menu" id="siteMenu">
91
+ <a href="../../../index.html#about">ABOUT</a>
92
+ <a href="../../../quarkslab.html">QuarksLab</a>
93
+ <div class="sep"></div>
94
+ <a href="../../../quarks/bottom/resume.pdf">Resume</a>
95
+ <a href="../../../summary.pdf">Summary</a>
96
+ </div>
97
+ </div>
98
+ </nav>
99
+
100
+ <div class="wrap">
101
+ <div class="h">DOWN · Visual Diagnostics</div>
102
+ <div class="sub">
103
+ Use keyboard arrows or the buttons below to navigate.
104
+ </div>
105
+
106
+ <div class="viewer">
107
+ <img id="img" src="graphics/antidown_corrupted_valley_reward.png" alt="figure"/>
108
+ <div class="controls">
109
+ <a class="btn" href="javascript:void(0)" onclick="prev()">← Previous</a>
110
+ <a class="btn" href="javascript:void(0)" onclick="next()">Next →</a>
111
+ </div>
112
+
113
+ <div class="cap" id="cap"><strong>AntiDown</strong> — Reward over Training (Corrupted Valley)</div>
114
+ </div>
115
+
116
+ <hr class="rule"/>
117
+
118
+ <div class="interp" id="interp">Interpretation will appear here.</div>
119
+ </div>
120
+
121
+ <!-- STARFIELD -->
122
+ <script>
123
+ const canvas = document.getElementById('quantumField');
124
+ const ctx = canvas.getContext('2d');
125
+ function resize(){ canvas.width = innerWidth; canvas.height = innerHeight; }
126
+ resize(); addEventListener('resize', resize);
127
+
128
+ const stars = Array.from({length: 650}, () => ({
129
+ x: (Math.random()-0.5) * canvas.width,
130
+ y: (Math.random()-0.5) * canvas.height,
131
+ z: Math.random() * canvas.width
132
+ }));
133
+
134
+ function animate(){
135
+ ctx.clearRect(0,0,canvas.width,canvas.height);
136
+ for(const s of stars){
137
+ s.z -= 2.2;
138
+ if (s.z < 1){
139
+ s.x = (Math.random()-0.7) * canvas.width;
140
+ s.y = (Math.random()-0.7) * canvas.height;
141
+ s.z = canvas.width;
142
+ }
143
+ const k = 128 / s.z;
144
+ const x = s.x * k + canvas.width/2;
145
+ const y = s.y * k + canvas.height/2;
146
+ const r = (1 - s.z/canvas.width) * 1.2;
147
+ ctx.beginPath();
148
+ ctx.fillStyle = "rgba(140,180,255,0.85)";
149
+ ctx.arc(x,y,r,0,Math.PI*2);
150
+ ctx.fill();
151
+ }
152
+ requestAnimationFrame(animate);
153
+ }
154
+ animate();
155
+ </script>
156
+
157
+ <!-- MENU + VIEWER -->
158
+ <script>
159
+ const menuBtn = document.getElementById('menuBtn');
160
+ const siteMenu = document.getElementById('siteMenu');
161
+ if(menuBtn && siteMenu){
162
+ menuBtn.addEventListener('click', (e)=>{ e.stopPropagation(); siteMenu.classList.toggle('open'); });
163
+ document.addEventListener('click', ()=> siteMenu.classList.remove('open'));
164
+ siteMenu.addEventListener('click', (e)=> e.stopPropagation());
165
+ }
166
+
167
+ /*
168
+ Folder layout:
169
+ index.html in model folder; PNGs in ./graphics/
170
+ */
171
+
172
+ const figures = [
173
+ {
174
+ src: "graphics/antidown_corrupted_valley_reward.png",
175
+ title: "AntiDown — Reward over Training (Corrupted Valley)",
176
+ interpretation:
177
+ "Reward as a function of training episode for multiple methods. Early plateaus, sharp drops, and increased variance typically indicate a regime change or reward corruption effects rather than smooth convergence."
178
+ },
179
+ {
180
+ src: "graphics/antidown_corrupted_valley_valley_visits.png",
181
+ title: "AntiDown — Valley Visits over Training",
182
+ interpretation:
183
+ "State visitation (valley visits) across episodes. High visits indicate repeated occupancy of a specific region; abrupt changes suggest shifts in exploration strategy or a change in the learned policy’s preferred states."
184
+ },
185
+ {
186
+ src: "graphics/down_paradox_tabular_reward.png",
187
+ title: "Down — Reward over Training (Tabular Paradox)",
188
+ interpretation:
189
+ "Episode-level reward in a tabular setting. A stable band suggests bounded dynamics; frequent spikes or heavy tails suggest sensitivity to stochasticity, reward noise, or termination conditions."
190
+ },
191
+ {
192
+ src: "graphics/down_paradox_tabular_rho.png",
193
+ title: "Down — ρ over Training (Tabular Paradox)",
194
+ interpretation:
195
+ "ρ plotted across episodes as a consistency/stability proxy. Sustained mid/high values indicate more consistent behavior; large oscillations or abrupt dips indicate instability or switching between behavioral modes."
196
+ },
197
+ {
198
+ src: "graphics/dual_down_antidown_episode_return.png",
199
+ title: "Down vs AntiDown — Tabular Returns (Same Budget)",
200
+ interpretation:
201
+ "Overlay comparison of episode returns under the same training budget. A persistent separation implies asymmetric performance; repeated crossings imply similar behavior under noise or comparable robustness limits."
202
+ },
203
+ {
204
+ src: "graphics/figure_reward.png",
205
+ title: "Summary Table — Reward & Valley Visits (by Phase)",
206
+ interpretation:
207
+ "Text summary of mean and standard deviation for reward and valley visits across phases. Means capture central tendency; standard deviations capture volatility. Phase-wise changes indicate non-stationary regimes or experimental phase transitions."
208
+ },
209
+ {
210
+ src: "graphics/figure_failures.png",
211
+ title: "Failure Modes — Counts by Agent and Phase",
212
+ interpretation:
213
+ "A categorical failure-mode table showing counts per agent and phase. This highlights which behaviors dominate and whether failure types shift across phases, useful for diagnosing where instability concentrates."
214
+ }
215
+ ];
216
+
217
+ let idx = 0;
218
+
219
+ function renderFigure(){
220
+ const f = figures[idx];
221
+ document.getElementById("img").src = f.src;
222
+ document.getElementById("cap").innerHTML = `<strong>${f.title}</strong>`;
223
+ document.getElementById("interp").innerHTML =
224
+ `<strong>Interpretation</strong><br/>${f.interpretation}`;
225
+ }
226
+
227
+ function next(){ idx = (idx + 1) % figures.length; renderFigure(); }
228
+ function prev(){ idx = (idx - 1 + figures.length) % figures.length; renderFigure(); }
229
+
230
+ document.addEventListener("keydown", e => {
231
+ if (e.key === "ArrowRight") next();
232
+ if (e.key === "ArrowLeft") prev();
233
+ });
234
+
235
+ renderFigure();
236
+ </script>
237
+
238
+ </body>
239
+ </html>
240
+
Down/plot_dual_down_antidown.py ADDED
@@ -0,0 +1,131 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ Overlay plot: Down vs AntiDown (tabular experiments).
3
+
4
+ Reads CSVs from TWOQUARKS_RESULTS_DIR (or ./results) and writes PNG into
5
+ TWOQUARKS_GRAPHICS_DIR (or ./graphics).
6
+
7
+ This is intentionally simple and dependency-light (pandas optional).
8
+ """
9
+
10
+ from __future__ import annotations
11
+
12
+ import csv
13
+ import os
14
+ from collections import defaultdict
15
+ from pathlib import Path
16
+ from typing import Dict, List, Tuple
17
+
18
+ import matplotlib.pyplot as plt
19
+
20
+
21
+ def _read_csv(path: Path) -> List[Dict[str, str]]:
22
+ with path.open("r", newline="") as f:
23
+ return list(csv.DictReader(f))
24
+
25
+
26
+ def _mean(xs: List[float]) -> float:
27
+ if not xs:
28
+ return float("nan")
29
+ return sum(xs) / len(xs)
30
+
31
+
32
+ def _down_series(rows: List[Dict[str, str]]) -> Tuple[List[int], List[float]]:
33
+ """
34
+ Down CSV fields (expected):
35
+ phase, episode, agent, episode_reward, [global_episode], ...
36
+ We aggregate by (phase, episode) averaging across agents.
37
+ """
38
+ bucket: Dict[Tuple[int, int], List[float]] = defaultdict(list)
39
+ for r in rows:
40
+ try:
41
+ phase = int(r.get("phase", "0"))
42
+ ep = int(r.get("episode", "0"))
43
+ rew = float(r.get("episode_reward", "nan"))
44
+ except Exception:
45
+ continue
46
+ bucket[(phase, ep)].append(rew)
47
+
48
+ # Sort by phase then episode, make a single x-axis that is "global episode"
49
+ keys = sorted(bucket.keys())
50
+ xs, ys = [], []
51
+ g = 0
52
+ last_phase = None
53
+ for (phase, ep) in keys:
54
+ if last_phase is None:
55
+ last_phase = phase
56
+ if phase != last_phase:
57
+ last_phase = phase
58
+ xs.append(g)
59
+ ys.append(_mean(bucket[(phase, ep)]))
60
+ g += 1
61
+ return xs, ys
62
+
63
+
64
+ def _antidown_series(rows: List[Dict[str, str]]) -> Tuple[List[int], List[float]]:
65
+ """
66
+ AntiDown CSV fields (expected):
67
+ phase, episode, agent, total_reward, ...
68
+ We aggregate by (phase, episode) averaging across agents.
69
+ """
70
+ bucket: Dict[Tuple[int, int], List[float]] = defaultdict(list)
71
+ for r in rows:
72
+ try:
73
+ phase = int(r.get("phase", "0"))
74
+ ep = int(r.get("episode", "0"))
75
+ rew = float(r.get("total_reward", "nan"))
76
+ except Exception:
77
+ continue
78
+ bucket[(phase, ep)].append(rew)
79
+
80
+ keys = sorted(bucket.keys())
81
+ xs, ys = [], []
82
+ g = 0
83
+ last_phase = None
84
+ for (phase, ep) in keys:
85
+ if last_phase is None:
86
+ last_phase = phase
87
+ if phase != last_phase:
88
+ last_phase = phase
89
+ xs.append(g)
90
+ ys.append(_mean(bucket[(phase, ep)]))
91
+ g += 1
92
+ return xs, ys
93
+
94
+
95
+ def main() -> None:
96
+ root = Path(__file__).resolve().parent
97
+ results_dir = Path(os.environ.get("TWOQUARKS_RESULTS_DIR", (root / "results").as_posix()))
98
+ graphics_dir = Path(os.environ.get("TWOQUARKS_GRAPHICS_DIR", (root / "graphics").as_posix()))
99
+ graphics_dir.mkdir(parents=True, exist_ok=True)
100
+
101
+ down_csv = results_dir / "down_paradox_tabular_results.csv"
102
+ anti_csv = results_dir / "antidown_corrupted_valley_tabular.csv"
103
+
104
+ if not down_csv.exists() or not anti_csv.exists():
105
+ print(f"[dual] missing CSVs. down={down_csv.exists()} anti={anti_csv.exists()}. Skipping.")
106
+ return
107
+
108
+ down_rows = _read_csv(down_csv)
109
+ anti_rows = _read_csv(anti_csv)
110
+ if not down_rows or not anti_rows:
111
+ print("[dual] one CSV is empty. Skipping.")
112
+ return
113
+
114
+ x1, y1 = _down_series(down_rows)
115
+ x2, y2 = _antidown_series(anti_rows)
116
+
117
+ plt.figure(figsize=(10, 5))
118
+ plt.plot(x1, y1, label="Down (mean across agents)")
119
+ plt.plot(x2, y2, label="AntiDown (mean across agents)")
120
+ plt.xlabel("Global episode (phase-concatenated)")
121
+ plt.ylabel("Episode return")
122
+ plt.title("Down vs AntiDown — Tabular returns (mean across agents)")
123
+ plt.legend()
124
+ out = graphics_dir / "dual_down_antidown_episode_return.png"
125
+ plt.tight_layout()
126
+ plt.savefig(out, dpi=160)
127
+ print(f"[dual] saved {out}")
128
+
129
+
130
+ if __name__ == "__main__":
131
+ main()
Down/results/antidown_corrupted_valley_tabular.csv ADDED
The diff for this file is too large to render. See raw diff
 
Down/results/down_paradox_tabular_results.csv ADDED
The diff for this file is too large to render. See raw diff
 
Down/run_all.bat ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ @echo off
2
+ REM Run both DOWN and AntiDown experiments using current Python (Anaconda).
3
+ python run_all.py
Down/run_all.py ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Run both DOWN and AntiDown tabular experiments.
2
+
3
+ Usage:
4
+ python run_all.py --episodes 400
5
+
6
+ This will:
7
+ - run down tabular paradox experiment
8
+ - run AntiDown corrupted valley tabular experiment
9
+ - generate plots for each into their graphics/ folders
10
+ """
11
+
12
+ from __future__ import annotations
13
+
14
+ import argparse
15
+ import os
16
+ import subprocess
17
+ from pathlib import Path
18
+ import sys
19
+
20
+
21
+ def _run(cmd: list[str], cwd: Path, env: dict[str, str] | None = None) -> None:
22
+ print(f"[run] ({cwd}) $ {' '.join(cmd)}")
23
+ merged = os.environ.copy()
24
+ if env:
25
+ merged.update(env)
26
+ subprocess.run(cmd, cwd=str(cwd), check=True, env=merged)
27
+
28
+
29
+ def main() -> None:
30
+ ap = argparse.ArgumentParser()
31
+ ap.add_argument("--episodes", type=int, default=400, help="Episodes per phase (or main loop) where applicable")
32
+ args = ap.parse_args()
33
+
34
+ root = Path(__file__).resolve().parent
35
+ results_dir = root / "results"
36
+ graphics_dir = root / "graphics"
37
+ results_dir.mkdir(parents=True, exist_ok=True)
38
+ graphics_dir.mkdir(parents=True, exist_ok=True)
39
+ common_env = {
40
+ "TWOQUARKS_RESULTS_DIR": results_dir.as_posix(),
41
+ "TWOQUARKS_GRAPHICS_DIR": graphics_dir.as_posix(),
42
+ }
43
+ down_dir = root / "down"
44
+ AntiDown_dir = root / "AntiDown"
45
+
46
+ # DOWN
47
+ down_script = down_dir / "exp" / "run_paradox_tabular.py"
48
+ _run([sys.executable, str(down_script)], cwd=down_dir, env=common_env)
49
+ plot_script = down_dir / "exp" / "plot_paradox_results.py"
50
+ _run([sys.executable, str(plot_script)], cwd=down_dir, env=common_env)
51
+ # AntiDown
52
+ AntiDown_script = AntiDown_dir / "exp" / "run_corrupted_valley_tabular.py"
53
+ _run([sys.executable, str(AntiDown_script)], cwd=AntiDown_dir, env=common_env)
54
+ AntiDown_plot = AntiDown_dir / "exp" / "plot_corrupted_valley_results.py"
55
+ _run([sys.executable, str(AntiDown_plot)], cwd=AntiDown_dir, env=common_env)
56
+
57
+
58
+ # Dual overlay plot (Down vs AntiDown)
59
+ dual_plot = root / "plot_dual_down_antidown.py"
60
+ if dual_plot.exists():
61
+ _run([sys.executable, str(dual_plot)], cwd=root, env=common_env)
62
+
63
+ print("\nDone. Results and plots saved into root/results and root/graphics.")
64
+
65
+
66
+ if __name__ == "__main__":
67
+ main()
Down/run_all.sh ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ python3 run_all.py
README.md CHANGED
@@ -1,22 +1,19 @@
1
- ---
2
- title: QuarksLab
3
- emoji: 🧪
4
- colorFrom: indigo
5
- colorTo: blue
6
- sdk: gradio
7
- sdk_version: 6.3.0
8
- python_version: 3.1
9
- app_file: app.py
10
- pinned: false
11
- license: mit
12
- short_description: Lab
13
- ---
14
 
15
- # QuarksLab TwoQuarks Interactive Lab
16
 
17
- Real, interactive experiments. Modify seed/episodes/params and run.
 
 
18
 
 
19
 
20
- ---
 
 
 
 
 
 
 
21
 
22
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
+ # TwoQuarks — QuarksLab (Interactive)
 
 
 
 
 
 
 
 
 
 
 
 
2
 
3
+ This is a Hugging Face Space intended to **run real, bounded experiments** from Three Quarks:
4
 
5
+ - **DOWN / AntiDown** (tabular experiments)
6
+ - **STRANGE / AntiStrange** (HypothesisLab swarm)
7
+ - **CHARM** (Enchanted Valley + CharmField)
8
 
9
+ ## Run locally
10
 
11
+ ```bash
12
+ pip install -r requirements.txt
13
+ python app.py
14
+ ```
15
+
16
+ ## Deploy to Hugging Face Spaces
17
+
18
+ Create a new Space (Gradio) and push this repository.
19
 
 
Strange/AntiStrange/envs/__init__.py ADDED
@@ -0,0 +1 @@
 
 
1
+ # Package init
Strange/AntiStrange/envs/antihypothesis_lab_env.py ADDED
@@ -0,0 +1,150 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # ======================================================================
2
+ # ANTI-HYPOTHESIS LAB ENV
3
+ # Entorno diseñado para forzar exploración disruptiva (ANTI-STRANGE)
4
+ # ======================================================================
5
+
6
+ from dataclasses import dataclass
7
+ import numpy as np
8
+
9
+ @dataclass
10
+ class AntiHypothesisState:
11
+ phase: int
12
+ progress: float
13
+ stability: float
14
+ latent_potential: float
15
+ last_action: int
16
+
17
+
18
+ class AntiHypothesisLabEnv:
19
+ """
20
+ Variante del laboratorio diseñada para exponer el comportamiento del
21
+ agente ANTI-STRANGE: romper attractores y desbloquear recompensas
22
+ profundas mediante exploración insistente.
23
+ """
24
+
25
+ def __init__(
26
+ self,
27
+ max_steps: int = 50,
28
+ phase_drift_prob: float = 0.03,
29
+ seed: int = 0,
30
+ potential_threshold: float = 0.6,
31
+ ):
32
+ self.max_steps = max_steps
33
+ self.rng = np.random.default_rng(seed)
34
+ self.phase_drift_prob = phase_drift_prob
35
+ self.potential_threshold = potential_threshold
36
+ self.step_count = 0
37
+ self.state = None
38
+
39
+ @property
40
+ def n_actions(self):
41
+ return 4 # respeta el mismo espacio de acción
42
+
43
+ def reset(self):
44
+ self.step_count = 0
45
+ self.state = AntiHypothesisState(
46
+ phase=1,
47
+ progress=0.1,
48
+ stability=0.2,
49
+ latent_potential=0.0,
50
+ last_action=-1,
51
+ )
52
+ return self._encode_state(self.state)
53
+
54
+ def _encode_state(self, s):
55
+ p_bin = int(np.clip(s.progress * 5, 0, 4))
56
+ s_bin = int(np.clip(s.stability * 5, 0, 4))
57
+ pot_bin = int(np.clip(s.latent_potential * 3, 0, 2))
58
+ return s.phase * 75 + p_bin * 15 + s_bin * 3 + pot_bin
59
+
60
+ def _sample_next_phase(self, phase, potential):
61
+ if potential >= self.potential_threshold and phase < 2:
62
+ return 2
63
+ if self.rng.random() > self.phase_drift_prob:
64
+ return phase
65
+ delta = self.rng.integers(-1, 2)
66
+ return int(np.clip(phase + delta, 0, 2))
67
+
68
+ def step(self, action: int):
69
+ self.step_count += 1
70
+ s = self.state
71
+
72
+ phase = s.phase
73
+
74
+ dP = dS = dPot = 0.0
75
+
76
+ if phase == 0:
77
+ if action == 0:
78
+ dP, dS, r = 0.10, -0.03, 0.02
79
+ dPot = 0.08
80
+ elif action == 1:
81
+ dP, dS, r = 0.03, 0.02, 0.03
82
+ dPot = 0.01
83
+ elif action == 2:
84
+ dP, dS, r = 0.08, 0.00, 0.03
85
+ dPot = 0.06
86
+ else:
87
+ dP, dS, r = 0.02, 0.02, 0.02
88
+
89
+ elif phase == 1:
90
+ if action == 0:
91
+ dP, dS, r = 0.03, -0.04, 0.00
92
+ dPot = 0.06
93
+ elif action == 1:
94
+ dP, dS, r = 0.05, 0.06, 0.06
95
+ dPot = 0.01
96
+ elif action == 2:
97
+ dP, dS, r = 0.04, 0.03, 0.05
98
+ dPot = 0.05
99
+ else:
100
+ dP, dS, r = 0.06, 0.06, 0.08
101
+
102
+ else:
103
+ if action == 0:
104
+ dP, dS, r = 0.02, -0.05, 0.0
105
+ dPot = -0.02
106
+ elif action == 1:
107
+ dP, dS, r = 0.05, 0.05, 0.07
108
+ dPot = -0.01
109
+ elif action == 2:
110
+ dP, dS, r = 0.05, 0.03, 0.06
111
+ dPot = -0.005
112
+ else:
113
+ dP, dS, r = 0.08, 0.05, 0.12
114
+ dPot = -0.03
115
+
116
+ dP += self.rng.normal(0, 0.01)
117
+ dS += self.rng.normal(0, 0.01)
118
+
119
+ new_p = np.clip(s.progress + dP, 0, 1)
120
+ new_s = np.clip(s.stability + dS, 0, 1)
121
+ new_pot = np.clip(s.latent_potential + dPot, 0, 1)
122
+
123
+ reward = r + 0.35 * new_p + 0.30 * new_s
124
+
125
+ if action == s.last_action:
126
+ reward -= 0.02
127
+
128
+ if new_p < 0.15 and new_s < 0.15:
129
+ reward -= 0.08
130
+
131
+ next_phase = self._sample_next_phase(phase, new_pot)
132
+
133
+ self.state = AntiHypothesisState(
134
+ phase=next_phase,
135
+ progress=new_p,
136
+ stability=new_s,
137
+ latent_potential=new_pot,
138
+ last_action=action,
139
+ )
140
+
141
+ done = self.step_count >= self.max_steps
142
+
143
+ info = {
144
+ "phase": next_phase,
145
+ "progress": float(new_p),
146
+ "stability": float(new_s),
147
+ "latent_potential": float(new_pot),
148
+ }
149
+
150
+ return self._encode_state(self.state), float(reward), bool(done), info
Strange/AntiStrange/exp/__init__.py ADDED
@@ -0,0 +1 @@
 
 
1
+ # Package init
Strange/AntiStrange/exp/plot_results.py ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ import os
3
+ import sys
4
+ from pathlib import Path
5
+
6
+ THIS_DIR = Path(__file__).resolve().parent
7
+ PROJECT_ROOT = THIS_DIR.parent
8
+ sys.path.append(str(PROJECT_ROOT))
9
+
10
+ import pandas as pd
11
+ import matplotlib.pyplot as plt
12
+
13
+ def plot_from_csv(csv_path: Path, out_dir: Path, prefix: str) -> None:
14
+ df = pd.read_csv(csv_path)
15
+ out_dir.mkdir(parents=True, exist_ok=True)
16
+
17
+ # Episode return
18
+ if {"episode","reward"}.issubset(df.columns):
19
+ ep_ret = df.groupby("episode")["reward"].sum().reset_index()
20
+ plt.figure()
21
+ plt.plot(ep_ret["episode"], ep_ret["reward"])
22
+ plt.xlabel("episode")
23
+ plt.ylabel("episode_return")
24
+ plt.title(f"{prefix} episode return")
25
+ plt.tight_layout()
26
+ plt.savefig(out_dir / f"{prefix.lower()}_episode_return.png", dpi=160)
27
+ plt.close()
28
+
29
+ # Stability / diversity if present
30
+ for col in ["stability","diversity","phase","progress","w_t","H_swarm","S_t","T"]:
31
+ if col in df.columns:
32
+ series = df.groupby("episode")[col].mean().reset_index()
33
+ plt.figure()
34
+ plt.plot(series["episode"], series[col])
35
+ plt.xlabel("episode")
36
+ plt.ylabel(col)
37
+ plt.title(f"{prefix} mean {col}")
38
+ plt.tight_layout()
39
+ plt.savefig(out_dir / f"{prefix.lower()}_{col}.png", dpi=160)
40
+ plt.close()
41
+
42
+ def main():
43
+ import argparse
44
+ ap = argparse.ArgumentParser()
45
+ ap.add_argument("--csv", required=True, help="Path to results CSV (relative to project root is ok).")
46
+ ap.add_argument("--out", default="graphics", help="Output directory for plots (relative ok).")
47
+ ap.add_argument("--prefix", default="Strange", help="Plot filename prefix.")
48
+ args = ap.parse_args()
49
+
50
+ csv_path = Path(args.csv)
51
+ if not csv_path.is_absolute():
52
+ csv_path = (PROJECT_ROOT / csv_path).resolve()
53
+ out_dir = Path(args.out)
54
+ if not out_dir.is_absolute():
55
+ out_dir = (PROJECT_ROOT / out_dir).resolve()
56
+
57
+ if not csv_path.exists():
58
+ raise FileNotFoundError(f"CSV not found: {csv_path}")
59
+
60
+ plot_from_csv(csv_path, out_dir, args.prefix)
61
+ print(f"[ok] plots saved to: {out_dir}")
62
+
63
+ if __name__ == "__main__":
64
+ main()
Strange/AntiStrange/exp/run_antistrange_hypothesis_lab.py ADDED
@@ -0,0 +1,79 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import sys
3
+ import csv
4
+ import numpy as np
5
+
6
+ THIS_DIR = os.path.dirname(os.path.abspath(__file__))
7
+ PROJECT_ROOT = os.path.abspath(os.path.join(THIS_DIR, ".."))
8
+ sys.path.append(PROJECT_ROOT)
9
+
10
+ def _resolve_path(p: str) -> str:
11
+ """Resolve relative paths against PROJECT_ROOT for reproducible runs."""
12
+ if os.path.isabs(p):
13
+ return p
14
+ return os.path.abspath(os.path.join(PROJECT_ROOT, p))
15
+
16
+
17
+ from envs.antihypothesis_lab_env import AntiHypothesisLabEnv
18
+ from levo.antistrange_swarm import AntiStrangeConfig, AntiStrangeSwarm
19
+
20
+
21
+ def run_antistrange(
22
+ n_episodes: int = 200,
23
+ max_steps: int = 50,
24
+ seed: int = 0,
25
+ out_path: str = "results/antistrange_hypothesis_lab.csv",
26
+ ):
27
+ # Entorno "territorio anti" 🤘
28
+ env = AntiHypothesisLabEnv(max_steps=max_steps, seed=seed)
29
+ out_path = _resolve_path(out_path)
30
+ os.makedirs(os.path.dirname(out_path), exist_ok=True)
31
+
32
+ cfg = AntiStrangeConfig(n_actions=env.n_actions, seed=seed)
33
+ agent = AntiStrangeSwarm(cfg)
34
+
35
+ os.makedirs(os.path.dirname(out_path), exist_ok=True)
36
+
37
+ fieldnames = [
38
+ "episode", "step", "reward",
39
+ "T", "H_swarm", "S_t", "diversity", "w_t",
40
+ "phase", "progress", "stability",
41
+ "latent_potential", # NUEVO: clave para ver cuándo despierta el anti
42
+ ]
43
+
44
+ with open(out_path, "w", newline="", encoding="utf-8") as f:
45
+ writer = csv.DictWriter(f, fieldnames=fieldnames)
46
+ writer.writeheader()
47
+
48
+ for ep in range(n_episodes):
49
+ s = env.reset()
50
+ done = False
51
+ step = 0
52
+
53
+ while not done:
54
+ a, info = agent.act(s, step)
55
+ s_next, r, done, env_info = env.step(a)
56
+ agent.update(s, a, r, s_next, done)
57
+
58
+ row = {
59
+ "episode": ep,
60
+ "step": step,
61
+ "reward": r,
62
+ "T": info["T"],
63
+ "H_swarm": info["H_swarm"],
64
+ "S_t": info["S_t"],
65
+ "diversity": info["diversity"],
66
+ "w_t": info["w_t"],
67
+ "phase": env_info["phase"],
68
+ "progress": env_info["progress"],
69
+ "stability": env_info["stability"],
70
+ "latent_potential": env_info.get("latent_potential", 0.0),
71
+ }
72
+ writer.writerow(row)
73
+
74
+ s = s_next
75
+ step += 1
76
+
77
+
78
+ if __name__ == "__main__":
79
+ run_antistrange()
Strange/AntiStrange/graphics/antistrange_H_swarm.png ADDED
Strange/AntiStrange/graphics/antistrange_S_t.png ADDED
Strange/AntiStrange/graphics/antistrange_T.png ADDED
Strange/AntiStrange/graphics/antistrange_diversity.png ADDED

Git LFS Details

  • SHA256: 8f12265dbea48068fe1ff60bfaeb03d565685e1524ae1b5afc1149bd193cdeee
  • Pointer size: 131 Bytes
  • Size of remote file: 100 kB
Strange/AntiStrange/graphics/antistrange_episode_return.png ADDED

Git LFS Details

  • SHA256: 098227673e7d689a788a6980579e4fc6b125a2b9f09d1e4b9fe4a0e08037fe86
  • Pointer size: 131 Bytes
  • Size of remote file: 118 kB
Strange/AntiStrange/graphics/antistrange_phase.png ADDED

Git LFS Details

  • SHA256: 328d1f699b1192a127d92276c387c43428727240faee4eec2e254ae66c32ff8b
  • Pointer size: 131 Bytes
  • Size of remote file: 108 kB
Strange/AntiStrange/graphics/antistrange_progress.png ADDED

Git LFS Details

  • SHA256: fc71180e0ebb0bb68a6d20b70f20554cbba7bc050e2775abcbfab22f9d8f0502
  • Pointer size: 131 Bytes
  • Size of remote file: 134 kB
Strange/AntiStrange/graphics/antistrange_stability.png ADDED

Git LFS Details

  • SHA256: 358f21748c0658311c470fd86e646db45578f1d0a2bcb9a65500aeb3ce1c9522
  • Pointer size: 131 Bytes
  • Size of remote file: 122 kB
Strange/AntiStrange/graphics/antistrange_w_t.png ADDED
Strange/AntiStrange/graphics/index.html ADDED
@@ -0,0 +1,147 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ <!DOCTYPE html>
3
+ <html lang="en">
4
+ <head>
5
+ <meta charset="UTF-8"/>
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
7
+ <title>CHARM • Graphics</title>
8
+ <link rel="icon" href="/favicon.svg" type="image/svg+xml"/>
9
+ <style>
10
+ *{margin:0;padding:0;box-sizing:border-box}
11
+ :root{
12
+ --bg:#000; --fg:#fff; --muted:rgba(255,255,255,.62);
13
+ --card:rgba(255,255,255,.04); --stroke:rgba(255,255,255,.10); --glass:rgba(0,0,0,.38);
14
+ }
15
+ body{font-family:Inter,system-ui,Segoe UI,Roboto,Arial;background:var(--bg);color:var(--fg);overflow-x:hidden}
16
+ #quantumField{position:fixed;inset:0;width:100vw;height:100vh;z-index:-10;background:#000}
17
+ nav{position:fixed;top:0;left:0;right:0;z-index:1000;padding:14px 24px;background:var(--glass);backdrop-filter:blur(12px);border-bottom:1px solid rgba(255,255,255,.06)}
18
+ .nav-inner{max-width:1200px;margin:0 auto;display:flex;align-items:center;gap:16px}
19
+ .brand{font-weight:700;font-size:1.1rem}
20
+ .nav-links{display:flex;gap:10px;margin-left:18px}
21
+ .nav-links a{text-decoration:none;color:var(--fg);padding:8px 12px;border:1px solid rgba(255,255,255,.12);border-radius:999px;font-size:.9rem;opacity:.86;transition:.15s ease;white-space:nowrap}
22
+ .nav-links a:hover{opacity:1;background:rgba(255,255,255,.06)}
23
+ .spacer{flex:1}
24
+ .menu-btn{width:40px;height:40px;display:flex;align-items:center;justify-content:center;border:1px solid rgba(255,255,255,.18);border-radius:12px;cursor:pointer;background:rgba(255,255,255,.02)}
25
+ .menu-btn span{display:block;width:18px;height:2px;background:#fff;position:relative}
26
+ .menu-btn span::before,.menu-btn span::after{content:"";position:absolute;left:0;width:18px;height:2px;background:#fff}
27
+ .menu-btn span::before{top:-6px} .menu-btn span::after{top:6px}
28
+ .menu{position:absolute;top:60px;right:24px;min-width:220px;padding:10px;border-radius:14px;background:var(--glass);backdrop-filter:blur(14px);border:1px solid rgba(255,255,255,.10);box-shadow:0 0 30px rgba(0,0,0,.6);display:none}
29
+ .menu.open{display:block}
30
+ .menu a{display:block;padding:10px 10px;border-radius:10px;text-decoration:none;color:var(--fg);opacity:.9}
31
+ .menu a:hover{background:rgba(255,255,255,.06);opacity:1}
32
+ .menu .sep{height:1px;background:rgba(255,255,255,.10);margin:8px 2px}
33
+ .wrap{max-width:1100px;margin:0 auto;padding:110px 6vw 70px}
34
+ .h{font-size:1.35rem;font-weight:650}
35
+ .sub{color:var(--muted);margin-top:10px;line-height:1.6;max-width:980px}
36
+ .viewer{margin-top:20px;display:grid;gap:14px;justify-items:center}
37
+ img{width:100%;max-width:1000px;max-height:70vh;object-fit:contain;border-radius:14px;background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.10)}
38
+ .controls{display:flex;gap:10px;flex-wrap:wrap;justify-content:center}
39
+ .btn{text-decoration:none;color:var(--fg);padding:10px 14px;border-radius:999px;border:1px solid rgba(255,255,255,.14);background:rgba(255,255,255,.03);opacity:.92;transition:.15s ease}
40
+ .btn:hover{opacity:1;background:rgba(255,255,255,.07)}
41
+ .kbd{font-family:ui-monospace,Menlo,Consolas,monospace;background:#15151b;border:1px solid #2a2a33;border-radius:6px;padding:2px 6px;font-size:.85em;color:var(--muted)}
42
+ .cap{color:var(--muted);max-width:980px;line-height:1.6;text-align:center}
43
+ .rule{border:0;border-top:1px solid rgba(255,255,255,.10);margin:22px 0}
44
+ </style>
45
+ </head>
46
+ <body>
47
+ <canvas id="quantumField"></canvas>
48
+
49
+ <nav>
50
+ <div class="nav-inner">
51
+ <div class="brand">TwoQuarks</div>
52
+ <div class="nav-links">
53
+ <a href="../../../index.html#down">DOWN</a>
54
+ <a href="../../../index.html#strange">STRANGE</a>
55
+ <a href="../../../index.html#top">TOP</a>
56
+ <a href="../../../index.html#charm">CHARM</a>
57
+ <a href="../../../index.html#up">UP</a>
58
+ <a href="../../../index.html#bottom">BOTTOM</a>
59
+ </div>
60
+ <div class="spacer"></div>
61
+ <div class="menu-btn" id="menuBtn"><span></span></div>
62
+ <div class="menu" id="siteMenu">
63
+ <a href="../../../index.html#about">ABOUT</a>
64
+ <a href="../../../quarkslab.html">QuarksLab</a>
65
+ <div class="sep"></div>
66
+ <a href="../../../quarks/bottom/resume.pdf">Resume</a>
67
+ <a href="../../../summary.pdf">Summary</a>
68
+ </div>
69
+ </div>
70
+ </nav>
71
+
72
+ <div class="wrap">
73
+ <div class="h">CHARM · Visual Diagnostics</div>
74
+ <div class="sub">These figures show robustness to heavy noise, keeping exploration controlled and policies coherent.</div>
75
+
76
+ <div class="viewer">
77
+ <img id="img" src="../anticharm/graphics/figure_01.png" alt="figure"/>
78
+ <div class="controls">
79
+ <a class="btn" href="javascript:void(0)" onclick="prev()">← Previous</a>
80
+ <a class="btn" href="javascript:void(0)" onclick="next()">Next →</a>
81
+ <span class="kbd">←</span><span class="kbd">→</span>
82
+ </div>
83
+ <div class="cap" id="cap">Figure 01</div>
84
+ </div>
85
+
86
+ <hr class="rule"/>
87
+ <div class="sub"><strong>Interpretation</strong><br/>These figures show robustness to heavy noise, keeping exploration controlled and policies coherent.</div>
88
+ </div>
89
+
90
+ <script>
91
+
92
+ const canvas = document.getElementById('quantumField');
93
+ const ctx = canvas.getContext('2d');
94
+ function resize(){
95
+ canvas.width = innerWidth;
96
+ canvas.height = innerHeight;
97
+ }
98
+ resize();
99
+ addEventListener('resize', resize);
100
+
101
+ const stars = Array.from({length: 650}, () => ({
102
+ x: (Math.random()-0.5) * canvas.width,
103
+ y: (Math.random()-0.5) * canvas.height,
104
+ z: Math.random() * canvas.width
105
+ }));
106
+
107
+ function animate(){
108
+ ctx.clearRect(0,0,canvas.width,canvas.height);
109
+ for(const s of stars){
110
+ s.z -= 2.2;
111
+ if (s.z < 1){
112
+ s.x = (Math.random()-0.7) * canvas.width;
113
+ s.y = (Math.random()-0.7) * canvas.height;
114
+ s.z = canvas.width;
115
+ }
116
+ const k = 128 / s.z;
117
+ const x = s.x * k + canvas.width/2;
118
+ const y = s.y * k + canvas.height/2;
119
+ const r = (1 - s.z/canvas.width) * 1.2;
120
+ ctx.beginPath();
121
+ ctx.fillStyle = "rgba(140,180,255,0.85)";
122
+ ctx.arc(x,y,r,0,Math.PI*2);
123
+ ctx.fill();
124
+ }
125
+ requestAnimationFrame(animate);
126
+ }
127
+ animate();
128
+
129
+ </script>
130
+ <script>
131
+ const menuBtn = document.getElementById('menuBtn');
132
+ const siteMenu = document.getElementById('siteMenu');
133
+ menuBtn.addEventListener('click', (e)=>{
134
+ e.stopPropagation(); siteMenu.classList.toggle('open');
135
+ });
136
+ document.addEventListener('click', ()=> siteMenu.classList.remove('open'));
137
+ siteMenu.addEventListener('click', (e)=> e.stopPropagation());
138
+
139
+ const images = [{"src": "anticharm/graphics/figure_01.png", "text": "Figure 01"}, {"src": "anticharm/graphics/figure_02.png", "text": "Figure 02"}, {"src": "anticharm/graphics/figure_03.png", "text": "Figure 03"}, {"src": "charm/graphics/figure_01.png", "text": "Figure 04"}, {"src": "charm/graphics/figure_02.png", "text": "Figure 05"}, {"src": "charm/graphics/figure_03.png", "text": "Figure 06"}, {"src": "freq_policies/graphics/figure_01.png", "text": "Figure 07"}, {"src": "freq_policies/graphics/figure_02.png", "text": "Figure 08"}, {"src": "freq_policies/graphics/figure_03.png", "text": "Figure 09"}, {"src": "z_olo/graphics/figure_01.png", "text": "Figure 10"}, {"src": "z_olo/graphics/figure_02.png", "text": "Figure 11"}, {"src": "z_olo/graphics/figure_03.png", "text": "Figure 12"}];
140
+ let i = 0;
141
+ function show(){ document.getElementById("img").src = images[i].src; document.getElementById("cap").textContent = images[i].text; }
142
+ function next(){ i=(i+1)%images.length; show(); }
143
+ function prev(){ i=(i-1+images.length)%images.length; show(); }
144
+ document.addEventListener("keydown",(e)=>{ if(e.key==="ArrowRight") next(); if(e.key==="ArrowLeft") prev(); });
145
+ </script>
146
+ </body>
147
+ </html>
Strange/AntiStrange/levo/__init__.py ADDED
@@ -0,0 +1 @@
 
 
1
+ # Package init
Strange/AntiStrange/levo/antistrange_swarm.py ADDED
@@ -0,0 +1,359 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ ANTI-STRANGE Swarm
3
+ ------------------
4
+ Contraparte "antiquark" del hadrón STRANGE.
5
+
6
+ Diferencias conceptuales con StrangeSwarm:
7
+
8
+ - Misma base HF-Levo tabular, pero:
9
+ * Termodinámica responde distinto a ΔR (premia mejoras fuertes).
10
+ * Gate w_t se activa cuando el sistema está demasiado ordenado.
11
+ * Usa una memoria *repulsora*: anti-proto, que empuja a acciones
12
+ históricamente poco visitadas (huecos del mapa de políticas).
13
+
14
+ - Interfaz compatible con StrangeSwarm:
15
+ AntiStrangeConfig, AntiStrangeSwarm.act(), AntiStrangeSwarm.update().
16
+ """
17
+
18
+ from dataclasses import dataclass
19
+ from typing import Dict, List, Hashable
20
+ import numpy as np
21
+ import math
22
+
23
+
24
+ # ===================== HF-Levo agent (copiado para independencia) =====================
25
+
26
+ @dataclass
27
+ class HFLevoAgent:
28
+ n_actions: int
29
+ alpha: float = 0.1
30
+ gamma: float = 0.99
31
+ tau_base: float = 1.0
32
+
33
+ def __post_init__(self):
34
+ # Q: dict[state][action] -> value
35
+ self.Q: Dict[Hashable, np.ndarray] = {}
36
+ # Fase fija por acción para inducir diversidad real entre acciones
37
+ self.action_phases = np.linspace(
38
+ 0.0, 2 * math.pi, self.n_actions, endpoint=False
39
+ )
40
+
41
+ def _ensure_state(self, s: Hashable):
42
+ if s not in self.Q:
43
+ self.Q[s] = np.zeros(self.n_actions, dtype=float)
44
+
45
+ def policy(
46
+ self,
47
+ s: Hashable,
48
+ t: int,
49
+ T: float,
50
+ hf_amp: float,
51
+ hf_omega: float,
52
+ phase_offset: float,
53
+ rng: np.random.Generator,
54
+ ) -> np.ndarray:
55
+ """
56
+ HF-Levo:
57
+ scores = Q + A(T) * cos(w(T)*t + phi_h,a)
58
+ p ~ softmax(scores / tau(T))
59
+ """
60
+ self._ensure_state(s)
61
+ q = self.Q[s]
62
+
63
+ # temperatura de softmax: tau sube con T (más exploración)
64
+ tau = self.tau_base * (1.0 + 0.5 * T)
65
+
66
+ # oscilación por acción: desfase del agente + desfase propio por acción
67
+ osc_vec = hf_amp * np.cos(
68
+ hf_omega * t + phase_offset + self.action_phases
69
+ )
70
+ scores = q + osc_vec
71
+
72
+ # softmax numéricamente estable
73
+ z = scores - scores.max()
74
+ exp_z = np.exp(z / max(1e-8, tau))
75
+ p = exp_z / exp_z.sum()
76
+ return p
77
+
78
+ def update(
79
+ self,
80
+ s: Hashable,
81
+ a: int,
82
+ r: float,
83
+ s_next: Hashable,
84
+ done: bool,
85
+ ):
86
+ self._ensure_state(s)
87
+ self._ensure_state(s_next)
88
+ q = self.Q[s]
89
+ q_next = self.Q[s_next]
90
+ target = r if done else (r + self.gamma * float(q_next.max()))
91
+ td = target - q[a]
92
+ q[a] += self.alpha * td
93
+
94
+
95
+ # ===================== Config ANTI-STRANGE =====================
96
+
97
+ @dataclass
98
+ class AntiStrangeConfig:
99
+ n_agents: int = 5
100
+ n_actions: int = 4
101
+ hf_amp_base: float = 0.15
102
+ hf_omega_base: float = 0.35
103
+
104
+ T_init: float = 0.7
105
+ T_min: float = 0.0
106
+ T_max: float = 2.0
107
+ eta_T: float = 0.05 # pasos de T
108
+
109
+ # --- Excitación (sube T) ---
110
+ # Queremos subir T cuando:
111
+ # - Hay mejoras fuertes (|ΔR| grande positiva).
112
+ # - El sistema está demasiado ordenado (baja entropía y baja diversidad).
113
+ eps_R_pos: float = 0.03 # mejora significativa de recompensa
114
+ H_low: float = 0.7 # entropía baja
115
+ D_low: float = 0.08 # diversidad baja
116
+
117
+ # --- Regulación (baja T) ---
118
+ # Queremos bajar T cuando:
119
+ # - El sistema se vuelve caótico (H o diversidad altas).
120
+ # - Hay caídas fuertes de recompensa.
121
+ H_high: float = 1.25 # entropía muy alta (~max)
122
+ D_high: float = 0.20 # diversidad muy alta
123
+ eps_crash: float = 0.03 # caída fuerte de reward
124
+
125
+ # --- Gate memoria repulsora ---
126
+ # Gate alto cuando el sistema está demasiado "congelado":
127
+ # T baja, S_t baja, H_swarm baja.
128
+ T_mid: float = 0.9
129
+ S_mid: float = 0.06
130
+ H_mid: float = 0.8
131
+
132
+ kT: float = 1.5
133
+ kS: float = 2.0
134
+ kH: float = 1.0
135
+
136
+ proto_alpha: float = 0.1
137
+
138
+ seed: int = 1 # distinto de Strange por defecto
139
+
140
+
141
+ # ===================== ANTI-STRANGE Swarm =====================
142
+
143
+ class AntiStrangeSwarm:
144
+ """
145
+ Hadron ANTI-STRANGE.
146
+
147
+ Diferencias clave vs StrangeSwarm:
148
+ - T sube cuando hay mejoras fuertes y orden excesivo.
149
+ - Gate w_t empuja a memoria REPULSORA (anti-proto).
150
+ - Diseñado para explorar huecos de la política del enjambre.
151
+
152
+ Interfaz:
153
+ anti = AntiStrangeSwarm(cfg)
154
+ s = env.reset()
155
+ for t in ...:
156
+ a, info = anti.act(s, t)
157
+ s_next, r, done, env_info = env.step(a)
158
+ anti.update(s, a, r, s_next, done)
159
+ """
160
+
161
+ def __init__(self, config: AntiStrangeConfig):
162
+ self.cfg = config
163
+ self.n_actions = config.n_actions
164
+ self.agents: List[HFLevoAgent] = [
165
+ HFLevoAgent(n_actions=config.n_actions)
166
+ for _ in range(config.n_agents)
167
+ ]
168
+ self.rng = np.random.default_rng(config.seed)
169
+
170
+ # estado interno
171
+ self.T = config.T_init
172
+ self.proto: Dict[Hashable, np.ndarray] = {}
173
+
174
+ self.last_reward = 0.0
175
+ self.last_delta_R = 0.0
176
+
177
+ # fases diferentes para cada agente
178
+ self.agent_phases = np.linspace(
179
+ 0.0, 2 * math.pi, config.n_agents, endpoint=False
180
+ )
181
+
182
+ # --------- Métricas internas ---------
183
+ @staticmethod
184
+ def _entropy(p: np.ndarray) -> float:
185
+ p_safe = np.clip(p, 1e-8, 1.0)
186
+ return float(-(p_safe * np.log(p_safe)).sum())
187
+
188
+ @staticmethod
189
+ def _diversity(ps: np.ndarray) -> float:
190
+ H, A = ps.shape
191
+ if H <= 1:
192
+ return 0.0
193
+ d = 0.0
194
+ cnt = 0
195
+ for i in range(H):
196
+ for j in range(i + 1, H):
197
+ d += float(np.abs(ps[i] - ps[j]).mean())
198
+ cnt += 1
199
+ return d / max(1, cnt)
200
+
201
+ # --------- Core swarm policy ---------
202
+ def _compute_swarm_policy(self, s: Hashable, t: int):
203
+ cfg = self.cfg
204
+ ps = []
205
+ for h, agent in enumerate(self.agents):
206
+ phase = self.agent_phases[h]
207
+ p_h = agent.policy(
208
+ s,
209
+ t,
210
+ self.T,
211
+ hf_amp=cfg.hf_amp_base * (1.0 + 0.5 * self.T),
212
+ hf_omega=cfg.hf_omega_base * (1.0 + 0.25 * self.T),
213
+ phase_offset=phase,
214
+ rng=self.rng,
215
+ )
216
+ ps.append(p_h)
217
+ ps = np.stack(ps) # [H, A]
218
+ p_swarm = ps.mean(axis=0)
219
+ var = ps.var(axis=0)
220
+ S_t = float(var.mean())
221
+ H_swarm = self._entropy(p_swarm)
222
+ diversity = self._diversity(ps)
223
+ return p_swarm, S_t, H_swarm, diversity
224
+
225
+ def _update_proto(self, s: Hashable, p_swarm: np.ndarray):
226
+ cfg = self.cfg
227
+ if s not in self.proto:
228
+ self.proto[s] = p_swarm.copy()
229
+ else:
230
+ self.proto[s] = (
231
+ (1.0 - cfg.proto_alpha) * self.proto[s]
232
+ + cfg.proto_alpha * p_swarm
233
+ )
234
+
235
+ def _anti_proto(self, s: Hashable) -> np.ndarray:
236
+ """
237
+ Construye memoria repulsora:
238
+ anti_proto ∝ 1 - proto
239
+ Es decir, favorece acciones históricamente poco usadas.
240
+ """
241
+ proto_s = self.proto[s]
242
+ raw = 1.0 - proto_s
243
+ raw = np.clip(raw, 1e-8, None)
244
+ return raw / raw.sum()
245
+
246
+ def _thermo_step(
247
+ self,
248
+ delta_R: float,
249
+ H_swarm: float,
250
+ S_t: float,
251
+ diversity: float,
252
+ ):
253
+ """
254
+ Control térmico "anti":
255
+
256
+ - E_t (excitación, sube T):
257
+ * |ΔR| grande positiva (mejora fuerte de recompensa).
258
+ * Orden excesivo: H_swarm baja y diversidad baja.
259
+
260
+ - R_t (regulación, baja T):
261
+ * Caos fuerte: H_swarm muy alta o diversidad muy alta.
262
+ * Crash de recompensa: ΔR muy negativa.
263
+ """
264
+ cfg = self.cfg
265
+
266
+ improving = delta_R > cfg.eps_R_pos
267
+ too_ordered = (H_swarm < cfg.H_low) and (diversity < cfg.D_low)
268
+
269
+ E_t = (
270
+ (1.0 if improving else 0.0) +
271
+ (1.0 if too_ordered else 0.0)
272
+ )
273
+
274
+ too_chaotic = (H_swarm > cfg.H_high) or (diversity > cfg.D_high)
275
+ crashing = delta_R < -cfg.eps_crash
276
+
277
+ R_t = (
278
+ (1.0 if too_chaotic else 0.0) +
279
+ (1.0 if crashing else 0.0)
280
+ )
281
+
282
+ self.T += cfg.eta_T * (E_t - R_t)
283
+ self.T = float(np.clip(self.T, cfg.T_min, cfg.T_max))
284
+ return float(E_t), float(R_t)
285
+
286
+ def _gate(self, H_swarm: float, S_t: float) -> float:
287
+ """
288
+ Gate invertido:
289
+
290
+ - Queremos w_t alto cuando el sistema está demasiado
291
+ ordenado y frío (baja entropía / baja varianza / T baja),
292
+ para empujar hacia acciones en los "huecos" (anti-proto).
293
+
294
+ - Cuando T, S_t y H_swarm son altos, w_t tiende a 0
295
+ y se deja actuar más a p_swarm.
296
+ """
297
+ cfg = self.cfg
298
+ x = (
299
+ cfg.kT * (cfg.T_mid - self.T) +
300
+ cfg.kS * (cfg.S_mid - S_t) +
301
+ cfg.kH * (cfg.H_mid - H_swarm)
302
+ )
303
+ w = 1.0 / (1.0 + math.exp(-x))
304
+ return float(w)
305
+
306
+ # --------- Interfaz pública ---------
307
+ def act(self, s: Hashable, t: int):
308
+ """
309
+ Calcula la política ANTI-STRANGE y samplea una acción.
310
+ Devuelve:
311
+ action, info_dict
312
+ """
313
+ p_swarm, S_t, H_swarm, diversity = self._compute_swarm_policy(s, t)
314
+ self._update_proto(s, p_swarm)
315
+
316
+ # feedback térmico con ΔR real del paso previo
317
+ delta_R = self.last_delta_R
318
+ E_t, R_t = self._thermo_step(delta_R, H_swarm, S_t, diversity)
319
+
320
+ # memoria repulsora
321
+ anti_proto_s = self._anti_proto(s)
322
+ w_t = self._gate(H_swarm, S_t)
323
+
324
+ p_final = (1.0 - w_t) * p_swarm + w_t * anti_proto_s
325
+ p_final = p_final / p_final.sum()
326
+
327
+ a = int(self.rng.choice(len(p_final), p=p_final))
328
+
329
+ info = {
330
+ "T": self.T,
331
+ "S_t": S_t,
332
+ "H_swarm": H_swarm,
333
+ "diversity": diversity,
334
+ "E_t": E_t,
335
+ "R_t": R_t,
336
+ "w_t": w_t,
337
+ "p_swarm": p_swarm,
338
+ "p_final": p_final,
339
+ }
340
+ return a, info
341
+
342
+ def update(
343
+ self,
344
+ s: Hashable,
345
+ a: int,
346
+ r: float,
347
+ s_next: Hashable,
348
+ done: bool,
349
+ ):
350
+ # Actualizamos Q de todos los agentes
351
+ for agent in self.agents:
352
+ agent.update(s, a, r, s_next, done)
353
+
354
+ # ΔR real
355
+ delta_R = r - self.last_reward
356
+ self.last_reward = r
357
+ self.last_delta_R = delta_R
358
+
359
+ return delta_R
Strange/AntiStrange/results/antistrange_hypothesis_lab.csv ADDED
The diff for this file is too large to render. See raw diff