summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYurenHao0426 <Blackhao0426@gmail.com>2026-08-29 18:10:59 -0500
committerYurenHao0426 <Blackhao0426@gmail.com>2026-08-29 18:10:59 -0500
commit3d50ea64ac48b4b64e5ca9d14fb59f2c2710fa6d (patch)
tree533f1a8317b34772ec2f68121ff71bfb98502ea1
parent6f1043c5b7da90e2cbbf684daa3aecf28a06238f (diff)
results: freeze size-matched overclamp selector
-rw-r--r--experiments/coupled_ladder_scaling.py22
-rw-r--r--results/coupled_ladder/p0_overclamp_selector.json62
2 files changed, 80 insertions, 4 deletions
diff --git a/experiments/coupled_ladder_scaling.py b/experiments/coupled_ladder_scaling.py
index bb6f090..680b855 100644
--- a/experiments/coupled_ladder_scaling.py
+++ b/experiments/coupled_ladder_scaling.py
@@ -267,6 +267,11 @@ def parse_args() -> argparse.Namespace:
parser.add_argument("--calibration-observations", type=int, default=16)
parser.add_argument(
"--overclamp-time-seconds-per-v", type=float, default=0.0025)
+ parser.add_argument(
+ "--overclamp-times",
+ default=None,
+ help="optional side:time mapping that overrides the scalar value",
+ )
parser.add_argument("--gain-standard-deviation", type=float, default=0.01)
parser.add_argument(
"--twin-mismatch-standard-deviation-v", type=float, default=0.001)
@@ -288,6 +293,17 @@ def main() -> None:
if missing_times:
raise ValueError(
f"learning times are missing sizes {sorted(missing_times)}")
+ if args.overclamp_times is None:
+ overclamp_times = {
+ side: args.overclamp_time_seconds_per_v for side in sizes
+ }
+ else:
+ overclamp_times = parse_mapping(args.overclamp_times, float)
+ missing_overclamp_times = set(sizes) - set(overclamp_times)
+ if missing_overclamp_times:
+ raise ValueError(
+ "overclamp times are missing sizes "
+ f"{sorted(missing_overclamp_times)}")
methods = tuple(args.methods.split(","))
unknown_methods = set(methods) - set(METHODS)
if unknown_methods:
@@ -305,8 +321,7 @@ def main() -> None:
"record_every": args.record_every,
"learning_time_seconds": learning_times[side],
"calibration_observations": args.calibration_observations,
- "overclamp_time_seconds_per_v": (
- args.overclamp_time_seconds_per_v),
+ "overclamp_time_seconds_per_v": overclamp_times[side],
"gain_standard_deviation": args.gain_standard_deviation,
"twin_mismatch_standard_deviation_v": (
args.twin_mismatch_standard_deviation_v),
@@ -348,8 +363,7 @@ def main() -> None:
"record_every": args.record_every,
"learning_time_seconds_by_side": learning_times,
"calibration_observations": args.calibration_observations,
- "overclamp_time_seconds_per_v": (
- args.overclamp_time_seconds_per_v),
+ "overclamp_time_seconds_per_v_by_side": overclamp_times,
"component_imperfection": {
"gain_standard_deviation": args.gain_standard_deviation,
"twin_mismatch_standard_deviation_v": (
diff --git a/results/coupled_ladder/p0_overclamp_selector.json b/results/coupled_ladder/p0_overclamp_selector.json
new file mode 100644
index 0000000..aa59a18
--- /dev/null
+++ b/results/coupled_ladder/p0_overclamp_selector.json
@@ -0,0 +1,62 @@
+{
+ "analysis": "digital_coupled_ladder_clean_only_overclamp_selector",
+ "confirmatory": false,
+ "selection_information": "ideal overclamped coupled-learning endpoints only",
+ "task_panel": {
+ "input_diameters": 5,
+ "label_rotations_per_diameter": 1,
+ "tasks": 5
+ },
+ "candidate_overclamp_time_seconds_per_v": [
+ 0.0025,
+ 0.025,
+ 0.25,
+ 2.5
+ ],
+ "criterion": [
+ "lowest mean final classification error",
+ "lowest mean classification-error learning-curve area as the tie break"
+ ],
+ "selected_overclamp_time_seconds_per_v_by_side": {
+ "4": 0.25,
+ "8": 0.25,
+ "12": 0.25,
+ "16": 2.5,
+ "24": 2.5,
+ "32": 2.5
+ },
+ "selected_clean_development_endpoints": {
+ "4": {
+ "mean_final_classification_error": 0.025,
+ "mean_classification_error_auc": 0.056874999999999995
+ },
+ "8": {
+ "mean_final_classification_error": 0.0,
+ "mean_classification_error_auc": 0.04666666666666666
+ },
+ "12": {
+ "mean_final_classification_error": 0.0,
+ "mean_classification_error_auc": 0.030208333333333337
+ },
+ "16": {
+ "mean_final_classification_error": 0.0,
+ "mean_classification_error_auc": 0.036250000000000004
+ },
+ "24": {
+ "mean_final_classification_error": 0.0,
+ "mean_classification_error_auc": 0.034999999999999996
+ },
+ "32": {
+ "mean_final_classification_error": 0.0,
+ "mean_classification_error_auc": 0.04958333333333333
+ }
+ },
+ "sources": [
+ "results/coupled_ladder/p1_bias_baseline_pilot.json",
+ "results/coupled_ladder/p0_overclamp_clean_t2p5e-2.json",
+ "results/coupled_ladder/p0_overclamp_clean_t2p5e-1.json",
+ "results/coupled_ladder/p0_overclamp_clean_t2p5.json",
+ "results/coupled_ladder/p0_overclamp_clean_small_t2p5.json"
+ ],
+ "freeze": "Biased overclamp conditions use this mapping without further time-constant selection."
+}