Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/blop/plans.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
CanRegisterSuggestions,
OptimizationProblem,
Sensor,
StoppingConditions,
SupportsStoppingCriteria,
TrialFaultAware,
)
from .utils import InferredReadable, _maybe_checkpoint, collect_optimization_metadata, route_suggestions
Expand Down Expand Up @@ -219,7 +219,7 @@ def _optimize() -> MsgGenerator[None]:
# Perform a single step of the optimization
uid, suggestions, outcomes = yield from optimize_step(optimization_problem, n_points, **kwargs)

if isinstance(optimization_problem.optimizer, StoppingConditions):
if isinstance(optimization_problem.optimizer, SupportsStoppingCriteria):
stop_now, stop_reason = optimization_problem.optimizer.should_stop()
if stop_now:
reason = stop_reason if stop_reason is not None else "No reason provided"
Expand Down
4 changes: 2 additions & 2 deletions src/blop/protocols.py
Original file line number Diff line number Diff line change
Expand Up @@ -82,9 +82,9 @@ def register_failures(self, suggestions: list[dict]) -> None:


@runtime_checkable
class StoppingConditions(Protocol):
class SupportsStoppingCriteria(Protocol):
"""
A protocol for optimizers that can evaluate global stopping criteria.
A protocol for optimizers that can evaluate stopping criteria.

This allows optimization plans to terminate early through tolerance, max_iterations etc.
"""
Expand Down
8 changes: 4 additions & 4 deletions src/blop/tests/test_plans.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
EvaluationFunction,
OptimizationProblem,
Optimizer,
StoppingConditions,
SupportsStoppingCriteria,
TrialFaultAware,
)

Expand Down Expand Up @@ -483,7 +483,7 @@ def test_acquire_baseline_from_current(RE):
def test_optimize_max_number_of_iterations_before_stop(RE):
"""Tests that the optimization stops at a set number of iterations"""

class StoppingOptimizer(Optimizer, StoppingConditions): ...
class StoppingOptimizer(Optimizer, SupportsStoppingCriteria): ...

optimizer = MagicMock(spec=StoppingOptimizer)
optimizer.suggest.return_value = [{"x1": 0.0, "_id": 0}]
Expand All @@ -510,7 +510,7 @@ class StoppingOptimizer(Optimizer, StoppingConditions): ...
def test_optimize_stop_condition_not_hit(RE):
"""Tests that optimization stops before stop condition is met"""

class StoppingOptimizer(Optimizer, StoppingConditions): ...
class StoppingOptimizer(Optimizer, SupportsStoppingCriteria): ...

optimizer = MagicMock(spec=StoppingOptimizer)
optimizer.suggest.return_value = [{"x1": 0.0, "_id": 0}]
Expand All @@ -535,7 +535,7 @@ class StoppingOptimizer(Optimizer, StoppingConditions): ...
def test_optimize_stops_when_change_is_within_tolerance(RE):
"""Tests that the optimization stops when the change in objective value is within a specified tolerance."""

class ToleranceStopOptimizer(Optimizer, StoppingConditions):
class ToleranceStopOptimizer(Optimizer, SupportsStoppingCriteria):
def __init__(self, tolerance: float):
self.tolerance = tolerance
self._last_value: float | None = None
Expand Down
Loading