mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-08 11:17:27 +00:00
passing around allow slack
This commit is contained in:
parent
8e22ced679
commit
c08ab7a767
2 changed files with 15 additions and 17 deletions
|
|
@ -1,6 +1,6 @@
|
|||
from enum import Enum
|
||||
from mip import OptimizationStatus
|
||||
from typing import Sequence, Optional, TypedDict, List
|
||||
from typing import Mapping, Optional, TypedDict, List
|
||||
from recommendations.optimiser.CostOptimiser import CostOptimiser
|
||||
from recommendations.optimiser.GainOptimiser import GainOptimiser
|
||||
|
||||
|
|
@ -41,9 +41,10 @@ class StrategicOptimiser:
|
|||
|
||||
def __init__(
|
||||
self,
|
||||
components: Sequence[Sequence[Measure]],
|
||||
components: list[list[Mapping[str, int | float | str]]],
|
||||
budget: Optional[float] = None,
|
||||
target_gain: Optional[float] = None,
|
||||
allow_slack: bool = False,
|
||||
verbose: bool = False,
|
||||
) -> None:
|
||||
|
||||
|
|
@ -57,6 +58,7 @@ class StrategicOptimiser:
|
|||
self.budget = budget
|
||||
self.target_gain = target_gain
|
||||
self.verbose = verbose
|
||||
self.allow_slack = allow_slack
|
||||
|
||||
self.solution: List[Measure] = []
|
||||
self.solution_cost: float = 0.0
|
||||
|
|
@ -128,7 +130,7 @@ class StrategicOptimiser:
|
|||
self.components,
|
||||
min_gain=self.target_gain,
|
||||
verbose=self.verbose,
|
||||
allow_slack=False
|
||||
allow_slack=self.allow_slack
|
||||
)
|
||||
|
||||
opt.setup()
|
||||
|
|
@ -147,7 +149,7 @@ class StrategicOptimiser:
|
|||
self.components,
|
||||
max_cost=self.budget,
|
||||
max_gain=None,
|
||||
allow_slack=False,
|
||||
allow_slack=self.allow_slack,
|
||||
verbose=self.verbose
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ from backend.app.plan.schemas import (
|
|||
)
|
||||
from recommendations.optimiser.CostOptimiser import CostOptimiser
|
||||
from recommendations.optimiser.GainOptimiser import GainOptimiser
|
||||
from recommendations.optimiser.StrategicOptimiser import StrategicOptimiser
|
||||
from utils.logger import setup_logger
|
||||
from backend.Funding import Funding
|
||||
from backend.app.BatterySapScorer import BatterySAPScorer
|
||||
|
|
@ -1118,22 +1119,17 @@ def run_optimizer(
|
|||
if not input_measures:
|
||||
return None, 0.0, 0.0
|
||||
|
||||
if budget is not None:
|
||||
opt = StrategicOptimiser(
|
||||
components=input_measures,
|
||||
budget=budget,
|
||||
target_gain=sub_target_gain,
|
||||
allow_slack=allow_slack,
|
||||
verbose=False,
|
||||
)
|
||||
|
||||
opt = GainOptimiser(
|
||||
input_measures, max_cost=budget, max_gain=0 if sub_target_gain == 0 else (sub_target_gain or float("inf")),
|
||||
allow_slack=allow_slack
|
||||
)
|
||||
else:
|
||||
if sub_target_gain is None:
|
||||
raise ValueError("Either budget or target_gain must be provided.")
|
||||
opt = CostOptimiser(input_measures, min_gain=sub_target_gain)
|
||||
|
||||
opt.setup()
|
||||
opt.solve()
|
||||
cost = sum([x["cost"] for x in opt.solution])
|
||||
|
||||
return opt.solution, cost, opt.solution_gain
|
||||
return opt.solution, opt.solution_cost, opt.solution_gain
|
||||
|
||||
|
||||
# ---- Define optimisation paths ----------------------------------------------------------
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue