Skip to content

Commit

Permalink
Added default values for OptimizationParameters
Browse files Browse the repository at this point in the history
  • Loading branch information
Sigurd-Borge committed Oct 7, 2024
1 parent a91a421 commit 400055c
Show file tree
Hide file tree
Showing 3 changed files with 78 additions and 17 deletions.
51 changes: 36 additions & 15 deletions src/antares/model/settings/optimization.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,19 @@
# This file is part of the Antares project.

from enum import Enum
from typing import Optional, Union
from typing import Union

from pydantic import BaseModel
from pydantic.alias_generators import to_camel

from antares.tools.all_optional_meta import all_optional_model


class LegacyTransmissionCapacities(Enum):
INFINITE = "infinite"


class TransmissionCapacities(Enum):
class OptimizationTransmissionCapacities(Enum):
LOCAL_VALUES = "local-values"
NULL_FOR_ALL_LINKS = "null-for-all-links"
INFINITE_FOR_ALL_LINKS = "infinite-for-all-links"
Expand All @@ -41,16 +43,35 @@ class SimplexOptimizationRange(Enum):
WEEK = "week"


class OptimizationParameters(BaseModel, alias_generator=to_camel):
binding_constraints: Optional[bool] = None
hurdle_costs: Optional[bool] = None
transmission_capacities: Union[bool, Union[LegacyTransmissionCapacities, TransmissionCapacities], None] = None
thermal_clusters_min_stable_power: Optional[bool] = None
thermal_clusters_min_ud_time: Optional[bool] = None
day_ahead_reserve: Optional[bool] = None
primary_reserve: Optional[bool] = None
strategic_reserve: Optional[bool] = None
spinning_reserve: Optional[bool] = None
export_mps: Union[bool, str, None] = None
unfeasible_problem_behavior: Optional[UnfeasibleProblemBehavior] = None
simplex_optimization_range: Optional[SimplexOptimizationRange] = None
class ExportMPS(Enum):
NONE = "none"
OPTIM1 = "optim1"
OPTIM2 = "optim2"
BOTH_OPTIMS = "both-optims"


class DefaultOptimizationParameters(BaseModel, alias_generator=to_camel):
simplex_optimization_range: SimplexOptimizationRange = SimplexOptimizationRange.WEEK
transmission_capacities: Union[bool, Union[LegacyTransmissionCapacities, OptimizationTransmissionCapacities]] = (
OptimizationTransmissionCapacities.LOCAL_VALUES
)
binding_constraints: bool = True
hurdle_costs: bool = True
thermal_clusters_min_stable_power: bool = True
thermal_clusters_min_ud_time: bool = True
day_ahead_reserve: bool = True
strategic_reserve: bool = True
spinning_reserve: bool = True
primary_reserve: bool = True
export_mps: ExportMPS = ExportMPS.NONE
include_exportstructure: bool = False
unfeasible_problem_behavior: UnfeasibleProblemBehavior = UnfeasibleProblemBehavior.ERROR_VERBOSE


@all_optional_model
class OptimizationParameters(DefaultOptimizationParameters):
pass


class OptimizationParametersLocal(DefaultOptimizationParameters):
pass
4 changes: 2 additions & 2 deletions src/antares/model/settings/study_settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
from antares.model.settings.adequacy_patch import DefaultAdequacyPatchParameters
from antares.model.settings.advanced_parameters import DefaultAdvancedParameters
from antares.model.settings.general import DefaultGeneralParameters
from antares.model.settings.optimization import OptimizationParameters
from antares.model.settings.optimization import DefaultOptimizationParameters
from antares.model.settings.thematic_trimming import ThematicTrimmingParameters
from antares.model.settings.time_series import TimeSeriesParameters
from antares.tools.all_optional_meta import all_optional_model
Expand All @@ -39,7 +39,7 @@ class DefaultStudySettings(BaseModel):
# https://antares-simulator.readthedocs.io/en/latest/user-guide/ts-generator/04-parameters/
adequacy_patch_parameters: DefaultAdequacyPatchParameters = DefaultAdequacyPatchParameters()
advanced_parameters: DefaultAdvancedParameters = DefaultAdvancedParameters()
optimization_parameters: OptimizationParameters = OptimizationParameters()
optimization_parameters: DefaultOptimizationParameters = DefaultOptimizationParameters()
playlist_parameters: Dict[str, PlaylistData] = {}


Expand Down
40 changes: 40 additions & 0 deletions tests/antares/services/local_services/test_study.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,13 @@
Month,
WeekDay,
)
from antares.model.settings.optimization import (
DefaultOptimizationParameters,
ExportMPS,
OptimizationTransmissionCapacities,
SimplexOptimizationRange,
UnfeasibleProblemBehavior,
)
from antares.model.settings.study_settings import DefaultStudySettings, StudySettingsLocal
from antares.model.study import create_study_local
from antares.service.local_services.area_local import AreaLocalService
Expand Down Expand Up @@ -440,6 +447,39 @@ def test_local_study_has_correct_advanced_parameters(self, local_study):
assert actual_advanced_parameters == expected_advanced_parameters
assert actual_study_settings == expected_study_settings

def test_local_study_has_correct_optimization_parameters(self, local_study):
# Given
expected_optimization_parameters = DefaultOptimizationParameters.model_validate(
{
"simplex_optimization_range": SimplexOptimizationRange.WEEK,
"transmission_capacities": OptimizationTransmissionCapacities.LOCAL_VALUES,
"binding_constraints": True,
"hurdle_costs": True,
"thermal_clusters_min_stable_power": True,
"thermal_clusters_min_ud_time": True,
"day_ahead_reserve": True,
"strategic_reserve": True,
"spinning_reserve": True,
"primary_reserve": True,
"export_mps": ExportMPS.NONE,
"include_exportstructure": False,
"unfeasible_problem_behavior": UnfeasibleProblemBehavior.ERROR_VERBOSE,
}
)
expected_study_settings = StudySettingsLocal(optimization_parameters=expected_optimization_parameters)

# When
actual_optimization_parameters = DefaultOptimizationParameters.model_validate(
local_study.get_settings().optimization_parameters.model_dump(exclude_none=True)
)
actual_study_settings = StudySettingsLocal.model_validate(
local_study.get_settings().model_dump(exclude_none=True)
)

# Then
assert actual_optimization_parameters == expected_optimization_parameters
assert actual_study_settings == expected_study_settings


class TestCreateArea:
def test_areas_sets_ini_content(self, tmp_path, local_study):
Expand Down

0 comments on commit 400055c

Please sign in to comment.