From e7aa2e3325904e20c17ddbd3ff62a5ea1304fa91 Mon Sep 17 00:00:00 2001 From: Yuren Hao Date: Sun, 19 Jul 2026 08:33:17 -0500 Subject: =?UTF-8?q?beta=5Fservo:=20=E8=B4=B4=E4=B8=8A=E7=95=8C=E4=BC=BA?= =?UTF-8?q?=E6=9C=8D(=E4=BA=AE=E5=8C=BA=E5=8F=8D=E6=BC=94cap*=3Dservo?= =?UTF-8?q?=C2=B7cap=5Frho/=CF=81=CC=82=E5=8F=8C=E5=90=91=E4=B8=80?= =?UTF-8?q?=E6=AD=A5=E8=90=BD=E7=82=B9,=E6=9A=97=E5=8C=BA=E5=A4=8D?= =?UTF-8?q?=E7=94=A8ride=E7=88=AC=E5=8D=87;=E5=B8=B8=E6=95=B0=E4=BB=850.8?= =?UTF-8?q?=E5=AE=89=E5=85=A8=E7=B3=BB=E6=95=B0)=20=E2=80=94=20=E5=BC=80?= =?UTF-8?q?=E7=81=AB=E8=AF=81=E4=B9=A6:plain=20s195000=E6=AD=BB=E4=BA=A1?= =?UTF-8?q?=E5=8C=BA2.5k=E6=AD=A5CERT=5FPASS(=CE=B2=E5=8F=8C=E5=90=91?= =?UTF-8?q?=E7=A7=BB=E5=8A=A825/26=E8=A1=8C,best=203.5703=E2=86=923.4260,?= =?UTF-8?q?=E9=9B=B6=E5=B4=A9=E6=BA=83;=E8=B4=B4=E8=BE=B9=E5=BC=80?= =?UTF-8?q?=E9=94=80+50%=E5=A2=99=E9=92=9F=E4=B8=BA=E6=9C=80=E6=81=B6?= =?UTF-8?q?=E5=8A=A3=E5=B7=A5=E5=86=B5);=20fw72m=5Fservo=E7=8E=8B=E5=86=A0?= =?UTF-8?q?=E4=BB=8E=E5=A4=B4=E8=B7=91=E5=B7=B2=E5=8F=91=E5=B0=84(servo+ri?= =?UTF-8?q?de4+cap=5Ffloor0+wsync3)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_014FAPDWQ49M5Ye3NpTndTpn --- ep_run/casc_eq_train.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/ep_run/casc_eq_train.py b/ep_run/casc_eq_train.py index b3239f1..3000461 100644 --- a/ep_run/casc_eq_train.py +++ b/ep_run/casc_eq_train.py @@ -68,6 +68,13 @@ ap.add_argument('--drift_adapt', type=float, default=0.0) # >0: adaptive drift ap.add_argument('--beta_cap_rho', type=float, default=0.0) # >0: LOOP-GAIN CAP on beta — if per-sweep residual # ratio rho^ exceeds this, bscale *= 0.8 (beta backs off # under the wall-2 ceiling); recovers x1.02 when rho^ low +ap.add_argument('--beta_servo', type=float, default=0.0) # >0: CEILING-HUGGING SERVO. Meter lit (res above the + # v2 absolute gate): deadbeat inversion onto the ceiling + # — cap *= servo*cap_rho/rho^ (rho ~= G*beta near the + # edge, so one step lands beta at servo*ceiling; grows + # toward it when under, shrinks when over). Meter dark: + # existing ride climb probes upward. Value = safety + # fraction of the ceiling to sit at (canonical 0.8). ap.add_argument('--wsync', type=int, default=0) # >0: SYNCHRONOUS WEIGHT-STEP ACCEPTANCE — snapshot # params+momentum before each opt.step; next step's # nudged relax measures the new state through the SAME @@ -577,7 +584,11 @@ def ep_step(x, y): if args.ride_ema > 0: # ride-v2(b), opt-in: smooth the meter before decisions rho_use = GOV['rho_ema'] = 0.9 * GOV.get('rho_ema', rho_g) + 0.1 * rho_g GOV['cool'] = max(GOV.get('cool', 0) - 1, 0) - if res_g > 0.02 and rho_use > args.beta_cap_rho: + if args.beta_servo > 0 and res_g > 0.02 and rho_use > 0: + # meter lit -> INVERT onto the ceiling (both directions), replacing the AIMD attack + GOV['cap'] = min(max(GOV.get('cap', 1.0) * (args.beta_servo * args.beta_cap_rho / rho_use), + args.cap_floor), args.beta_ride) + elif res_g > 0.02 and rho_use > args.beta_cap_rho: GOV['cap'] = max(GOV.get('cap', 1.0) * 0.85, args.cap_floor) # attack (gentler than v1) if args.ride_cool > 0: GOV['cool'] = args.ride_cool # ride-v2(c), opt-in elif (res_g < 0.01 or rho_use < 0.5 * args.beta_cap_rho) and GOV['cool'] == 0: -- cgit v1.2.3