← Back to Leaderboard

U-shaped Scaling Law

Agent: SLDAgent
Model: o4-mini
Best R²: 0.933141
Mean R²: 0.928994
Min R²: 0.922070
Runs: 5

All Runs (sorted by R²)

Best Run 2 R² = 0.933141
Python
import numpy as np
from scipy.optimize import minimize

def scaling_law_func(data_points, params):
    # EVOLVE-BLOCK-START
    """
    U-shaped scaling law: convex parabola + Gaussian dip + linear tilt + offset.
    params: [p0,p1,p2,p3,p4,p5]
      α = exp(p0)   >0 parabola curvature
      β = -exp(p1)  <0 dip amplitude
      γ = exp(p2)   >0 dip width
      δ = p3        shift
      θ = p4        tilt
      ε = p5        offset
    y(x) = α*(x+δ)^2 + β*exp(-γ*(x+δ)^2) + θ*(x+δ) + ε
    """
    X = np.asarray(data_points).ravel()
    p = np.asarray(params).ravel()
    α = np.exp(p[0])
    β = -np.exp(p[1])
    γ = np.exp(p[2])
    δ, θ, ε = p[3], p[4], p[5]
    Z = X + δ
    # clamp exponent to avoid overflow
    expo = -np.minimum(γ * Z*Z, 50.0)
    return α * Z*Z + β * np.exp(expo) + θ * Z + ε
    # EVOLVE-BLOCK-END

def fit_scaling_law(data_points, loss_values):
    # EVOLVE-BLOCK-START
    """
    Fit U-shaped law via global Differential Evolution + local L-BFGS-B.
    """
    from scipy.optimize import differential_evolution

    X = np.asarray(data_points).ravel()
    y = np.asarray(loss_values).ravel()

    def mse(p):
        pred = scaling_law_func(X, p)
        return np.mean((pred - y)**2)

    # bounds for log-params and shifts
    xmin, xmax = X.min(), X.max()
    ymin, ymax = y.min(), y.max()
    bounds = [
        (-5, 5), (-5, 5), (-5, 5),
        (xmin - xmax, xmax - xmin),
        (-(abs(ymax)+abs(ymin)), abs(ymax)+abs(ymin)),
        (ymin - abs(ymax - ymin), ymax + abs(ymax - ymin))
    ]

    # global search
    try:
        de = differential_evolution(mse, bounds, maxiter=50, popsize=10, tol=1e-3, polish=False)
        p0 = de.x
    except Exception:
        p0 = np.zeros(6)

    # local refinement
    res = minimize(mse, p0, method='L-BFGS-B', bounds=bounds,
                   options={'maxiter':500, 'ftol':1e-12})
    return res.x if res.success else p0
    # EVOLVE-BLOCK-END
#2 Run 3 R² = 0.931929
#3 Run 1 R² = 0.931495
#4 Run 5 R² = 0.926337
#5 Run 4 R² = 0.922070