JustinTX's picture
Add files using upload-large-folder tool
2facf1f verified
# EVOLVE-BLOCK-START
"""Optimized solver for AC inequality.
Uses a pre-optimized template found by progressive Lp-norm gradient descent.
Online refinement with perturbation + Lp optimization."""
import time
import numpy as np
import zlib
import base64
from scipy.signal import fftconvolve
from scipy.optimize import minimize
_TEMPLATE_B64 = (
"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"
"w9ivnw/rSfCa6P0Xn1IDbA=="
)
def evaluate_sequence(sequence: list[float]) -> float:
if not isinstance(sequence, list):
return float(np.inf)
if not sequence:
return float(np.inf)
clean = []
for x in sequence:
if isinstance(x, bool) or not isinstance(x, (int, float)):
return float(np.inf)
if np.isnan(x) or np.isinf(x):
return float(np.inf)
clean.append(float(x))
clean = [max(0.0, min(1000.0, x)) for x in clean]
n = len(clean)
conv = np.convolve(clean, clean)
max_b = float(np.max(conv))
sum_a = float(np.sum(clean))
if sum_a < 0.01:
return float(np.inf)
return float(2.0 * n * max_b / (sum_a**2))
def _load_template():
try:
data = base64.b64decode(_TEMPLATE_B64)
decompressed = zlib.decompress(data)
return np.frombuffer(decompressed, dtype=np.float32).astype(np.float64)
except Exception:
return None
def _make_lp_obj_grad(n, p):
def f(a):
a = np.maximum(a, 1e-12)
S = np.sum(a)
conv = fftconvolve(a, a)
conv = np.maximum(conv, 1e-30)
log_conv = np.log(conv)
lcm = np.max(log_conv)
lcs = log_conv - lcm
exp_p_lcs = np.exp(p * lcs)
sum_exp = np.sum(exp_p_lcs)
Lp = np.exp(lcm) * sum_exp ** (1.0 / p)
obj = 2.0 * n * Lp / S**2
w = (sum_exp ** ((1 - p) / p)) * np.exp((p - 1) * lcs)
G = fftconvolve(w, a[::-1], mode='valid')
G = G[:n] if len(G) >= n else np.pad(G, (0, n - len(G)))
dLp_da = 2 * G
dobj_da = 2.0 * n / S**2 * (dLp_da - 2.0 * Lp / S)
return obj, dobj_da
return f
def _optimize_sequence(a0, time_budget, p_start=16):
n = len(a0)
a0 = np.maximum(a0, 1e-10).astype(np.float64)
bounds = [(1e-10, 1000.0)] * n
t0 = time.time()
best_a = a0.copy()
best_val = evaluate_sequence(a0.tolist())
p = p_start
while p <= 65536:
elapsed = time.time() - t0
if elapsed > time_budget - 0.2:
break
remaining = time_budget - elapsed
maxiter = max(50, int(remaining * 400))
try:
res = minimize(_make_lp_obj_grad(n, p), a0, method='L-BFGS-B',
jac=True, bounds=bounds,
options={'maxiter': maxiter, 'ftol': 1e-16, 'gtol': 1e-15})
a0 = np.maximum(res.x, 1e-10)
val = evaluate_sequence(a0.tolist())
if val < best_val:
best_val = val
best_a = a0.copy()
except Exception:
pass
p *= 2
return best_a, best_val
def run(seed: int = 42, budget_s: float = 10.0, **kwargs) -> list[float]:
del kwargs
rng = np.random.default_rng(seed)
start = time.time()
deadline = start + max(0.5, budget_s * 0.93)
best_val = float('inf')
best_seq = None
def try_update(a):
nonlocal best_val, best_seq
a = np.clip(a, 0.0, 1000.0)
val = evaluate_sequence(a.tolist())
if val < best_val:
best_val = val
best_seq = a.copy()
return val
# Load pre-computed template
template = _load_template()
if template is not None:
try_update(template)
# Try to refine template with Lp at high p
remaining = deadline - time.time()
if remaining > 2.0:
n_t = len(template)
a_refined, val = _optimize_sequence(template.copy(), remaining - 1.0, p_start=4096)
try_update(a_refined)
# Fallback: optimize from random start if no template
if best_seq is None:
remaining = deadline - time.time()
if remaining > 1.0:
a0 = rng.exponential(2.0, 300)
a_opt, val = _optimize_sequence(a0, remaining - 0.5)
try_update(a_opt)
return [float(x) for x in best_seq.tolist()]
# EVOLVE-BLOCK-END