from __future__ import annotations from typing import TYPE_CHECKING from pydantic import BaseModel from typing import Optional from pulp import lpSum if TYPE_CHECKING: from models.solver_run import SolverRun from models.problem import Problem class Target(BaseModel): theta: float value: float result: Optional[float] = None drift: float = 0.0 @classmethod def max_drift(cls) -> int: return 15 @classmethod def max_drift_increment(cls) -> int: return 1 # 10% def minimum(self) -> float: return self.value - (self.value * self.drift) def maximum(self) -> float: return self.value + (self.value * self.drift)