Moftah
Remove scalar tuning runtime dependency
9e164cd
Raw
History Blame Contribute Delete
1.23 kB
"""Small dependency-free optimization helpers for scalar forecast tuning."""
from __future__ import annotations
from collections.abc import Callable
def bounded_minimize(
objective: Callable[[float], float],
lower: float,
upper: float,
*,
tolerance: float = 1e-10,
max_iterations: int = 200,
) -> float:
"""Minimize a unimodal scalar objective with golden-section search."""
if lower >= upper:
raise ValueError("lower bound must be less than upper bound")
ratio = (5.0**0.5 - 1.0) / 2.0
left = upper - ratio * (upper - lower)
right = lower + ratio * (upper - lower)
left_value = objective(left)
right_value = objective(right)
for _ in range(max_iterations):
if upper - lower <= tolerance:
break
if left_value <= right_value:
upper = right
right = left
right_value = left_value
left = upper - ratio * (upper - lower)
left_value = objective(left)
else:
lower = left
left = right
left_value = right_value
right = lower + ratio * (upper - lower)
right_value = objective(right)
return (lower + upper) / 2.0