auto-sync 2026-07-04T03:59:09Z workspace (part 4)
Browse files- workspace/runs/ctt_val_proxy_comparison/command.txt +1 -1
- workspace/runs/ctt_val_proxy_comparison/metrics.json +25 -0
- workspace/runs/ctt_val_proxy_comparison/metrics_by_seed.json +0 -0
- workspace/runs/ctt_val_proxy_comparison/metrics_by_task.json +498 -1
- workspace/runs/ctt_val_proxy_comparison/table.tex +10 -10
- workspace/runs/paper_ctt_audit/command.txt +1 -1
- workspace/runs/summary_ctt.csv +4 -0
- workspace/scripts/build_ctt_proxy_comparison.py +94 -10
- workspace/scripts/eval_ctt_proxy.py +21 -1
- workspace/scripts/eval_learned_dominance_selector.py +110 -2
- workspace/scripts/eval_nonlinear_dominance_selector.py +20 -1
workspace/runs/ctt_val_proxy_comparison/command.txt
CHANGED
|
@@ -1 +1 @@
|
|
| 1 |
-
python scripts/build_ctt_proxy_comparison.py --out-dir runs/ctt_val_proxy_comparison
|
|
|
|
| 1 |
+
python scripts/build_ctt_proxy_comparison.py --out-dir runs/ctt_val_proxy_comparison --no-markdown-report
|
workspace/runs/ctt_val_proxy_comparison/metrics.json
CHANGED
|
@@ -6,12 +6,15 @@
|
|
| 6 |
{
|
| 7 |
"beats_local_atlas_support": false,
|
| 8 |
"candidate_diversity": 0.821928094090022,
|
|
|
|
| 9 |
"data_hash": "90b431047a1f35cec095cbafa7de5bc0126cb0d0f4db3ff31843dca369977957",
|
|
|
|
| 10 |
"mean_positive_distance": 0.7203264851945577,
|
| 11 |
"method": "local_atlas",
|
| 12 |
"negative_near_0p20": 0.03683574879227053,
|
| 13 |
"negative_near_0p40": 0.20513731437644483,
|
| 14 |
"num_rows": 69,
|
|
|
|
| 15 |
"pptc_0p20": 0.4057971014492754,
|
| 16 |
"pptc_0p40": 0.6811594202898551,
|
| 17 |
"proxy_gate_pass": false,
|
|
@@ -24,12 +27,15 @@
|
|
| 24 |
{
|
| 25 |
"beats_local_atlas_support": false,
|
| 26 |
"candidate_diversity": 0.9751103010950768,
|
|
|
|
| 27 |
"data_hash": "90b431047a1f35cec095cbafa7de5bc0126cb0d0f4db3ff31843dca369977957",
|
|
|
|
| 28 |
"mean_positive_distance": 0.9615657234367121,
|
| 29 |
"method": "task_memory",
|
| 30 |
"negative_near_0p20": 0.017451690821256038,
|
| 31 |
"negative_near_0p40": 0.1108695652173913,
|
| 32 |
"num_rows": 69,
|
|
|
|
| 33 |
"pptc_0p20": 0.3188405797101449,
|
| 34 |
"pptc_0p40": 0.5362318840579711,
|
| 35 |
"proxy_gate_pass": false,
|
|
@@ -42,12 +48,15 @@
|
|
| 42 |
{
|
| 43 |
"beats_local_atlas_support": true,
|
| 44 |
"candidate_diversity": 0.27027754304306056,
|
|
|
|
| 45 |
"data_hash": "90b431047a1f35cec095cbafa7de5bc0126cb0d0f4db3ff31843dca369977957",
|
|
|
|
| 46 |
"mean_positive_distance": 0.45091308311397055,
|
| 47 |
"method": "ctt_residual_full",
|
| 48 |
"negative_near_0p20": 0.029584063279715453,
|
| 49 |
"negative_near_0p40": 0.289941117658509,
|
| 50 |
"num_rows": 207,
|
|
|
|
| 51 |
"pptc_0p20": 0.19806763285024154,
|
| 52 |
"pptc_0p40": 0.608695652173913,
|
| 53 |
"proxy_gate_pass": true,
|
|
@@ -60,12 +69,15 @@
|
|
| 60 |
{
|
| 61 |
"beats_local_atlas_support": true,
|
| 62 |
"candidate_diversity": 0.24708366700914647,
|
|
|
|
| 63 |
"data_hash": "90b431047a1f35cec095cbafa7de5bc0126cb0d0f4db3ff31843dca369977957",
|
|
|
|
| 64 |
"mean_positive_distance": 0.44291597778605085,
|
| 65 |
"method": "ctt_residual_base_context",
|
| 66 |
"negative_near_0p20": 0.018245341614906832,
|
| 67 |
"negative_near_0p40": 0.28596910336040765,
|
| 68 |
"num_rows": 69,
|
|
|
|
| 69 |
"pptc_0p20": 0.17391304347826086,
|
| 70 |
"pptc_0p40": 0.6231884057971014,
|
| 71 |
"proxy_gate_pass": true,
|
|
@@ -78,12 +90,15 @@
|
|
| 78 |
{
|
| 79 |
"beats_local_atlas_support": true,
|
| 80 |
"candidate_diversity": 0.23968052668773945,
|
|
|
|
| 81 |
"data_hash": "1d15143588697e89f7fc2f6375b2745e4d479c726c9a947ff7eb7b2705280e1a",
|
|
|
|
| 82 |
"mean_positive_distance": 0.43468703005975967,
|
| 83 |
"method": "ctt_residual_base_context_obs",
|
| 84 |
"negative_near_0p20": 0.034336456619065314,
|
| 85 |
"negative_near_0p40": 0.30197859708729274,
|
| 86 |
"num_rows": 207,
|
|
|
|
| 87 |
"pptc_0p20": 0.24637681159420288,
|
| 88 |
"pptc_0p40": 0.6425120772946861,
|
| 89 |
"proxy_gate_pass": true,
|
|
@@ -96,12 +111,15 @@
|
|
| 96 |
{
|
| 97 |
"beats_local_atlas_support": true,
|
| 98 |
"candidate_diversity": 0.24174490402345686,
|
|
|
|
| 99 |
"data_hash": "67f7b4a692f7c7e71da24378dc71e3399c5d35afc14c494869eba6087b765c42",
|
|
|
|
| 100 |
"mean_positive_distance": 0.43402743826233176,
|
| 101 |
"method": "ctt_residual_base_context_obj",
|
| 102 |
"negative_near_0p20": 0.038024455415759766,
|
| 103 |
"negative_near_0p40": 0.30944174585478934,
|
| 104 |
"num_rows": 207,
|
|
|
|
| 105 |
"pptc_0p20": 0.22705314009661837,
|
| 106 |
"pptc_0p40": 0.6425120772946861,
|
| 107 |
"proxy_gate_pass": true,
|
|
@@ -114,12 +132,15 @@
|
|
| 114 |
{
|
| 115 |
"beats_local_atlas_support": true,
|
| 116 |
"candidate_diversity": 0.2447676812446944,
|
|
|
|
| 117 |
"data_hash": "67f7b4a692f7c7e71da24378dc71e3399c5d35afc14c494869eba6087b765c42",
|
|
|
|
| 118 |
"mean_positive_distance": 0.4429413077106721,
|
| 119 |
"method": "ctt_residual_base_context_obs_obj",
|
| 120 |
"negative_near_0p20": 0.02853647962343615,
|
| 121 |
"negative_near_0p40": 0.2934249526640831,
|
| 122 |
"num_rows": 207,
|
|
|
|
| 123 |
"pptc_0p20": 0.20772946859903382,
|
| 124 |
"pptc_0p40": 0.642512077294686,
|
| 125 |
"proxy_gate_pass": true,
|
|
@@ -132,12 +153,15 @@
|
|
| 132 |
{
|
| 133 |
"beats_local_atlas_support": true,
|
| 134 |
"candidate_diversity": 0.1163743674776266,
|
|
|
|
| 135 |
"data_hash": "90b431047a1f35cec095cbafa7de5bc0126cb0d0f4db3ff31843dca369977957",
|
|
|
|
| 136 |
"mean_positive_distance": 0.4336709210379143,
|
| 137 |
"method": "ctt_gated_residual_full",
|
| 138 |
"negative_near_0p20": 0.05269106899541682,
|
| 139 |
"negative_near_0p40": 0.33921316203924895,
|
| 140 |
"num_rows": 207,
|
|
|
|
| 141 |
"pptc_0p20": 0.2318840579710145,
|
| 142 |
"pptc_0p40": 0.6135265700483091,
|
| 143 |
"proxy_gate_pass": false,
|
|
@@ -149,5 +173,6 @@
|
|
| 149 |
}
|
| 150 |
],
|
| 151 |
"safety_slack": 0.01,
|
|
|
|
| 152 |
"split_hash": "9d1dc1c10868f76fa080895df0f2730c173f12b6db14932599d55c2b60859381"
|
| 153 |
}
|
|
|
|
| 6 |
{
|
| 7 |
"beats_local_atlas_support": false,
|
| 8 |
"candidate_diversity": 0.821928094090022,
|
| 9 |
+
"collapse_rate": 0.06605580409928237,
|
| 10 |
"data_hash": "90b431047a1f35cec095cbafa7de5bc0126cb0d0f4db3ff31843dca369977957",
|
| 11 |
+
"mean_negative_distance": 0.6789322236382422,
|
| 12 |
"mean_positive_distance": 0.7203264851945577,
|
| 13 |
"method": "local_atlas",
|
| 14 |
"negative_near_0p20": 0.03683574879227053,
|
| 15 |
"negative_near_0p40": 0.20513731437644483,
|
| 16 |
"num_rows": 69,
|
| 17 |
+
"pos_closer_than_neg": 0.5998446814623285,
|
| 18 |
"pptc_0p20": 0.4057971014492754,
|
| 19 |
"pptc_0p40": 0.6811594202898551,
|
| 20 |
"proxy_gate_pass": false,
|
|
|
|
| 27 |
{
|
| 28 |
"beats_local_atlas_support": false,
|
| 29 |
"candidate_diversity": 0.9751103010950768,
|
| 30 |
+
"collapse_rate": 0.06256038647342994,
|
| 31 |
"data_hash": "90b431047a1f35cec095cbafa7de5bc0126cb0d0f4db3ff31843dca369977957",
|
| 32 |
+
"mean_negative_distance": 0.9219133529525894,
|
| 33 |
"mean_positive_distance": 0.9615657234367121,
|
| 34 |
"method": "task_memory",
|
| 35 |
"negative_near_0p20": 0.017451690821256038,
|
| 36 |
"negative_near_0p40": 0.1108695652173913,
|
| 37 |
"num_rows": 69,
|
| 38 |
+
"pos_closer_than_neg": 0.5852941176470589,
|
| 39 |
"pptc_0p20": 0.3188405797101449,
|
| 40 |
"pptc_0p40": 0.5362318840579711,
|
| 41 |
"proxy_gate_pass": false,
|
|
|
|
| 48 |
{
|
| 49 |
"beats_local_atlas_support": true,
|
| 50 |
"candidate_diversity": 0.27027754304306056,
|
| 51 |
+
"collapse_rate": 0.06806780176345395,
|
| 52 |
"data_hash": "90b431047a1f35cec095cbafa7de5bc0126cb0d0f4db3ff31843dca369977957",
|
| 53 |
+
"mean_negative_distance": 0.5291780433921461,
|
| 54 |
"mean_positive_distance": 0.45091308311397055,
|
| 55 |
"method": "ctt_residual_full",
|
| 56 |
"negative_near_0p20": 0.029584063279715453,
|
| 57 |
"negative_near_0p40": 0.289941117658509,
|
| 58 |
"num_rows": 207,
|
| 59 |
+
"pos_closer_than_neg": 0.7351920682803036,
|
| 60 |
"pptc_0p20": 0.19806763285024154,
|
| 61 |
"pptc_0p40": 0.608695652173913,
|
| 62 |
"proxy_gate_pass": true,
|
|
|
|
| 69 |
{
|
| 70 |
"beats_local_atlas_support": true,
|
| 71 |
"candidate_diversity": 0.24708366700914647,
|
| 72 |
+
"collapse_rate": 0.06806780176345395,
|
| 73 |
"data_hash": "90b431047a1f35cec095cbafa7de5bc0126cb0d0f4db3ff31843dca369977957",
|
| 74 |
+
"mean_negative_distance": 0.5274893750999132,
|
| 75 |
"mean_positive_distance": 0.44291597778605085,
|
| 76 |
"method": "ctt_residual_base_context",
|
| 77 |
"negative_near_0p20": 0.018245341614906832,
|
| 78 |
"negative_near_0p40": 0.28596910336040765,
|
| 79 |
"num_rows": 69,
|
| 80 |
+
"pos_closer_than_neg": 0.7576806363571069,
|
| 81 |
"pptc_0p20": 0.17391304347826086,
|
| 82 |
"pptc_0p40": 0.6231884057971014,
|
| 83 |
"proxy_gate_pass": true,
|
|
|
|
| 90 |
{
|
| 91 |
"beats_local_atlas_support": true,
|
| 92 |
"candidate_diversity": 0.23968052668773945,
|
| 93 |
+
"collapse_rate": 0.06806780176345395,
|
| 94 |
"data_hash": "1d15143588697e89f7fc2f6375b2745e4d479c726c9a947ff7eb7b2705280e1a",
|
| 95 |
+
"mean_negative_distance": 0.5130644364599437,
|
| 96 |
"mean_positive_distance": 0.43468703005975967,
|
| 97 |
"method": "ctt_residual_base_context_obs",
|
| 98 |
"negative_near_0p20": 0.034336456619065314,
|
| 99 |
"negative_near_0p40": 0.30197859708729274,
|
| 100 |
"num_rows": 207,
|
| 101 |
+
"pos_closer_than_neg": 0.7717469893940482,
|
| 102 |
"pptc_0p20": 0.24637681159420288,
|
| 103 |
"pptc_0p40": 0.6425120772946861,
|
| 104 |
"proxy_gate_pass": true,
|
|
|
|
| 111 |
{
|
| 112 |
"beats_local_atlas_support": true,
|
| 113 |
"candidate_diversity": 0.24174490402345686,
|
| 114 |
+
"collapse_rate": 0.06830470254383299,
|
| 115 |
"data_hash": "67f7b4a692f7c7e71da24378dc71e3399c5d35afc14c494869eba6087b765c42",
|
| 116 |
+
"mean_negative_distance": 0.5216229740528893,
|
| 117 |
"mean_positive_distance": 0.43402743826233176,
|
| 118 |
"method": "ctt_residual_base_context_obj",
|
| 119 |
"negative_near_0p20": 0.038024455415759766,
|
| 120 |
"negative_near_0p40": 0.30944174585478934,
|
| 121 |
"num_rows": 207,
|
| 122 |
+
"pos_closer_than_neg": 0.7307419976537622,
|
| 123 |
"pptc_0p20": 0.22705314009661837,
|
| 124 |
"pptc_0p40": 0.6425120772946861,
|
| 125 |
"proxy_gate_pass": true,
|
|
|
|
| 132 |
{
|
| 133 |
"beats_local_atlas_support": true,
|
| 134 |
"candidate_diversity": 0.2447676812446944,
|
| 135 |
+
"collapse_rate": 0.06830470254383299,
|
| 136 |
"data_hash": "67f7b4a692f7c7e71da24378dc71e3399c5d35afc14c494869eba6087b765c42",
|
| 137 |
+
"mean_negative_distance": 0.5333629090899681,
|
| 138 |
"mean_positive_distance": 0.4429413077106721,
|
| 139 |
"method": "ctt_residual_base_context_obs_obj",
|
| 140 |
"negative_near_0p20": 0.02853647962343615,
|
| 141 |
"negative_near_0p40": 0.2934249526640831,
|
| 142 |
"num_rows": 207,
|
| 143 |
+
"pos_closer_than_neg": 0.7277074505015682,
|
| 144 |
"pptc_0p20": 0.20772946859903382,
|
| 145 |
"pptc_0p40": 0.642512077294686,
|
| 146 |
"proxy_gate_pass": true,
|
|
|
|
| 153 |
{
|
| 154 |
"beats_local_atlas_support": true,
|
| 155 |
"candidate_diversity": 0.1163743674776266,
|
| 156 |
+
"collapse_rate": 0.06806780176345395,
|
| 157 |
"data_hash": "90b431047a1f35cec095cbafa7de5bc0126cb0d0f4db3ff31843dca369977957",
|
| 158 |
+
"mean_negative_distance": 0.5050016174085634,
|
| 159 |
"mean_positive_distance": 0.4336709210379143,
|
| 160 |
"method": "ctt_gated_residual_full",
|
| 161 |
"negative_near_0p20": 0.05269106899541682,
|
| 162 |
"negative_near_0p40": 0.33921316203924895,
|
| 163 |
"num_rows": 207,
|
| 164 |
+
"pos_closer_than_neg": 0.7247617850559026,
|
| 165 |
"pptc_0p20": 0.2318840579710145,
|
| 166 |
"pptc_0p40": 0.6135265700483091,
|
| 167 |
"proxy_gate_pass": false,
|
|
|
|
| 173 |
}
|
| 174 |
],
|
| 175 |
"safety_slack": 0.01,
|
| 176 |
+
"schema_version": 2,
|
| 177 |
"split_hash": "9d1dc1c10868f76fa080895df0f2730c173f12b6db14932599d55c2b60859381"
|
| 178 |
}
|
workspace/runs/ctt_val_proxy_comparison/metrics_by_seed.json
CHANGED
|
The diff for this file is too large to render.
See raw diff
|
|
|
workspace/runs/ctt_val_proxy_comparison/metrics_by_task.json
CHANGED
|
@@ -1 +1,498 @@
|
|
| 1 |
-
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"ctt_gated_residual_full": {
|
| 3 |
+
"LiftPegUpright-v1": {
|
| 4 |
+
"candidate_diversity": 0.05970962647106902,
|
| 5 |
+
"collapse_rate": 0.07311091686091686,
|
| 6 |
+
"mean_negative_distance": 0.3839348728146849,
|
| 7 |
+
"mean_positive_distance": 0.25572830294882354,
|
| 8 |
+
"negative_near_0p20": 0.0,
|
| 9 |
+
"negative_near_0p40": 0.53125,
|
| 10 |
+
"pos_closer_than_neg": 0.9444444444444444,
|
| 11 |
+
"pptc_0p20": 0.5,
|
| 12 |
+
"pptc_0p40": 0.8888888888888888,
|
| 13 |
+
"proxy_support_distance": 0.23664649313175856
|
| 14 |
+
},
|
| 15 |
+
"PickCube-v1": {
|
| 16 |
+
"candidate_diversity": 0.2021307744588189,
|
| 17 |
+
"collapse_rate": 0.10000000000000002,
|
| 18 |
+
"mean_negative_distance": 0.5829484689774836,
|
| 19 |
+
"mean_positive_distance": 0.576577907999753,
|
| 20 |
+
"negative_near_0p20": 0.0,
|
| 21 |
+
"negative_near_0p40": 0.3333333333333333,
|
| 22 |
+
"pos_closer_than_neg": 0.7666666666666666,
|
| 23 |
+
"pptc_0p20": 0.0,
|
| 24 |
+
"pptc_0p40": 0.3333333333333333,
|
| 25 |
+
"proxy_support_distance": 0.4443502650555026
|
| 26 |
+
},
|
| 27 |
+
"PullCube-v1": {
|
| 28 |
+
"candidate_diversity": 0.14847138063951565,
|
| 29 |
+
"collapse_rate": 0.06404465632406808,
|
| 30 |
+
"mean_negative_distance": 0.7041678688460474,
|
| 31 |
+
"mean_positive_distance": 0.592154236746947,
|
| 32 |
+
"negative_near_0p20": 0.0,
|
| 33 |
+
"negative_near_0p40": 0.05861928104575163,
|
| 34 |
+
"pos_closer_than_neg": 0.6517195767195768,
|
| 35 |
+
"pptc_0p20": 0.029411764705882353,
|
| 36 |
+
"pptc_0p40": 0.3137254901960784,
|
| 37 |
+
"proxy_support_distance": 0.5373627305388711
|
| 38 |
+
},
|
| 39 |
+
"PushCube-v1": {
|
| 40 |
+
"candidate_diversity": 0.05417944485503618,
|
| 41 |
+
"collapse_rate": 0.06478937728937728,
|
| 42 |
+
"mean_negative_distance": 0.3979735192222798,
|
| 43 |
+
"mean_positive_distance": 0.2811870120807798,
|
| 44 |
+
"negative_near_0p20": 0.08974358974358974,
|
| 45 |
+
"negative_near_0p40": 0.44871794871794873,
|
| 46 |
+
"pos_closer_than_neg": 0.625,
|
| 47 |
+
"pptc_0p20": 0.3076923076923077,
|
| 48 |
+
"pptc_0p40": 0.9230769230769231,
|
| 49 |
+
"proxy_support_distance": 0.26109739578233915
|
| 50 |
+
},
|
| 51 |
+
"StackCube-v1": {
|
| 52 |
+
"candidate_diversity": 0.11447220652079974,
|
| 53 |
+
"collapse_rate": 0.07588217338217343,
|
| 54 |
+
"mean_negative_distance": 0.3264807588283944,
|
| 55 |
+
"mean_positive_distance": 0.268244707965138,
|
| 56 |
+
"negative_near_0p20": 0.16460113960113962,
|
| 57 |
+
"negative_near_0p40": 0.8038990638990638,
|
| 58 |
+
"pos_closer_than_neg": 0.7895604395604395,
|
| 59 |
+
"pptc_0p20": 0.5333333333333333,
|
| 60 |
+
"pptc_0p40": 0.9333333333333333,
|
| 61 |
+
"proxy_support_distance": 0.2277182791599637
|
| 62 |
+
}
|
| 63 |
+
},
|
| 64 |
+
"ctt_residual_base_context": {
|
| 65 |
+
"LiftPegUpright-v1": {
|
| 66 |
+
"candidate_diversity": 0.14362703522993195,
|
| 67 |
+
"collapse_rate": 0.07311091686091686,
|
| 68 |
+
"mean_negative_distance": 0.41497127070807355,
|
| 69 |
+
"mean_positive_distance": 0.2305104051790113,
|
| 70 |
+
"negative_near_0p20": 0.0,
|
| 71 |
+
"negative_near_0p40": 0.5,
|
| 72 |
+
"pos_closer_than_neg": 1.0,
|
| 73 |
+
"pptc_0p20": 0.6666666666666666,
|
| 74 |
+
"pptc_0p40": 1.0,
|
| 75 |
+
"proxy_support_distance": 0.2014216883582193
|
| 76 |
+
},
|
| 77 |
+
"PickCube-v1": {
|
| 78 |
+
"candidate_diversity": 0.25660266524569825,
|
| 79 |
+
"collapse_rate": 0.1,
|
| 80 |
+
"mean_negative_distance": 0.899796341697192,
|
| 81 |
+
"mean_positive_distance": 0.9817664760096816,
|
| 82 |
+
"negative_near_0p20": 0.0,
|
| 83 |
+
"negative_near_0p40": 0.0,
|
| 84 |
+
"pos_closer_than_neg": 0.2,
|
| 85 |
+
"pptc_0p20": 0.0,
|
| 86 |
+
"pptc_0p40": 0.0,
|
| 87 |
+
"proxy_support_distance": 0.7855270291361975
|
| 88 |
+
},
|
| 89 |
+
"PullCube-v1": {
|
| 90 |
+
"candidate_diversity": 0.3216694071900426,
|
| 91 |
+
"collapse_rate": 0.06404465632406808,
|
| 92 |
+
"mean_negative_distance": 0.6926077604425354,
|
| 93 |
+
"mean_positive_distance": 0.5696106164927525,
|
| 94 |
+
"negative_near_0p20": 0.0,
|
| 95 |
+
"negative_near_0p40": 0.02022058823529412,
|
| 96 |
+
"pos_closer_than_neg": 0.6978174603174603,
|
| 97 |
+
"pptc_0p20": 0.029411764705882353,
|
| 98 |
+
"pptc_0p40": 0.38235294117647056,
|
| 99 |
+
"proxy_support_distance": 0.4743135938351562
|
| 100 |
+
},
|
| 101 |
+
"PushCube-v1": {
|
| 102 |
+
"candidate_diversity": 0.18464687502804178,
|
| 103 |
+
"collapse_rate": 0.06478937728937728,
|
| 104 |
+
"mean_negative_distance": 0.4607380704920465,
|
| 105 |
+
"mean_positive_distance": 0.31700052432677295,
|
| 106 |
+
"negative_near_0p20": 0.052884615384615384,
|
| 107 |
+
"negative_near_0p40": 0.3701923076923077,
|
| 108 |
+
"pos_closer_than_neg": 0.71875,
|
| 109 |
+
"pptc_0p20": 0.23076923076923078,
|
| 110 |
+
"pptc_0p40": 0.8461538461538461,
|
| 111 |
+
"proxy_support_distance": 0.267084673449308
|
| 112 |
+
},
|
| 113 |
+
"StackCube-v1": {
|
| 114 |
+
"candidate_diversity": 0.17288259514532145,
|
| 115 |
+
"collapse_rate": 0.07588217338217337,
|
| 116 |
+
"mean_negative_distance": 0.35211110872802126,
|
| 117 |
+
"mean_positive_distance": 0.3139070522101423,
|
| 118 |
+
"negative_near_0p20": 0.03809523809523809,
|
| 119 |
+
"negative_near_0p40": 0.7487912087912088,
|
| 120 |
+
"pos_closer_than_neg": 0.8025030525030525,
|
| 121 |
+
"pptc_0p20": 0.26666666666666666,
|
| 122 |
+
"pptc_0p40": 0.8666666666666667,
|
| 123 |
+
"proxy_support_distance": 0.2492223974983373
|
| 124 |
+
}
|
| 125 |
+
},
|
| 126 |
+
"ctt_residual_base_context_obj": {
|
| 127 |
+
"LiftPegUpright-v1": {
|
| 128 |
+
"candidate_diversity": 0.1493872636722864,
|
| 129 |
+
"collapse_rate": 0.07311091686091686,
|
| 130 |
+
"mean_negative_distance": 0.4120512868826152,
|
| 131 |
+
"mean_positive_distance": 0.26240904635443296,
|
| 132 |
+
"negative_near_0p20": 0.0,
|
| 133 |
+
"negative_near_0p40": 0.4647435897435897,
|
| 134 |
+
"pos_closer_than_neg": 0.9375,
|
| 135 |
+
"pptc_0p20": 0.4444444444444444,
|
| 136 |
+
"pptc_0p40": 0.8888888888888888,
|
| 137 |
+
"proxy_support_distance": 0.22436331113570077
|
| 138 |
+
},
|
| 139 |
+
"PickCube-v1": {
|
| 140 |
+
"candidate_diversity": 0.2693081365535955,
|
| 141 |
+
"collapse_rate": 0.10000000000000002,
|
| 142 |
+
"mean_negative_distance": 0.7942766276118407,
|
| 143 |
+
"mean_positive_distance": 0.8679002702981619,
|
| 144 |
+
"negative_near_0p20": 0.0,
|
| 145 |
+
"negative_near_0p40": 0.0,
|
| 146 |
+
"pos_closer_than_neg": 0.3333333333333333,
|
| 147 |
+
"pptc_0p20": 0.0,
|
| 148 |
+
"pptc_0p40": 0.0,
|
| 149 |
+
"proxy_support_distance": 0.7622612941754188
|
| 150 |
+
},
|
| 151 |
+
"PullCube-v1": {
|
| 152 |
+
"candidate_diversity": 0.31298127304146967,
|
| 153 |
+
"collapse_rate": 0.06404465632406808,
|
| 154 |
+
"mean_negative_distance": 0.7058399367948929,
|
| 155 |
+
"mean_positive_distance": 0.5663405352240012,
|
| 156 |
+
"negative_near_0p20": 0.0,
|
| 157 |
+
"negative_near_0p40": 0.03982843137254902,
|
| 158 |
+
"pos_closer_than_neg": 0.6993386243386243,
|
| 159 |
+
"pptc_0p20": 0.058823529411764705,
|
| 160 |
+
"pptc_0p40": 0.4019607843137255,
|
| 161 |
+
"proxy_support_distance": 0.47487613941275497
|
| 162 |
+
},
|
| 163 |
+
"PushCube-v1": {
|
| 164 |
+
"candidate_diversity": 0.18267389477352383,
|
| 165 |
+
"collapse_rate": 0.06478937728937728,
|
| 166 |
+
"mean_negative_distance": 0.45435797530595545,
|
| 167 |
+
"mean_positive_distance": 0.32555326496747355,
|
| 168 |
+
"negative_near_0p20": 0.052884615384615384,
|
| 169 |
+
"negative_near_0p40": 0.375,
|
| 170 |
+
"pos_closer_than_neg": 0.712673611111111,
|
| 171 |
+
"pptc_0p20": 0.15384615384615385,
|
| 172 |
+
"pptc_0p40": 0.8717948717948718,
|
| 173 |
+
"proxy_support_distance": 0.2722421007397641
|
| 174 |
+
},
|
| 175 |
+
"StackCube-v1": {
|
| 176 |
+
"candidate_diversity": 0.1665761829043618,
|
| 177 |
+
"collapse_rate": 0.07697191697191702,
|
| 178 |
+
"mean_negative_distance": 0.32524565684329504,
|
| 179 |
+
"mean_positive_distance": 0.26785120329886264,
|
| 180 |
+
"negative_near_0p20": 0.12907916157916158,
|
| 181 |
+
"negative_near_0p40": 0.8222568172568172,
|
| 182 |
+
"pos_closer_than_neg": 0.7281339031339031,
|
| 183 |
+
"pptc_0p20": 0.6,
|
| 184 |
+
"pptc_0p40": 0.9333333333333333,
|
| 185 |
+
"proxy_support_distance": 0.20483640069851286
|
| 186 |
+
}
|
| 187 |
+
},
|
| 188 |
+
"ctt_residual_base_context_obs": {
|
| 189 |
+
"LiftPegUpright-v1": {
|
| 190 |
+
"candidate_diversity": 0.148958579095827,
|
| 191 |
+
"collapse_rate": 0.07311091686091686,
|
| 192 |
+
"mean_negative_distance": 0.4115981169631194,
|
| 193 |
+
"mean_positive_distance": 0.2362653608389971,
|
| 194 |
+
"negative_near_0p20": 0.0,
|
| 195 |
+
"negative_near_0p40": 0.47061965811965817,
|
| 196 |
+
"pos_closer_than_neg": 0.9965277777777778,
|
| 197 |
+
"pptc_0p20": 0.6666666666666666,
|
| 198 |
+
"pptc_0p40": 1.0,
|
| 199 |
+
"proxy_support_distance": 0.1957123602918266
|
| 200 |
+
},
|
| 201 |
+
"PickCube-v1": {
|
| 202 |
+
"candidate_diversity": 0.28828954720262945,
|
| 203 |
+
"collapse_rate": 0.10000000000000002,
|
| 204 |
+
"mean_negative_distance": 0.7587970286519089,
|
| 205 |
+
"mean_positive_distance": 0.7901440255768358,
|
| 206 |
+
"negative_near_0p20": 0.0,
|
| 207 |
+
"negative_near_0p40": 0.0,
|
| 208 |
+
"pos_closer_than_neg": 0.5333333333333333,
|
| 209 |
+
"pptc_0p20": 0.0,
|
| 210 |
+
"pptc_0p40": 0.0,
|
| 211 |
+
"proxy_support_distance": 0.6021893630844198
|
| 212 |
+
},
|
| 213 |
+
"PullCube-v1": {
|
| 214 |
+
"candidate_diversity": 0.3133621097757295,
|
| 215 |
+
"collapse_rate": 0.06404465632406808,
|
| 216 |
+
"mean_negative_distance": 0.6841223846741898,
|
| 217 |
+
"mean_positive_distance": 0.5733947056530471,
|
| 218 |
+
"negative_near_0p20": 0.0,
|
| 219 |
+
"negative_near_0p40": 0.02839052287581699,
|
| 220 |
+
"pos_closer_than_neg": 0.7119047619047619,
|
| 221 |
+
"pptc_0p20": 0.0392156862745098,
|
| 222 |
+
"pptc_0p40": 0.37254901960784315,
|
| 223 |
+
"proxy_support_distance": 0.4821119993756999
|
| 224 |
+
},
|
| 225 |
+
"PushCube-v1": {
|
| 226 |
+
"candidate_diversity": 0.17226944365330818,
|
| 227 |
+
"collapse_rate": 0.06478937728937728,
|
| 228 |
+
"mean_negative_distance": 0.4515933904080564,
|
| 229 |
+
"mean_positive_distance": 0.31235985654167453,
|
| 230 |
+
"negative_near_0p20": 0.06891025641025642,
|
| 231 |
+
"negative_near_0p40": 0.38247863247863245,
|
| 232 |
+
"pos_closer_than_neg": 0.732638888888889,
|
| 233 |
+
"pptc_0p20": 0.3333333333333333,
|
| 234 |
+
"pptc_0p40": 0.9230769230769231,
|
| 235 |
+
"proxy_support_distance": 0.2586271514743408
|
| 236 |
+
},
|
| 237 |
+
"StackCube-v1": {
|
| 238 |
+
"candidate_diversity": 0.16414005465390855,
|
| 239 |
+
"collapse_rate": 0.07588217338217343,
|
| 240 |
+
"mean_negative_distance": 0.33057222184027074,
|
| 241 |
+
"mean_positive_distance": 0.2819713837511487,
|
| 242 |
+
"negative_near_0p20": 0.09822547822547821,
|
| 243 |
+
"negative_near_0p40": 0.8050203500203499,
|
| 244 |
+
"pos_closer_than_neg": 0.8023656898656899,
|
| 245 |
+
"pptc_0p20": 0.4888888888888889,
|
| 246 |
+
"pptc_0p40": 0.9111111111111111,
|
| 247 |
+
"proxy_support_distance": 0.22536104103963187
|
| 248 |
+
}
|
| 249 |
+
},
|
| 250 |
+
"ctt_residual_base_context_obs_obj": {
|
| 251 |
+
"LiftPegUpright-v1": {
|
| 252 |
+
"candidate_diversity": 0.14766830492610186,
|
| 253 |
+
"collapse_rate": 0.07311091686091686,
|
| 254 |
+
"mean_negative_distance": 0.41649342498231295,
|
| 255 |
+
"mean_positive_distance": 0.2643206130229132,
|
| 256 |
+
"negative_near_0p20": 0.0,
|
| 257 |
+
"negative_near_0p40": 0.4671474358974359,
|
| 258 |
+
"pos_closer_than_neg": 0.9861111111111112,
|
| 259 |
+
"pptc_0p20": 0.4444444444444444,
|
| 260 |
+
"pptc_0p40": 1.0,
|
| 261 |
+
"proxy_support_distance": 0.22818479501118874
|
| 262 |
+
},
|
| 263 |
+
"PickCube-v1": {
|
| 264 |
+
"candidate_diversity": 0.33757465230985995,
|
| 265 |
+
"collapse_rate": 0.10000000000000002,
|
| 266 |
+
"mean_negative_distance": 1.1075887642380198,
|
| 267 |
+
"mean_positive_distance": 1.1680868800298911,
|
| 268 |
+
"negative_near_0p20": 0.0,
|
| 269 |
+
"negative_near_0p40": 0.0,
|
| 270 |
+
"pos_closer_than_neg": 0.43333333333333335,
|
| 271 |
+
"pptc_0p20": 0.0,
|
| 272 |
+
"pptc_0p40": 0.0,
|
| 273 |
+
"proxy_support_distance": 0.9803242549573113
|
| 274 |
+
},
|
| 275 |
+
"PullCube-v1": {
|
| 276 |
+
"candidate_diversity": 0.3136336919427042,
|
| 277 |
+
"collapse_rate": 0.06404465632406808,
|
| 278 |
+
"mean_negative_distance": 0.7162658429465761,
|
| 279 |
+
"mean_positive_distance": 0.565417223038266,
|
| 280 |
+
"negative_near_0p20": 0.0,
|
| 281 |
+
"negative_near_0p40": 0.029411764705882353,
|
| 282 |
+
"pos_closer_than_neg": 0.683994708994709,
|
| 283 |
+
"pptc_0p20": 0.029411764705882353,
|
| 284 |
+
"pptc_0p40": 0.37254901960784315,
|
| 285 |
+
"proxy_support_distance": 0.47243182399485906
|
| 286 |
+
},
|
| 287 |
+
"PushCube-v1": {
|
| 288 |
+
"candidate_diversity": 0.181916451774259,
|
| 289 |
+
"collapse_rate": 0.06478937728937728,
|
| 290 |
+
"mean_negative_distance": 0.44441461966625945,
|
| 291 |
+
"mean_positive_distance": 0.32881952335913633,
|
| 292 |
+
"negative_near_0p20": 0.04487179487179487,
|
| 293 |
+
"negative_near_0p40": 0.3643162393162393,
|
| 294 |
+
"pos_closer_than_neg": 0.6822916666666666,
|
| 295 |
+
"pptc_0p20": 0.23076923076923078,
|
| 296 |
+
"pptc_0p40": 0.9230769230769231,
|
| 297 |
+
"proxy_support_distance": 0.27338380647453003
|
| 298 |
+
},
|
| 299 |
+
"StackCube-v1": {
|
| 300 |
+
"candidate_diversity": 0.17579507499334182,
|
| 301 |
+
"collapse_rate": 0.07697191697191702,
|
| 302 |
+
"mean_negative_distance": 0.3332039593498869,
|
| 303 |
+
"mean_positive_distance": 0.28734001912661167,
|
| 304 |
+
"negative_near_0p20": 0.09237891737891737,
|
| 305 |
+
"negative_near_0p40": 0.7804884004884005,
|
| 306 |
+
"pos_closer_than_neg": 0.7293905168905168,
|
| 307 |
+
"pptc_0p20": 0.5111111111111111,
|
| 308 |
+
"pptc_0p40": 0.9111111111111111,
|
| 309 |
+
"proxy_support_distance": 0.225556820839634
|
| 310 |
+
}
|
| 311 |
+
},
|
| 312 |
+
"ctt_residual_full": {
|
| 313 |
+
"LiftPegUpright-v1": {
|
| 314 |
+
"candidate_diversity": 0.16663572531428117,
|
| 315 |
+
"collapse_rate": 0.07311091686091686,
|
| 316 |
+
"mean_negative_distance": 0.41647353998567643,
|
| 317 |
+
"mean_positive_distance": 0.2771405265426538,
|
| 318 |
+
"negative_near_0p20": 0.0,
|
| 319 |
+
"negative_near_0p40": 0.468215811965812,
|
| 320 |
+
"pos_closer_than_neg": 0.90625,
|
| 321 |
+
"pptc_0p20": 0.4444444444444444,
|
| 322 |
+
"pptc_0p40": 0.8888888888888888,
|
| 323 |
+
"proxy_support_distance": 0.225699402965728
|
| 324 |
+
},
|
| 325 |
+
"PickCube-v1": {
|
| 326 |
+
"candidate_diversity": 0.2841252624025221,
|
| 327 |
+
"collapse_rate": 0.10000000000000002,
|
| 328 |
+
"mean_negative_distance": 0.7853855604157447,
|
| 329 |
+
"mean_positive_distance": 0.8107379646608238,
|
| 330 |
+
"negative_near_0p20": 0.0,
|
| 331 |
+
"negative_near_0p40": 0.06666666666666667,
|
| 332 |
+
"pos_closer_than_neg": 0.7333333333333334,
|
| 333 |
+
"pptc_0p20": 0.0,
|
| 334 |
+
"pptc_0p40": 0.3333333333333333,
|
| 335 |
+
"proxy_support_distance": 0.5973002537013845
|
| 336 |
+
},
|
| 337 |
+
"PullCube-v1": {
|
| 338 |
+
"candidate_diversity": 0.35669628571891027,
|
| 339 |
+
"collapse_rate": 0.06404465632406808,
|
| 340 |
+
"mean_negative_distance": 0.7141779455036535,
|
| 341 |
+
"mean_positive_distance": 0.5869452164166006,
|
| 342 |
+
"negative_near_0p20": 0.0,
|
| 343 |
+
"negative_near_0p40": 0.0196078431372549,
|
| 344 |
+
"pos_closer_than_neg": 0.6872354497354497,
|
| 345 |
+
"pptc_0p20": 0.029411764705882353,
|
| 346 |
+
"pptc_0p40": 0.3235294117647059,
|
| 347 |
+
"proxy_support_distance": 0.48532493799704673
|
| 348 |
+
},
|
| 349 |
+
"PushCube-v1": {
|
| 350 |
+
"candidate_diversity": 0.1897940504075825,
|
| 351 |
+
"collapse_rate": 0.06478937728937728,
|
| 352 |
+
"mean_negative_distance": 0.4571901910242416,
|
| 353 |
+
"mean_positive_distance": 0.33455829528179704,
|
| 354 |
+
"negative_near_0p20": 0.03685897435897436,
|
| 355 |
+
"negative_near_0p40": 0.36217948717948717,
|
| 356 |
+
"pos_closer_than_neg": 0.7239583333333334,
|
| 357 |
+
"pptc_0p20": 0.1282051282051282,
|
| 358 |
+
"pptc_0p40": 0.8717948717948718,
|
| 359 |
+
"proxy_support_distance": 0.27709473619662045
|
| 360 |
+
},
|
| 361 |
+
"StackCube-v1": {
|
| 362 |
+
"candidate_diversity": 0.18468096572943052,
|
| 363 |
+
"collapse_rate": 0.07588217338217343,
|
| 364 |
+
"mean_negative_distance": 0.33657300192660006,
|
| 365 |
+
"mean_positive_distance": 0.28893509427463027,
|
| 366 |
+
"negative_near_0p20": 0.10414224664224664,
|
| 367 |
+
"negative_near_0p40": 0.7836650386650388,
|
| 368 |
+
"pos_closer_than_neg": 0.7400234025234025,
|
| 369 |
+
"pptc_0p20": 0.5555555555555556,
|
| 370 |
+
"pptc_0p40": 0.9333333333333333,
|
| 371 |
+
"proxy_support_distance": 0.22290972126483205
|
| 372 |
+
}
|
| 373 |
+
},
|
| 374 |
+
"local_atlas": {
|
| 375 |
+
"LiftPegUpright-v1": {
|
| 376 |
+
"candidate_diversity": 0.5014669861510727,
|
| 377 |
+
"collapse_rate": 0.07219516594516594,
|
| 378 |
+
"mean_negative_distance": 0.4854021065936647,
|
| 379 |
+
"mean_positive_distance": 0.43646670032063084,
|
| 380 |
+
"negative_near_0p20": 0.027777777777777776,
|
| 381 |
+
"negative_near_0p40": 0.24219877344877347,
|
| 382 |
+
"pos_closer_than_neg": 0.7192460317460317,
|
| 383 |
+
"pptc_0p20": 0.5,
|
| 384 |
+
"pptc_0p40": 1.0,
|
| 385 |
+
"proxy_support_distance": 0.18189470652155995
|
| 386 |
+
},
|
| 387 |
+
"PickCube-v1": {
|
| 388 |
+
"candidate_diversity": 1.0944000325107157,
|
| 389 |
+
"collapse_rate": 0.1,
|
| 390 |
+
"mean_negative_distance": 0.6373729677105011,
|
| 391 |
+
"mean_positive_distance": 0.7798613153680638,
|
| 392 |
+
"negative_near_0p20": 0.3,
|
| 393 |
+
"negative_near_0p40": 0.4,
|
| 394 |
+
"pos_closer_than_neg": 0.6,
|
| 395 |
+
"pptc_0p20": 1.0,
|
| 396 |
+
"pptc_0p40": 1.0,
|
| 397 |
+
"proxy_support_distance": 0.07461591163524217
|
| 398 |
+
},
|
| 399 |
+
"PullCube-v1": {
|
| 400 |
+
"candidate_diversity": 1.0209711156114212,
|
| 401 |
+
"collapse_rate": 0.06316930618401206,
|
| 402 |
+
"mean_negative_distance": 0.9870468132552196,
|
| 403 |
+
"mean_positive_distance": 0.9460291977432415,
|
| 404 |
+
"negative_near_0p20": 0.003676470588235294,
|
| 405 |
+
"negative_near_0p40": 0.039460784313725496,
|
| 406 |
+
"pos_closer_than_neg": 0.6720238095238096,
|
| 407 |
+
"pptc_0p20": 0.058823529411764705,
|
| 408 |
+
"pptc_0p40": 0.38235294117647056,
|
| 409 |
+
"proxy_support_distance": 0.5490009012121931
|
| 410 |
+
},
|
| 411 |
+
"PushCube-v1": {
|
| 412 |
+
"candidate_diversity": 0.692147376654553,
|
| 413 |
+
"collapse_rate": 0.0641025641025641,
|
| 414 |
+
"mean_negative_distance": 0.5298147189077234,
|
| 415 |
+
"mean_positive_distance": 0.5107316898096026,
|
| 416 |
+
"negative_near_0p20": 0.028846153846153848,
|
| 417 |
+
"negative_near_0p40": 0.23237179487179485,
|
| 418 |
+
"pos_closer_than_neg": 0.5859375,
|
| 419 |
+
"pptc_0p20": 0.7692307692307693,
|
| 420 |
+
"pptc_0p40": 0.9230769230769231,
|
| 421 |
+
"proxy_support_distance": 0.21488945685319283
|
| 422 |
+
},
|
| 423 |
+
"StackCube-v1": {
|
| 424 |
+
"candidate_diversity": 0.593260181033124,
|
| 425 |
+
"collapse_rate": 0.06957264957264958,
|
| 426 |
+
"mean_negative_distance": 0.40728379791043173,
|
| 427 |
+
"mean_positive_distance": 0.4999574180225059,
|
| 428 |
+
"negative_near_0p20": 0.105,
|
| 429 |
+
"negative_near_0p40": 0.5292521367521368,
|
| 430 |
+
"pos_closer_than_neg": 0.4584401709401709,
|
| 431 |
+
"pptc_0p20": 0.8,
|
| 432 |
+
"pptc_0p40": 1.0,
|
| 433 |
+
"proxy_support_distance": 0.15391202596431447
|
| 434 |
+
}
|
| 435 |
+
},
|
| 436 |
+
"task_memory": {
|
| 437 |
+
"LiftPegUpright-v1": {
|
| 438 |
+
"candidate_diversity": 0.6210576200589012,
|
| 439 |
+
"collapse_rate": 0.0625,
|
| 440 |
+
"mean_negative_distance": 0.583368643118901,
|
| 441 |
+
"mean_positive_distance": 0.5613930072546827,
|
| 442 |
+
"negative_near_0p20": 0.010416666666666666,
|
| 443 |
+
"negative_near_0p40": 0.13541666666666666,
|
| 444 |
+
"pos_closer_than_neg": 0.6875,
|
| 445 |
+
"pptc_0p20": 0.5,
|
| 446 |
+
"pptc_0p40": 1.0,
|
| 447 |
+
"proxy_support_distance": 0.20479276324345116
|
| 448 |
+
},
|
| 449 |
+
"PickCube-v1": {
|
| 450 |
+
"candidate_diversity": 1.2387041849339937,
|
| 451 |
+
"collapse_rate": 0.06666666666666667,
|
| 452 |
+
"mean_negative_distance": 0.8095929802695191,
|
| 453 |
+
"mean_positive_distance": 0.9291008275018162,
|
| 454 |
+
"negative_near_0p20": 0.26666666666666666,
|
| 455 |
+
"negative_near_0p40": 0.4,
|
| 456 |
+
"pos_closer_than_neg": 0.6,
|
| 457 |
+
"pptc_0p20": 1.0,
|
| 458 |
+
"pptc_0p40": 1.0,
|
| 459 |
+
"proxy_support_distance": 0.07461591163524217
|
| 460 |
+
},
|
| 461 |
+
"PullCube-v1": {
|
| 462 |
+
"candidate_diversity": 1.3442506282390456,
|
| 463 |
+
"collapse_rate": 0.0625,
|
| 464 |
+
"mean_negative_distance": 1.383142918984482,
|
| 465 |
+
"mean_positive_distance": 1.3657646662805298,
|
| 466 |
+
"negative_near_0p20": 0.0,
|
| 467 |
+
"negative_near_0p40": 0.0,
|
| 468 |
+
"pos_closer_than_neg": 0.4732142857142857,
|
| 469 |
+
"pptc_0p20": 0.029411764705882353,
|
| 470 |
+
"pptc_0p40": 0.08823529411764706,
|
| 471 |
+
"proxy_support_distance": 0.8291223046675316
|
| 472 |
+
},
|
| 473 |
+
"PushCube-v1": {
|
| 474 |
+
"candidate_diversity": 0.6719745815075286,
|
| 475 |
+
"collapse_rate": 0.0625,
|
| 476 |
+
"mean_negative_distance": 0.7351552918288785,
|
| 477 |
+
"mean_positive_distance": 0.6373056713998045,
|
| 478 |
+
"negative_near_0p20": 0.014423076923076924,
|
| 479 |
+
"negative_near_0p40": 0.07211538461538461,
|
| 480 |
+
"pos_closer_than_neg": 0.609375,
|
| 481 |
+
"pptc_0p20": 0.38461538461538464,
|
| 482 |
+
"pptc_0p40": 0.9230769230769231,
|
| 483 |
+
"proxy_support_distance": 0.26447355510409054
|
| 484 |
+
},
|
| 485 |
+
"StackCube-v1": {
|
| 486 |
+
"candidate_diversity": 0.5251579967031662,
|
| 487 |
+
"collapse_rate": 0.0625,
|
| 488 |
+
"mean_negative_distance": 0.5187021685529322,
|
| 489 |
+
"mean_positive_distance": 0.48864024429118186,
|
| 490 |
+
"negative_near_0p20": 0.04583333333333333,
|
| 491 |
+
"negative_near_0p40": 0.36666666666666664,
|
| 492 |
+
"pos_closer_than_neg": 0.6875,
|
| 493 |
+
"pptc_0p20": 0.8,
|
| 494 |
+
"pptc_0p40": 1.0,
|
| 495 |
+
"proxy_support_distance": 0.17466840356416174
|
| 496 |
+
}
|
| 497 |
+
}
|
| 498 |
+
}
|
workspace/runs/ctt_val_proxy_comparison/table.tex
CHANGED
|
@@ -1,15 +1,15 @@
|
|
| 1 |
% Auto-generated by scripts/build_ctt_proxy_comparison.py
|
| 2 |
-
\begin{tabular}{
|
| 3 |
\toprule
|
| 4 |
-
Method & Seeds & Rows & PPTC@0.20 & PPTC@0.40 & Neg@0.20 &
|
| 5 |
\midrule
|
| 6 |
-
local\_atlas & 1 & 69 & 0.4058 & 0.6812 & 0.0368 & 0.7203 & 0.
|
| 7 |
-
task\_memory & 1 & 69 & 0.3188 & 0.5362 & 0.0175 & 0.9616 & 0.
|
| 8 |
-
ctt\_residual\_full & 3 & 207 & 0.1981 & 0.6087 & 0.0296 & 0.4509 & 0.
|
| 9 |
-
ctt\_residual\_base\_context & 1 & 69 & 0.1739 & 0.6232 & 0.0182 & 0.4429 & 0.
|
| 10 |
-
ctt\_residual\_base\_context\_obs & 3 & 207 & 0.2464 & 0.6425 & 0.0343 & 0.4347 & 0.
|
| 11 |
-
ctt\_residual\_base\_context\_obj & 3 & 207 & 0.2271 & 0.6425 & 0.0380 & 0.4340 & 0.
|
| 12 |
-
ctt\_residual\_base\_context\_obs\_obj & 3 & 207 & 0.2077 & 0.6425 & 0.0285 & 0.4429 & 0.
|
| 13 |
-
ctt\_gated\_residual\_full & 3 & 207 & 0.2319 & 0.6135 & 0.0527 & 0.4337 & 0.
|
| 14 |
\bottomrule
|
| 15 |
\end{tabular}
|
|
|
|
| 1 |
% Auto-generated by scripts/build_ctt_proxy_comparison.py
|
| 2 |
+
\begin{tabular}{lrrrrrrrrrrc}
|
| 3 |
\toprule
|
| 4 |
+
Method & Seeds & Rows & PPTC@0.20 & PPTC@0.40 & Neg@0.20 & Neg@0.40 & Pos<Neg & MeanPos & MeanNeg & Collapse & Gate \\
|
| 5 |
\midrule
|
| 6 |
+
local\_atlas & 1 & 69 & 0.4058 & 0.6812 & 0.0368 & 0.2051 & 0.5998 & 0.7203 & 0.6789 & 0.0661 & baseline \\
|
| 7 |
+
task\_memory & 1 & 69 & 0.3188 & 0.5362 & 0.0175 & 0.1109 & 0.5853 & 0.9616 & 0.9219 & 0.0626 & baseline \\
|
| 8 |
+
ctt\_residual\_full & 3 & 207 & 0.1981 & 0.6087 & 0.0296 & 0.2899 & 0.7352 & 0.4509 & 0.5292 & 0.0681 & pass \\
|
| 9 |
+
ctt\_residual\_base\_context & 1 & 69 & 0.1739 & 0.6232 & 0.0182 & 0.2860 & 0.7577 & 0.4429 & 0.5275 & 0.0681 & pass \\
|
| 10 |
+
ctt\_residual\_base\_context\_obs & 3 & 207 & 0.2464 & 0.6425 & 0.0343 & 0.3020 & 0.7717 & 0.4347 & 0.5131 & 0.0681 & pass \\
|
| 11 |
+
ctt\_residual\_base\_context\_obj & 3 & 207 & 0.2271 & 0.6425 & 0.0380 & 0.3094 & 0.7307 & 0.4340 & 0.5216 & 0.0683 & pass \\
|
| 12 |
+
ctt\_residual\_base\_context\_obs\_obj & 3 & 207 & 0.2077 & 0.6425 & 0.0285 & 0.2934 & 0.7277 & 0.4429 & 0.5334 & 0.0683 & pass \\
|
| 13 |
+
ctt\_gated\_residual\_full & 3 & 207 & 0.2319 & 0.6135 & 0.0527 & 0.3392 & 0.7248 & 0.4337 & 0.5050 & 0.0681 & fail \\
|
| 14 |
\bottomrule
|
| 15 |
\end{tabular}
|
workspace/runs/paper_ctt_audit/command.txt
CHANGED
|
@@ -1 +1 @@
|
|
| 1 |
-
python scripts/audit_ctt_paper_artifacts.py
|
|
|
|
| 1 |
+
python scripts/audit_ctt_paper_artifacts.py
|
workspace/runs/summary_ctt.csv
CHANGED
|
@@ -206,6 +206,10 @@ CTT residual test dominance tau0,runs/ctt_base_context_obs_dominance_val_to_test
|
|
| 206 |
"CTT residual test learned dominance (context, utility_margin)",runs/ctt_base_context_obs_learned_dominance_context_tanh_val_to_test,yes,measured dominance K=8 coverage=0.3403 fallback=0.6597 target=utility_margin features=context,"fail:selected<47.45,oracle<50,support_gap>7,selector_gap>3,OutcomePTR<=V0oracle",0.3333,0.3125,0.3819,0.7292,0.6913,0.3366,0.3681,0.1806,0.4167,n/a,n/a,n/a,n/a,n/a,3,see run
|
| 207 |
"CTT residual test learned dominance (context, utility_margin)",runs/ctt_base_context_obs_learned_dominance_context_train_to_test,yes,measured dominance K=8 coverage=0.3403 fallback=0.6597 target=utility_margin features=context,"fail:selected<47.45,support_gap>7,selector_gap>3",0.2917,0.2986,0.5139,0.7292,0.4885,0.4836,0.2639,0.2639,0.5347,n/a,n/a,n/a,n/a,n/a,3,see run
|
| 208 |
"CTT residual test learned dominance (context, utility_margin)",runs/ctt_base_context_obs_learned_dominance_context_val_to_test,yes,measured dominance K=8 coverage=0.5069 fallback=0.4931 target=utility_margin features=context,"fail:selected<47.45,support_gap>7,selector_gap>3",0.2917,0.3264,0.5139,0.7292,0.4885,0.4355,0.2639,0.2431,0.5347,n/a,n/a,n/a,n/a,n/a,3,see run
|
|
|
|
|
|
|
|
|
|
|
|
|
| 209 |
"CTT residual test learned dominance (source_evidence, utility_margin)",runs/ctt_base_context_obs_learned_dominance_source_envclip_k16_train_to_test,yes,measured dominance K=16 coverage=0.5903 fallback=0.4097 target=utility_margin features=source_evidence,"fail:selected<47.45,support_gap>7,selector_gap>3",0.2917,0.3056,0.5694,0.7292,0.3761,0.5187,0.2014,0.2847,0.5486,n/a,n/a,n/a,n/a,n/a,3,see run
|
| 210 |
"CTT residual test learned dominance (source_evidence, utility_margin)",runs/ctt_base_context_obs_learned_dominance_source_envclip_train_to_test,yes,measured dominance K=8 coverage=0.2361 fallback=0.7639 target=utility_margin features=source_evidence,"fail:selected<47.45,oracle<50,support_gap>7,selector_gap>3",0.2917,0.3333,0.4792,0.7292,0.5381,0.3674,0.2917,0.2014,0.5069,n/a,n/a,n/a,n/a,n/a,3,see run
|
| 211 |
"CTT residual test learned dominance (source_evidence, success)",runs/ctt_base_context_obs_learned_dominance_source_success_envclip_k16_train_to_test,yes,measured dominance K=16 coverage=0.5139 fallback=0.4861 target=success features=source_evidence,"fail:selected<47.45,support_gap>7,selector_gap>3",0.2917,0.3056,0.5694,0.7292,0.3761,0.4804,0.2014,0.2708,0.5486,n/a,n/a,n/a,n/a,n/a,3,see run
|
|
|
|
| 206 |
"CTT residual test learned dominance (context, utility_margin)",runs/ctt_base_context_obs_learned_dominance_context_tanh_val_to_test,yes,measured dominance K=8 coverage=0.3403 fallback=0.6597 target=utility_margin features=context,"fail:selected<47.45,oracle<50,support_gap>7,selector_gap>3,OutcomePTR<=V0oracle",0.3333,0.3125,0.3819,0.7292,0.6913,0.3366,0.3681,0.1806,0.4167,n/a,n/a,n/a,n/a,n/a,3,see run
|
| 207 |
"CTT residual test learned dominance (context, utility_margin)",runs/ctt_base_context_obs_learned_dominance_context_train_to_test,yes,measured dominance K=8 coverage=0.3403 fallback=0.6597 target=utility_margin features=context,"fail:selected<47.45,support_gap>7,selector_gap>3",0.2917,0.2986,0.5139,0.7292,0.4885,0.4836,0.2639,0.2639,0.5347,n/a,n/a,n/a,n/a,n/a,3,see run
|
| 208 |
"CTT residual test learned dominance (context, utility_margin)",runs/ctt_base_context_obs_learned_dominance_context_val_to_test,yes,measured dominance K=8 coverage=0.5069 fallback=0.4931 target=utility_margin features=context,"fail:selected<47.45,support_gap>7,selector_gap>3",0.2917,0.3264,0.5139,0.7292,0.4885,0.4355,0.2639,0.2431,0.5347,n/a,n/a,n/a,n/a,n/a,3,see run
|
| 209 |
+
"CTT residual test learned dominance (score_chart_compat, success_weighted_margin)",runs/ctt_base_context_obs_learned_dominance_score_chartcompat_successbonus2_task_envclip_k16_train_to_test,yes,measured dominance K=16 coverage=0.5486 fallback=0.4514 target=success_weighted_margin features=score_chart_compat,"fail:selected<47.45,support_gap>7,selector_gap>3",0.2917,0.3194,0.5694,0.7292,0.3761,0.4580,0.2014,0.2500,0.5486,n/a,n/a,n/a,n/a,0.0302,3,see run
|
| 210 |
+
"CTT residual test learned dominance (score_chart_compat, utility_margin)",runs/ctt_base_context_obs_learned_dominance_score_chartcompat_utility_task_envclip_k16_train_to_test,yes,measured dominance K=16 coverage=0.6389 fallback=0.3611 target=utility_margin features=score_chart_compat,"fail:selected<47.45,support_gap>7,selector_gap>3",0.2917,0.3264,0.5694,0.7292,0.3761,0.4654,0.2014,0.2500,0.5486,n/a,n/a,n/a,n/a,0.0221,3,see run
|
| 211 |
+
"CTT residual test learned dominance (score_context_chart_compat, success_weighted_margin)",runs/ctt_base_context_obs_learned_dominance_score_context_chartcompat_successbonus2_task_envclip_k16_train_to_test,yes,measured dominance K=16 coverage=0.6111 fallback=0.3889 target=success_weighted_margin features=score_context_chart_compat,"fail:selected<47.45,support_gap>7,selector_gap>3",0.2917,0.3403,0.5694,0.7292,0.3761,0.4248,0.2014,0.2292,0.5486,n/a,n/a,n/a,n/a,0.0365,3,see run
|
| 212 |
+
"CTT residual test learned dominance (score_context_chart_compat, utility_margin)",runs/ctt_base_context_obs_learned_dominance_score_context_chartcompat_utility_task_envclip_k16_train_to_test,yes,measured dominance K=16 coverage=0.6458 fallback=0.3542 target=utility_margin features=score_context_chart_compat,"fail:selected<47.45,support_gap>7,selector_gap>3",0.2917,0.3264,0.5694,0.7292,0.3761,0.4655,0.2014,0.2500,0.5486,n/a,n/a,n/a,n/a,0.0188,3,see run
|
| 213 |
"CTT residual test learned dominance (source_evidence, utility_margin)",runs/ctt_base_context_obs_learned_dominance_source_envclip_k16_train_to_test,yes,measured dominance K=16 coverage=0.5903 fallback=0.4097 target=utility_margin features=source_evidence,"fail:selected<47.45,support_gap>7,selector_gap>3",0.2917,0.3056,0.5694,0.7292,0.3761,0.5187,0.2014,0.2847,0.5486,n/a,n/a,n/a,n/a,n/a,3,see run
|
| 214 |
"CTT residual test learned dominance (source_evidence, utility_margin)",runs/ctt_base_context_obs_learned_dominance_source_envclip_train_to_test,yes,measured dominance K=8 coverage=0.2361 fallback=0.7639 target=utility_margin features=source_evidence,"fail:selected<47.45,oracle<50,support_gap>7,selector_gap>3",0.2917,0.3333,0.4792,0.7292,0.5381,0.3674,0.2917,0.2014,0.5069,n/a,n/a,n/a,n/a,n/a,3,see run
|
| 215 |
"CTT residual test learned dominance (source_evidence, success)",runs/ctt_base_context_obs_learned_dominance_source_success_envclip_k16_train_to_test,yes,measured dominance K=16 coverage=0.5139 fallback=0.4861 target=success features=source_evidence,"fail:selected<47.45,support_gap>7,selector_gap>3",0.2917,0.3056,0.5694,0.7292,0.3761,0.4804,0.2014,0.2708,0.5486,n/a,n/a,n/a,n/a,n/a,3,see run
|
workspace/scripts/build_ctt_proxy_comparison.py
CHANGED
|
@@ -43,6 +43,11 @@ def main(argv: list[str] | None = None) -> int:
|
|
| 43 |
parser = argparse.ArgumentParser(description="Build CTT validation proxy comparison table.")
|
| 44 |
parser.add_argument("--out-dir", type=Path, default=Path("runs/ctt_val_proxy_comparison"))
|
| 45 |
parser.add_argument("--safety-slack", type=float, default=0.01)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 46 |
args = parser.parse_args(argv)
|
| 47 |
|
| 48 |
rows = [
|
|
@@ -74,6 +79,7 @@ def main(argv: list[str] | None = None) -> int:
|
|
| 74 |
out_dir.mkdir(parents=True, exist_ok=True)
|
| 75 |
payload = {
|
| 76 |
"report_type": "ctt_val_proxy_comparison",
|
|
|
|
| 77 |
"baseline": "local_atlas",
|
| 78 |
"safety_slack": args.safety_slack,
|
| 79 |
"rows": rows,
|
|
@@ -81,10 +87,21 @@ def main(argv: list[str] | None = None) -> int:
|
|
| 81 |
"split_hash": _first(rows, "split_hash"),
|
| 82 |
}
|
| 83 |
(out_dir / "metrics.json").write_text(json.dumps(payload, indent=2, sort_keys=True) + "\n")
|
| 84 |
-
(out_dir / "metrics_by_task.json").write_text(
|
| 85 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 86 |
(out_dir / "table.tex").write_text(_table(rows) + "\n")
|
| 87 |
-
(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 88 |
(out_dir / "train.log").write_text("comparison artifact; no training\n")
|
| 89 |
(out_dir / "eval.log").write_text(
|
| 90 |
"\n".join(f"{row['method']}: {row['run_path']}" for row in rows) + "\n"
|
|
@@ -113,7 +130,10 @@ def _row(method: str, run_dirs: list[Path]) -> dict[str, Any]:
|
|
| 113 |
"negative_near_0p20": _mean_across(summaries, "negative_near_at_16_thr_0p20"),
|
| 114 |
"negative_near_0p40": _mean_across(summaries, "negative_near_at_16_thr_0p40"),
|
| 115 |
"mean_positive_distance": _mean_across(summaries, "mean_positive_distance_at_16"),
|
|
|
|
|
|
|
| 116 |
"candidate_diversity": _mean_across(summaries, "candidate_diversity_at_16"),
|
|
|
|
| 117 |
"proxy_support_distance": _mean_across(summaries, "proxy_support_distance_at_16"),
|
| 118 |
"data_hash": payloads[0].get("data_hash"),
|
| 119 |
"split_hash": payloads[0].get("target_split_hash", payloads[0].get("split_hash")),
|
|
@@ -132,17 +152,19 @@ def _mean_across(summaries: list[dict[str, Any]], key: str) -> float:
|
|
| 132 |
def _table(rows: list[dict[str, Any]]) -> str:
|
| 133 |
lines = [
|
| 134 |
"% Auto-generated by scripts/build_ctt_proxy_comparison.py",
|
| 135 |
-
"\\begin{tabular}{
|
| 136 |
"\\toprule",
|
| 137 |
-
"Method & Seeds & Rows & PPTC@0.20 & PPTC@0.40 & Neg@0.20 &
|
| 138 |
"\\midrule",
|
| 139 |
]
|
| 140 |
for row in rows:
|
| 141 |
lines.append(
|
| 142 |
f"{_latex_escape(row['method'])} & {row['train_seeds']} & {row['num_rows']} & "
|
| 143 |
f"{_fmt(row['pptc_0p20'])} & {_fmt(row['pptc_0p40'])} & "
|
| 144 |
-
f"{_fmt(row['negative_near_0p20'])} & {_fmt(row['
|
| 145 |
-
f"{_fmt(row['
|
|
|
|
|
|
|
| 146 |
)
|
| 147 |
lines.extend(["\\bottomrule", "\\end{tabular}"])
|
| 148 |
return "\n".join(lines)
|
|
@@ -154,15 +176,17 @@ def _report(rows: list[dict[str, Any]], safety_slack: float) -> str:
|
|
| 154 |
"",
|
| 155 |
f"Safety slack over local-atlas NegativeNear@0.20: `{safety_slack:.4f}`",
|
| 156 |
"",
|
| 157 |
-
"| Method | Seeds | Rows | PPTC@0.20 | PPTC@0.40 | Neg@0.20 |
|
| 158 |
-
"| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | --- | --- |",
|
| 159 |
]
|
| 160 |
for row in rows:
|
| 161 |
lines.append(
|
| 162 |
f"| {row['method']} | {row['train_seeds']} | {row['num_rows']} | "
|
| 163 |
f"{_fmt(row['pptc_0p20'])} | "
|
| 164 |
f"{_fmt(row['pptc_0p40'])} | {_fmt(row['negative_near_0p20'])} | "
|
| 165 |
-
f"{_fmt(row['
|
|
|
|
|
|
|
| 166 |
f"{_gate(row)} | `{row['run_path']}` |"
|
| 167 |
)
|
| 168 |
lines.append("")
|
|
@@ -170,6 +194,66 @@ def _report(rows: list[dict[str, Any]], safety_slack: float) -> str:
|
|
| 170 |
return "\n".join(lines)
|
| 171 |
|
| 172 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 173 |
def _fmt(value: Any) -> str:
|
| 174 |
if not isinstance(value, (int, float)) or not math.isfinite(float(value)):
|
| 175 |
return "n/a"
|
|
|
|
| 43 |
parser = argparse.ArgumentParser(description="Build CTT validation proxy comparison table.")
|
| 44 |
parser.add_argument("--out-dir", type=Path, default=Path("runs/ctt_val_proxy_comparison"))
|
| 45 |
parser.add_argument("--safety-slack", type=float, default=0.01)
|
| 46 |
+
parser.add_argument(
|
| 47 |
+
"--no-markdown-report",
|
| 48 |
+
action="store_true",
|
| 49 |
+
help="Do not write report.md; the persistent prose summary lives in README.md.",
|
| 50 |
+
)
|
| 51 |
args = parser.parse_args(argv)
|
| 52 |
|
| 53 |
rows = [
|
|
|
|
| 79 |
out_dir.mkdir(parents=True, exist_ok=True)
|
| 80 |
payload = {
|
| 81 |
"report_type": "ctt_val_proxy_comparison",
|
| 82 |
+
"schema_version": 2,
|
| 83 |
"baseline": "local_atlas",
|
| 84 |
"safety_slack": args.safety_slack,
|
| 85 |
"rows": rows,
|
|
|
|
| 87 |
"split_hash": _first(rows, "split_hash"),
|
| 88 |
}
|
| 89 |
(out_dir / "metrics.json").write_text(json.dumps(payload, indent=2, sort_keys=True) + "\n")
|
| 90 |
+
(out_dir / "metrics_by_task.json").write_text(
|
| 91 |
+
json.dumps(_grouped_metrics(DEFAULT_RUNS, group_key="task_id"), indent=2, sort_keys=True)
|
| 92 |
+
+ "\n"
|
| 93 |
+
)
|
| 94 |
+
(out_dir / "metrics_by_seed.json").write_text(
|
| 95 |
+
json.dumps(_grouped_metrics(DEFAULT_RUNS, group_key="seed"), indent=2, sort_keys=True)
|
| 96 |
+
+ "\n"
|
| 97 |
+
)
|
| 98 |
(out_dir / "table.tex").write_text(_table(rows) + "\n")
|
| 99 |
+
_write_report_artifact(
|
| 100 |
+
out_dir,
|
| 101 |
+
rows,
|
| 102 |
+
safety_slack=args.safety_slack,
|
| 103 |
+
no_markdown_report=args.no_markdown_report,
|
| 104 |
+
)
|
| 105 |
(out_dir / "train.log").write_text("comparison artifact; no training\n")
|
| 106 |
(out_dir / "eval.log").write_text(
|
| 107 |
"\n".join(f"{row['method']}: {row['run_path']}" for row in rows) + "\n"
|
|
|
|
| 130 |
"negative_near_0p20": _mean_across(summaries, "negative_near_at_16_thr_0p20"),
|
| 131 |
"negative_near_0p40": _mean_across(summaries, "negative_near_at_16_thr_0p40"),
|
| 132 |
"mean_positive_distance": _mean_across(summaries, "mean_positive_distance_at_16"),
|
| 133 |
+
"mean_negative_distance": _mean_across(summaries, "mean_negative_distance_at_16"),
|
| 134 |
+
"pos_closer_than_neg": _mean_across(summaries, "pos_closer_than_neg_at_16"),
|
| 135 |
"candidate_diversity": _mean_across(summaries, "candidate_diversity_at_16"),
|
| 136 |
+
"collapse_rate": _mean_across(summaries, "collapse_rate_at_16"),
|
| 137 |
"proxy_support_distance": _mean_across(summaries, "proxy_support_distance_at_16"),
|
| 138 |
"data_hash": payloads[0].get("data_hash"),
|
| 139 |
"split_hash": payloads[0].get("target_split_hash", payloads[0].get("split_hash")),
|
|
|
|
| 152 |
def _table(rows: list[dict[str, Any]]) -> str:
|
| 153 |
lines = [
|
| 154 |
"% Auto-generated by scripts/build_ctt_proxy_comparison.py",
|
| 155 |
+
"\\begin{tabular}{lrrrrrrrrrrc}",
|
| 156 |
"\\toprule",
|
| 157 |
+
"Method & Seeds & Rows & PPTC@0.20 & PPTC@0.40 & Neg@0.20 & Neg@0.40 & Pos<Neg & MeanPos & MeanNeg & Collapse & Gate \\\\",
|
| 158 |
"\\midrule",
|
| 159 |
]
|
| 160 |
for row in rows:
|
| 161 |
lines.append(
|
| 162 |
f"{_latex_escape(row['method'])} & {row['train_seeds']} & {row['num_rows']} & "
|
| 163 |
f"{_fmt(row['pptc_0p20'])} & {_fmt(row['pptc_0p40'])} & "
|
| 164 |
+
f"{_fmt(row['negative_near_0p20'])} & {_fmt(row['negative_near_0p40'])} & "
|
| 165 |
+
f"{_fmt(row['pos_closer_than_neg'])} & {_fmt(row['mean_positive_distance'])} & "
|
| 166 |
+
f"{_fmt(row['mean_negative_distance'])} & {_fmt(row['collapse_rate'])} & "
|
| 167 |
+
f"{_gate(row)} \\\\"
|
| 168 |
)
|
| 169 |
lines.extend(["\\bottomrule", "\\end{tabular}"])
|
| 170 |
return "\n".join(lines)
|
|
|
|
| 176 |
"",
|
| 177 |
f"Safety slack over local-atlas NegativeNear@0.20: `{safety_slack:.4f}`",
|
| 178 |
"",
|
| 179 |
+
"| Method | Seeds | Rows | PPTC@0.20 | PPTC@0.40 | Neg@0.20 | Neg@0.40 | Pos<Neg | MeanPos | MeanNeg | Diversity | Collapse | Gate | Run |",
|
| 180 |
+
"| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | --- | --- |",
|
| 181 |
]
|
| 182 |
for row in rows:
|
| 183 |
lines.append(
|
| 184 |
f"| {row['method']} | {row['train_seeds']} | {row['num_rows']} | "
|
| 185 |
f"{_fmt(row['pptc_0p20'])} | "
|
| 186 |
f"{_fmt(row['pptc_0p40'])} | {_fmt(row['negative_near_0p20'])} | "
|
| 187 |
+
f"{_fmt(row['negative_near_0p40'])} | {_fmt(row['pos_closer_than_neg'])} | "
|
| 188 |
+
f"{_fmt(row['mean_positive_distance'])} | {_fmt(row['mean_negative_distance'])} | "
|
| 189 |
+
f"{_fmt(row['candidate_diversity'])} | {_fmt(row['collapse_rate'])} | "
|
| 190 |
f"{_gate(row)} | `{row['run_path']}` |"
|
| 191 |
)
|
| 192 |
lines.append("")
|
|
|
|
| 194 |
return "\n".join(lines)
|
| 195 |
|
| 196 |
|
| 197 |
+
def _write_report_artifact(
|
| 198 |
+
out_dir: Path,
|
| 199 |
+
rows: list[dict[str, Any]],
|
| 200 |
+
*,
|
| 201 |
+
safety_slack: float,
|
| 202 |
+
no_markdown_report: bool,
|
| 203 |
+
) -> None:
|
| 204 |
+
report_path = out_dir / "report.md"
|
| 205 |
+
if no_markdown_report:
|
| 206 |
+
if report_path.exists():
|
| 207 |
+
report_path.unlink()
|
| 208 |
+
return
|
| 209 |
+
report_path.write_text(_report(rows, safety_slack) + "\n")
|
| 210 |
+
|
| 211 |
+
|
| 212 |
+
def _grouped_metrics(
|
| 213 |
+
run_specs: list[tuple[str, list[Path]]],
|
| 214 |
+
*,
|
| 215 |
+
group_key: str,
|
| 216 |
+
) -> dict[str, dict[str, dict[str, float]]]:
|
| 217 |
+
output: dict[str, dict[str, dict[str, float]]] = {}
|
| 218 |
+
for method, run_dirs in run_specs:
|
| 219 |
+
if not run_dirs or not all((run_dir / "metrics.json").exists() for run_dir in run_dirs):
|
| 220 |
+
continue
|
| 221 |
+
rows: list[dict[str, Any]] = []
|
| 222 |
+
for run_dir in run_dirs:
|
| 223 |
+
payload = json.loads((run_dir / "metrics.json").read_text())
|
| 224 |
+
rows.extend(payload.get("rows", []))
|
| 225 |
+
if not rows:
|
| 226 |
+
continue
|
| 227 |
+
method_groups: dict[str, dict[str, list[float]]] = {}
|
| 228 |
+
for row in rows:
|
| 229 |
+
group = str(row.get(group_key, "unknown"))
|
| 230 |
+
metrics = method_groups.setdefault(group, {})
|
| 231 |
+
for source_key, target_key in _row_metric_key_map().items():
|
| 232 |
+
value = row.get(source_key)
|
| 233 |
+
if isinstance(value, (int, float)) and math.isfinite(float(value)):
|
| 234 |
+
metrics.setdefault(target_key, []).append(float(value))
|
| 235 |
+
output[method] = {
|
| 236 |
+
group: {name: sum(values) / len(values) for name, values in sorted(metrics.items())}
|
| 237 |
+
for group, metrics in sorted(method_groups.items())
|
| 238 |
+
}
|
| 239 |
+
return output
|
| 240 |
+
|
| 241 |
+
|
| 242 |
+
def _row_metric_key_map() -> dict[str, str]:
|
| 243 |
+
return {
|
| 244 |
+
"pptc_at_16_thr_0p20": "pptc_0p20",
|
| 245 |
+
"pptc_at_16_thr_0p40": "pptc_0p40",
|
| 246 |
+
"negative_near_at_16_thr_0p20": "negative_near_0p20",
|
| 247 |
+
"negative_near_at_16_thr_0p40": "negative_near_0p40",
|
| 248 |
+
"mean_positive_distance_at_16": "mean_positive_distance",
|
| 249 |
+
"mean_negative_distance_at_16": "mean_negative_distance",
|
| 250 |
+
"pos_closer_than_neg_at_16": "pos_closer_than_neg",
|
| 251 |
+
"candidate_diversity_at_16": "candidate_diversity",
|
| 252 |
+
"collapse_rate_at_16": "collapse_rate",
|
| 253 |
+
"proxy_support_distance_at_16": "proxy_support_distance",
|
| 254 |
+
}
|
| 255 |
+
|
| 256 |
+
|
| 257 |
def _fmt(value: Any) -> str:
|
| 258 |
if not isinstance(value, (int, float)) or not math.isfinite(float(value)):
|
| 259 |
return "n/a"
|
workspace/scripts/eval_ctt_proxy.py
CHANGED
|
@@ -39,6 +39,11 @@ def main(argv: list[str] | None = None) -> int:
|
|
| 39 |
parser.add_argument("--thresholds", default="0.20,0.40")
|
| 40 |
parser.add_argument("--max-target-charts", type=int, default=64)
|
| 41 |
parser.add_argument("--neighbors", type=int, default=8)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 42 |
args = parser.parse_args(argv)
|
| 43 |
|
| 44 |
thresholds = [float(item) for item in args.thresholds.split(",") if item.strip()]
|
|
@@ -159,7 +164,7 @@ def main(argv: list[str] | None = None) -> int:
|
|
| 159 |
(out_dir / "eval.log").write_text("\n".join(log_lines) + "\n")
|
| 160 |
(out_dir / "train.log").write_text("see checkpoint run\n")
|
| 161 |
(out_dir / "table.tex").write_text(_table(summary) + "\n")
|
| 162 |
-
(out_dir
|
| 163 |
print(json.dumps({"out_dir": str(out_dir), "num_rows": len(rows)}, indent=2))
|
| 164 |
return 0
|
| 165 |
|
|
@@ -271,5 +276,20 @@ def _report(summary: dict[str, Any], k: int) -> str:
|
|
| 271 |
return "\n".join(lines)
|
| 272 |
|
| 273 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 274 |
if __name__ == "__main__":
|
| 275 |
raise SystemExit(main())
|
|
|
|
| 39 |
parser.add_argument("--thresholds", default="0.20,0.40")
|
| 40 |
parser.add_argument("--max-target-charts", type=int, default=64)
|
| 41 |
parser.add_argument("--neighbors", type=int, default=8)
|
| 42 |
+
parser.add_argument(
|
| 43 |
+
"--no-markdown-report",
|
| 44 |
+
action="store_true",
|
| 45 |
+
help="Do not write report.md; the persistent prose summary lives in README.md.",
|
| 46 |
+
)
|
| 47 |
args = parser.parse_args(argv)
|
| 48 |
|
| 49 |
thresholds = [float(item) for item in args.thresholds.split(",") if item.strip()]
|
|
|
|
| 164 |
(out_dir / "eval.log").write_text("\n".join(log_lines) + "\n")
|
| 165 |
(out_dir / "train.log").write_text("see checkpoint run\n")
|
| 166 |
(out_dir / "table.tex").write_text(_table(summary) + "\n")
|
| 167 |
+
_write_report_artifact(out_dir, summary, k=args.k, no_markdown_report=args.no_markdown_report)
|
| 168 |
print(json.dumps({"out_dir": str(out_dir), "num_rows": len(rows)}, indent=2))
|
| 169 |
return 0
|
| 170 |
|
|
|
|
| 276 |
return "\n".join(lines)
|
| 277 |
|
| 278 |
|
| 279 |
+
def _write_report_artifact(
|
| 280 |
+
out_dir: Path,
|
| 281 |
+
summary: dict[str, Any],
|
| 282 |
+
*,
|
| 283 |
+
k: int,
|
| 284 |
+
no_markdown_report: bool,
|
| 285 |
+
) -> None:
|
| 286 |
+
report_path = out_dir / "report.md"
|
| 287 |
+
if no_markdown_report:
|
| 288 |
+
if report_path.exists():
|
| 289 |
+
report_path.unlink()
|
| 290 |
+
return
|
| 291 |
+
report_path.write_text(_report(summary, k) + "\n")
|
| 292 |
+
|
| 293 |
+
|
| 294 |
if __name__ == "__main__":
|
| 295 |
raise SystemExit(main())
|
workspace/scripts/eval_learned_dominance_selector.py
CHANGED
|
@@ -82,17 +82,30 @@ CHART_COMPAT_NAMES = [
|
|
| 82 |
"target_obj_norm",
|
| 83 |
"source_obj_norm",
|
| 84 |
]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 85 |
FEATURE_SET_CHOICES = (
|
| 86 |
"basic",
|
| 87 |
"tangent",
|
| 88 |
"context",
|
| 89 |
"context_tangent",
|
|
|
|
| 90 |
"source_evidence",
|
| 91 |
"tangent_source_evidence",
|
| 92 |
"context_source_evidence",
|
| 93 |
"context_tangent_source_evidence",
|
| 94 |
"chart_compat",
|
| 95 |
"chart_tangent_compat",
|
|
|
|
|
|
|
| 96 |
"chart_source_compat",
|
| 97 |
"chart_tangent_source_compat",
|
| 98 |
)
|
|
@@ -149,6 +162,15 @@ def main(argv: list[str] | None = None) -> int:
|
|
| 149 |
"candidate success to prioritize the lexicographic success/progress utility."
|
| 150 |
),
|
| 151 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 152 |
parser.add_argument(
|
| 153 |
"--threshold-scope",
|
| 154 |
choices=("global", "task"),
|
|
@@ -175,6 +197,11 @@ def main(argv: list[str] | None = None) -> int:
|
|
| 175 |
help="Relative weight for pairwise rows when --fit-objective=hybrid_pairwise.",
|
| 176 |
)
|
| 177 |
parser.add_argument("--bootstrap-samples", type=int, default=1000)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 178 |
args = parser.parse_args(argv)
|
| 179 |
|
| 180 |
if args.k <= 0:
|
|
@@ -184,6 +211,8 @@ def main(argv: list[str] | None = None) -> int:
|
|
| 184 |
parser.error("--ridge-lambdas must contain non-negative values")
|
| 185 |
if args.pairwise_weight <= 0.0:
|
| 186 |
parser.error("--pairwise-weight must be positive")
|
|
|
|
|
|
|
| 187 |
|
| 188 |
out_dir = args.out_dir
|
| 189 |
out_dir.mkdir(parents=True, exist_ok=True)
|
|
@@ -236,6 +265,7 @@ def main(argv: list[str] | None = None) -> int:
|
|
| 236 |
selector_target_charts=selector_calibration_charts,
|
| 237 |
selector_source_charts=selector_source_charts,
|
| 238 |
selector_chart_feature_mode=args.selector_chart_feature_mode,
|
|
|
|
| 239 |
)
|
| 240 |
eval_dataset = _candidate_dataset(
|
| 241 |
eval_rows,
|
|
@@ -248,6 +278,7 @@ def main(argv: list[str] | None = None) -> int:
|
|
| 248 |
selector_target_charts=selector_eval_charts,
|
| 249 |
selector_source_charts=selector_source_charts,
|
| 250 |
selector_chart_feature_mode=args.selector_chart_feature_mode,
|
|
|
|
| 251 |
)
|
| 252 |
best = _fit_select_ridge(
|
| 253 |
calibration_dataset,
|
|
@@ -307,6 +338,7 @@ def main(argv: list[str] | None = None) -> int:
|
|
| 307 |
args.selector_chart_feature_mode if _uses_chart_compat(args.feature_set) else None
|
| 308 |
),
|
| 309 |
"target": args.target,
|
|
|
|
| 310 |
"fit_objective": args.fit_objective,
|
| 311 |
"pairwise_weight": args.pairwise_weight,
|
| 312 |
"threshold_scope": args.threshold_scope,
|
|
@@ -360,7 +392,7 @@ def main(argv: list[str] | None = None) -> int:
|
|
| 360 |
+ "\n"
|
| 361 |
)
|
| 362 |
(out_dir / "table.tex").write_text(_table(metrics) + "\n")
|
| 363 |
-
(out_dir
|
| 364 |
(out_dir / "train.log").write_text(
|
| 365 |
"trained ridge dominance calibrator on calibration measured rows only\n"
|
| 366 |
f"fit_objective={args.fit_objective}\n"
|
|
@@ -399,6 +431,7 @@ def _candidate_dataset(
|
|
| 399 |
selector_target_charts: dict[str, Any] | None = None,
|
| 400 |
selector_source_charts: dict[str, Any] | None = None,
|
| 401 |
selector_chart_feature_mode: str = "base_context_obs_obj",
|
|
|
|
| 402 |
) -> dict[str, Any]:
|
| 403 |
source_evidence = source_evidence or {}
|
| 404 |
selector_target_charts = selector_target_charts or {}
|
|
@@ -422,6 +455,7 @@ def _candidate_dataset(
|
|
| 422 |
continue
|
| 423 |
score_mean = sum(scores) / len(scores)
|
| 424 |
score_std = math.sqrt(sum((score - score_mean) ** 2 for score in scores) / len(scores)) + 1.0e-6
|
|
|
|
| 425 |
for candidate_index, score in enumerate(scores):
|
| 426 |
source_chart_id = str(source_chart_ids[candidate_index]) if candidate_index < len(source_chart_ids) else ""
|
| 427 |
tangent = np.asarray(
|
|
@@ -454,6 +488,7 @@ def _candidate_dataset(
|
|
| 454 |
selector_source_charts.get(source_chart_id),
|
| 455 |
chart_feature_mode=selector_chart_feature_mode,
|
| 456 |
),
|
|
|
|
| 457 |
num_candidates=len(scores),
|
| 458 |
feature_set=feature_set,
|
| 459 |
)
|
|
@@ -472,6 +507,7 @@ def _candidate_dataset(
|
|
| 472 |
target,
|
| 473 |
utility_margin=target_margin,
|
| 474 |
candidate_success=successes[candidate_index],
|
|
|
|
| 475 |
),
|
| 476 |
"measured_utility_margin": target_margin,
|
| 477 |
"candidate_utility": utilities[candidate_index],
|
|
@@ -508,6 +544,8 @@ def _feature_names(feature_set: str) -> list[str]:
|
|
| 508 |
*[f"abs_tangent_{index:02d}" for index in range(21)],
|
| 509 |
]
|
| 510 |
names = list(BASIC_FEATURE_NAMES)
|
|
|
|
|
|
|
| 511 |
if _uses_context(feature_set):
|
| 512 |
names.extend(context_names)
|
| 513 |
if _uses_tangent(feature_set):
|
|
@@ -535,6 +573,7 @@ def _candidate_feature(
|
|
| 535 |
context: dict[str, Any] | None = None,
|
| 536 |
source_evidence: np.ndarray | None = None,
|
| 537 |
chart_compat: np.ndarray | None = None,
|
|
|
|
| 538 |
) -> np.ndarray:
|
| 539 |
tangent = np.asarray(tangent, dtype=float).reshape(-1)
|
| 540 |
if tangent.size < 21:
|
|
@@ -561,6 +600,10 @@ def _candidate_feature(
|
|
| 561 |
if feature_set == "basic":
|
| 562 |
return basic
|
| 563 |
parts = [basic]
|
|
|
|
|
|
|
|
|
|
|
|
|
| 564 |
if _uses_context(feature_set):
|
| 565 |
parts.append(_context_feature(context or {}))
|
| 566 |
if _uses_tangent(feature_set):
|
|
@@ -584,6 +627,16 @@ def _uses_context(feature_set: str) -> bool:
|
|
| 584 |
"context_tangent",
|
| 585 |
"context_source_evidence",
|
| 586 |
"context_tangent_source_evidence",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 587 |
}
|
| 588 |
|
| 589 |
|
|
@@ -613,6 +666,8 @@ def _uses_chart_compat(feature_set: str) -> bool:
|
|
| 613 |
return feature_set in {
|
| 614 |
"chart_compat",
|
| 615 |
"chart_tangent_compat",
|
|
|
|
|
|
|
| 616 |
"chart_source_compat",
|
| 617 |
"chart_tangent_source_compat",
|
| 618 |
}
|
|
@@ -864,6 +919,44 @@ def _min_rms_distance(tangent: np.ndarray, candidates: np.ndarray) -> float:
|
|
| 864 |
return float(np.sqrt(np.mean(diff * diff, axis=1)).min())
|
| 865 |
|
| 866 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 867 |
def _context_feature(context: dict[str, Any]) -> np.ndarray:
|
| 868 |
target_task = str(context.get("target_task_id", ""))
|
| 869 |
source_task = str(context.get("source_task_id", ""))
|
|
@@ -891,13 +984,14 @@ def _target_value(
|
|
| 891 |
*,
|
| 892 |
utility_margin: float,
|
| 893 |
candidate_success: float,
|
|
|
|
| 894 |
) -> float:
|
| 895 |
if target == "utility_margin":
|
| 896 |
return float(utility_margin)
|
| 897 |
if target == "success":
|
| 898 |
return float(candidate_success)
|
| 899 |
if target == "success_weighted_margin":
|
| 900 |
-
return float(utility_margin) + float(candidate_success)
|
| 901 |
raise ValueError(f"unknown target: {target}")
|
| 902 |
|
| 903 |
|
|
@@ -1446,6 +1540,20 @@ def _report(metrics: dict[str, Any]) -> str:
|
|
| 1446 |
return "\n".join(lines)
|
| 1447 |
|
| 1448 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1449 |
def _write_provenance(out_dir: Path, args: argparse.Namespace) -> None:
|
| 1450 |
(out_dir / "config.yaml").write_text(
|
| 1451 |
"\n".join(f"{key}: {value}" for key, value in sorted(vars(args).items())) + "\n"
|
|
|
|
| 82 |
"target_obj_norm",
|
| 83 |
"source_obj_norm",
|
| 84 |
]
|
| 85 |
+
SCORE_SHAPE_NAMES = [
|
| 86 |
+
"candidate_score_rank_fraction",
|
| 87 |
+
"candidate_score_softmax_prob",
|
| 88 |
+
"candidate_score_gap_to_best",
|
| 89 |
+
"candidate_score_gap_to_second_best",
|
| 90 |
+
"candidate_score_gap_to_prev_higher",
|
| 91 |
+
"candidate_score_gap_to_next_lower",
|
| 92 |
+
"candidate_score_percentile",
|
| 93 |
+
"candidate_score_top_margin",
|
| 94 |
+
]
|
| 95 |
FEATURE_SET_CHOICES = (
|
| 96 |
"basic",
|
| 97 |
"tangent",
|
| 98 |
"context",
|
| 99 |
"context_tangent",
|
| 100 |
+
"score_context",
|
| 101 |
"source_evidence",
|
| 102 |
"tangent_source_evidence",
|
| 103 |
"context_source_evidence",
|
| 104 |
"context_tangent_source_evidence",
|
| 105 |
"chart_compat",
|
| 106 |
"chart_tangent_compat",
|
| 107 |
+
"score_chart_compat",
|
| 108 |
+
"score_context_chart_compat",
|
| 109 |
"chart_source_compat",
|
| 110 |
"chart_tangent_source_compat",
|
| 111 |
)
|
|
|
|
| 162 |
"candidate success to prioritize the lexicographic success/progress utility."
|
| 163 |
),
|
| 164 |
)
|
| 165 |
+
parser.add_argument(
|
| 166 |
+
"--success-bonus",
|
| 167 |
+
type=float,
|
| 168 |
+
default=1.0,
|
| 169 |
+
help=(
|
| 170 |
+
"Bonus multiplier for candidate_success when --target=success_weighted_margin. "
|
| 171 |
+
"Default preserves the original +1 success bonus."
|
| 172 |
+
),
|
| 173 |
+
)
|
| 174 |
parser.add_argument(
|
| 175 |
"--threshold-scope",
|
| 176 |
choices=("global", "task"),
|
|
|
|
| 197 |
help="Relative weight for pairwise rows when --fit-objective=hybrid_pairwise.",
|
| 198 |
)
|
| 199 |
parser.add_argument("--bootstrap-samples", type=int, default=1000)
|
| 200 |
+
parser.add_argument(
|
| 201 |
+
"--no-markdown-report",
|
| 202 |
+
action="store_true",
|
| 203 |
+
help="Do not write report.md; useful when the workspace is kept README-only.",
|
| 204 |
+
)
|
| 205 |
args = parser.parse_args(argv)
|
| 206 |
|
| 207 |
if args.k <= 0:
|
|
|
|
| 211 |
parser.error("--ridge-lambdas must contain non-negative values")
|
| 212 |
if args.pairwise_weight <= 0.0:
|
| 213 |
parser.error("--pairwise-weight must be positive")
|
| 214 |
+
if args.success_bonus < 0.0:
|
| 215 |
+
parser.error("--success-bonus must be non-negative")
|
| 216 |
|
| 217 |
out_dir = args.out_dir
|
| 218 |
out_dir.mkdir(parents=True, exist_ok=True)
|
|
|
|
| 265 |
selector_target_charts=selector_calibration_charts,
|
| 266 |
selector_source_charts=selector_source_charts,
|
| 267 |
selector_chart_feature_mode=args.selector_chart_feature_mode,
|
| 268 |
+
success_bonus=args.success_bonus,
|
| 269 |
)
|
| 270 |
eval_dataset = _candidate_dataset(
|
| 271 |
eval_rows,
|
|
|
|
| 278 |
selector_target_charts=selector_eval_charts,
|
| 279 |
selector_source_charts=selector_source_charts,
|
| 280 |
selector_chart_feature_mode=args.selector_chart_feature_mode,
|
| 281 |
+
success_bonus=args.success_bonus,
|
| 282 |
)
|
| 283 |
best = _fit_select_ridge(
|
| 284 |
calibration_dataset,
|
|
|
|
| 338 |
args.selector_chart_feature_mode if _uses_chart_compat(args.feature_set) else None
|
| 339 |
),
|
| 340 |
"target": args.target,
|
| 341 |
+
"success_bonus": args.success_bonus,
|
| 342 |
"fit_objective": args.fit_objective,
|
| 343 |
"pairwise_weight": args.pairwise_weight,
|
| 344 |
"threshold_scope": args.threshold_scope,
|
|
|
|
| 392 |
+ "\n"
|
| 393 |
)
|
| 394 |
(out_dir / "table.tex").write_text(_table(metrics) + "\n")
|
| 395 |
+
_write_report_artifact(out_dir, metrics, no_markdown_report=args.no_markdown_report)
|
| 396 |
(out_dir / "train.log").write_text(
|
| 397 |
"trained ridge dominance calibrator on calibration measured rows only\n"
|
| 398 |
f"fit_objective={args.fit_objective}\n"
|
|
|
|
| 431 |
selector_target_charts: dict[str, Any] | None = None,
|
| 432 |
selector_source_charts: dict[str, Any] | None = None,
|
| 433 |
selector_chart_feature_mode: str = "base_context_obs_obj",
|
| 434 |
+
success_bonus: float = 1.0,
|
| 435 |
) -> dict[str, Any]:
|
| 436 |
source_evidence = source_evidence or {}
|
| 437 |
selector_target_charts = selector_target_charts or {}
|
|
|
|
| 455 |
continue
|
| 456 |
score_mean = sum(scores) / len(scores)
|
| 457 |
score_std = math.sqrt(sum((score - score_mean) ** 2 for score in scores) / len(scores)) + 1.0e-6
|
| 458 |
+
score_shape = _score_shape_matrix(scores)
|
| 459 |
for candidate_index, score in enumerate(scores):
|
| 460 |
source_chart_id = str(source_chart_ids[candidate_index]) if candidate_index < len(source_chart_ids) else ""
|
| 461 |
tangent = np.asarray(
|
|
|
|
| 488 |
selector_source_charts.get(source_chart_id),
|
| 489 |
chart_feature_mode=selector_chart_feature_mode,
|
| 490 |
),
|
| 491 |
+
score_shape=score_shape[candidate_index],
|
| 492 |
num_candidates=len(scores),
|
| 493 |
feature_set=feature_set,
|
| 494 |
)
|
|
|
|
| 507 |
target,
|
| 508 |
utility_margin=target_margin,
|
| 509 |
candidate_success=successes[candidate_index],
|
| 510 |
+
success_bonus=success_bonus,
|
| 511 |
),
|
| 512 |
"measured_utility_margin": target_margin,
|
| 513 |
"candidate_utility": utilities[candidate_index],
|
|
|
|
| 544 |
*[f"abs_tangent_{index:02d}" for index in range(21)],
|
| 545 |
]
|
| 546 |
names = list(BASIC_FEATURE_NAMES)
|
| 547 |
+
if _uses_score_shape(feature_set):
|
| 548 |
+
names.extend(SCORE_SHAPE_NAMES)
|
| 549 |
if _uses_context(feature_set):
|
| 550 |
names.extend(context_names)
|
| 551 |
if _uses_tangent(feature_set):
|
|
|
|
| 573 |
context: dict[str, Any] | None = None,
|
| 574 |
source_evidence: np.ndarray | None = None,
|
| 575 |
chart_compat: np.ndarray | None = None,
|
| 576 |
+
score_shape: np.ndarray | None = None,
|
| 577 |
) -> np.ndarray:
|
| 578 |
tangent = np.asarray(tangent, dtype=float).reshape(-1)
|
| 579 |
if tangent.size < 21:
|
|
|
|
| 600 |
if feature_set == "basic":
|
| 601 |
return basic
|
| 602 |
parts = [basic]
|
| 603 |
+
if _uses_score_shape(feature_set):
|
| 604 |
+
if score_shape is None:
|
| 605 |
+
score_shape = np.zeros(len(SCORE_SHAPE_NAMES), dtype=float)
|
| 606 |
+
parts.append(np.asarray(score_shape, dtype=float).reshape(-1))
|
| 607 |
if _uses_context(feature_set):
|
| 608 |
parts.append(_context_feature(context or {}))
|
| 609 |
if _uses_tangent(feature_set):
|
|
|
|
| 627 |
"context_tangent",
|
| 628 |
"context_source_evidence",
|
| 629 |
"context_tangent_source_evidence",
|
| 630 |
+
"score_context",
|
| 631 |
+
"score_context_chart_compat",
|
| 632 |
+
}
|
| 633 |
+
|
| 634 |
+
|
| 635 |
+
def _uses_score_shape(feature_set: str) -> bool:
|
| 636 |
+
return feature_set in {
|
| 637 |
+
"score_context",
|
| 638 |
+
"score_chart_compat",
|
| 639 |
+
"score_context_chart_compat",
|
| 640 |
}
|
| 641 |
|
| 642 |
|
|
|
|
| 666 |
return feature_set in {
|
| 667 |
"chart_compat",
|
| 668 |
"chart_tangent_compat",
|
| 669 |
+
"score_chart_compat",
|
| 670 |
+
"score_context_chart_compat",
|
| 671 |
"chart_source_compat",
|
| 672 |
"chart_tangent_source_compat",
|
| 673 |
}
|
|
|
|
| 919 |
return float(np.sqrt(np.mean(diff * diff, axis=1)).min())
|
| 920 |
|
| 921 |
|
| 922 |
+
def _score_shape_matrix(scores: list[float]) -> np.ndarray:
|
| 923 |
+
"""Deployment-visible row-relative score features for each candidate."""
|
| 924 |
+
score_array = np.asarray(scores, dtype=float).reshape(-1)
|
| 925 |
+
if score_array.size == 0:
|
| 926 |
+
return np.zeros((0, len(SCORE_SHAPE_NAMES)), dtype=float)
|
| 927 |
+
order = sorted(range(score_array.size), key=lambda index: (-float(score_array[index]), index))
|
| 928 |
+
ranks = np.zeros(score_array.size, dtype=float)
|
| 929 |
+
for rank, index in enumerate(order):
|
| 930 |
+
ranks[index] = float(rank)
|
| 931 |
+
sorted_scores = score_array[order]
|
| 932 |
+
best = float(sorted_scores[0])
|
| 933 |
+
second = float(sorted_scores[1]) if sorted_scores.size > 1 else best
|
| 934 |
+
denom = max(1.0, float(score_array.size - 1))
|
| 935 |
+
shifted = score_array - float(np.max(score_array))
|
| 936 |
+
exp_scores = np.exp(np.clip(shifted, -60.0, 60.0))
|
| 937 |
+
softmax = exp_scores / max(float(exp_scores.sum()), 1.0e-12)
|
| 938 |
+
|
| 939 |
+
rows: list[list[float]] = []
|
| 940 |
+
for index, score in enumerate(score_array):
|
| 941 |
+
rank = int(ranks[index])
|
| 942 |
+
prev_higher = sorted_scores[rank - 1] if rank > 0 else score
|
| 943 |
+
next_lower = sorted_scores[rank + 1] if rank + 1 < sorted_scores.size else score
|
| 944 |
+
percentile = float(np.mean(score_array <= score))
|
| 945 |
+
rows.append(
|
| 946 |
+
[
|
| 947 |
+
float(rank) / denom,
|
| 948 |
+
float(softmax[index]),
|
| 949 |
+
float(score - best),
|
| 950 |
+
float(score - second),
|
| 951 |
+
float(score - prev_higher),
|
| 952 |
+
float(score - next_lower),
|
| 953 |
+
percentile,
|
| 954 |
+
float(best - second),
|
| 955 |
+
]
|
| 956 |
+
)
|
| 957 |
+
return np.asarray(rows, dtype=float)
|
| 958 |
+
|
| 959 |
+
|
| 960 |
def _context_feature(context: dict[str, Any]) -> np.ndarray:
|
| 961 |
target_task = str(context.get("target_task_id", ""))
|
| 962 |
source_task = str(context.get("source_task_id", ""))
|
|
|
|
| 984 |
*,
|
| 985 |
utility_margin: float,
|
| 986 |
candidate_success: float,
|
| 987 |
+
success_bonus: float = 1.0,
|
| 988 |
) -> float:
|
| 989 |
if target == "utility_margin":
|
| 990 |
return float(utility_margin)
|
| 991 |
if target == "success":
|
| 992 |
return float(candidate_success)
|
| 993 |
if target == "success_weighted_margin":
|
| 994 |
+
return float(utility_margin) + float(success_bonus) * float(candidate_success)
|
| 995 |
raise ValueError(f"unknown target: {target}")
|
| 996 |
|
| 997 |
|
|
|
|
| 1540 |
return "\n".join(lines)
|
| 1541 |
|
| 1542 |
|
| 1543 |
+
def _write_report_artifact(
|
| 1544 |
+
out_dir: Path,
|
| 1545 |
+
metrics: dict[str, Any],
|
| 1546 |
+
*,
|
| 1547 |
+
no_markdown_report: bool = False,
|
| 1548 |
+
) -> None:
|
| 1549 |
+
report_path = out_dir / "report.md"
|
| 1550 |
+
if no_markdown_report:
|
| 1551 |
+
if report_path.exists():
|
| 1552 |
+
report_path.unlink()
|
| 1553 |
+
return
|
| 1554 |
+
report_path.write_text(_report(metrics) + "\n")
|
| 1555 |
+
|
| 1556 |
+
|
| 1557 |
def _write_provenance(out_dir: Path, args: argparse.Namespace) -> None:
|
| 1558 |
(out_dir / "config.yaml").write_text(
|
| 1559 |
"\n".join(f"{key}: {value}" for key, value in sorted(vars(args).items())) + "\n"
|
workspace/scripts/eval_nonlinear_dominance_selector.py
CHANGED
|
@@ -105,6 +105,11 @@ def main(argv: list[str] | None = None) -> int:
|
|
| 105 |
parser.add_argument("--selection-frac", type=float, default=0.35)
|
| 106 |
parser.add_argument("--seed", type=int, default=0)
|
| 107 |
parser.add_argument("--bootstrap-samples", type=int, default=1000)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 108 |
args = parser.parse_args(argv)
|
| 109 |
|
| 110 |
if args.k <= 0:
|
|
@@ -309,7 +314,7 @@ def main(argv: list[str] | None = None) -> int:
|
|
| 309 |
+ "\n"
|
| 310 |
)
|
| 311 |
(out_dir / "table.tex").write_text(_table(metrics) + "\n")
|
| 312 |
-
(out_dir
|
| 313 |
(out_dir / "train.log").write_text(
|
| 314 |
"trained nonlinear dominance selector on calibration-fit rows only\n"
|
| 315 |
f"selected_model_type={best['model_type']}\n"
|
|
@@ -599,6 +604,20 @@ def _report(metrics: dict[str, Any]) -> str:
|
|
| 599 |
return "\n".join(lines)
|
| 600 |
|
| 601 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 602 |
def _write_provenance(out_dir: Path, args: argparse.Namespace) -> None:
|
| 603 |
(out_dir / "config.yaml").write_text(
|
| 604 |
"\n".join(f"{key}: {value}" for key, value in sorted(vars(args).items())) + "\n"
|
|
|
|
| 105 |
parser.add_argument("--selection-frac", type=float, default=0.35)
|
| 106 |
parser.add_argument("--seed", type=int, default=0)
|
| 107 |
parser.add_argument("--bootstrap-samples", type=int, default=1000)
|
| 108 |
+
parser.add_argument(
|
| 109 |
+
"--no-markdown-report",
|
| 110 |
+
action="store_true",
|
| 111 |
+
help="Do not write report.md; useful when the workspace is kept README-only.",
|
| 112 |
+
)
|
| 113 |
args = parser.parse_args(argv)
|
| 114 |
|
| 115 |
if args.k <= 0:
|
|
|
|
| 314 |
+ "\n"
|
| 315 |
)
|
| 316 |
(out_dir / "table.tex").write_text(_table(metrics) + "\n")
|
| 317 |
+
_write_report_artifact(out_dir, metrics, no_markdown_report=args.no_markdown_report)
|
| 318 |
(out_dir / "train.log").write_text(
|
| 319 |
"trained nonlinear dominance selector on calibration-fit rows only\n"
|
| 320 |
f"selected_model_type={best['model_type']}\n"
|
|
|
|
| 604 |
return "\n".join(lines)
|
| 605 |
|
| 606 |
|
| 607 |
+
def _write_report_artifact(
|
| 608 |
+
out_dir: Path,
|
| 609 |
+
metrics: dict[str, Any],
|
| 610 |
+
*,
|
| 611 |
+
no_markdown_report: bool = False,
|
| 612 |
+
) -> None:
|
| 613 |
+
report_path = out_dir / "report.md"
|
| 614 |
+
if no_markdown_report:
|
| 615 |
+
if report_path.exists():
|
| 616 |
+
report_path.unlink()
|
| 617 |
+
return
|
| 618 |
+
report_path.write_text(_report(metrics) + "\n")
|
| 619 |
+
|
| 620 |
+
|
| 621 |
def _write_provenance(out_dir: Path, args: argparse.Namespace) -> None:
|
| 622 |
(out_dir / "config.yaml").write_text(
|
| 623 |
"\n".join(f"{key}: {value}" for key, value in sorted(vars(args).items())) + "\n"
|