Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Optuna utilities to generate and run studies on single problem instance and multiple problem instances #227

Merged
merged 9 commits into from
Jun 11, 2024
Original file line number Diff line number Diff line change
Expand Up @@ -327,9 +327,8 @@ def build_constraint_handler(rcpsp_problem: ANY_RCPSP, graph, **kwargs):
constraint_max_time_to_current_solution=False,
)
else:
params_0_cls = kwargs["params_0_cls"]
params_0_kwargs = kwargs["params_0_kwargs"]
params_0 = params_0_cls(**params_0_kwargs)
params_0 = ParamsConstraintBuilder(**params_0_kwargs)
if kwargs["params_1_kwargs"] is None:
params_1 = ParamsConstraintBuilder(
minus_delta_primary=6000,
Expand All @@ -339,9 +338,8 @@ def build_constraint_handler(rcpsp_problem: ANY_RCPSP, graph, **kwargs):
constraint_max_time_to_current_solution=False,
)
else:
params_1_cls = kwargs["params_1_cls"]
params_1_kwargs = kwargs["params_1_kwargs"]
params_1 = params_1_cls(**params_1_kwargs)
params_1 = ParamsConstraintBuilder(**params_1_kwargs)
params_list = [params_0, params_1]
constraint_handler = ConstraintHandlerScheduling(
problem=rcpsp_problem,
Expand All @@ -362,9 +360,8 @@ def build_constraint_handler(rcpsp_problem: ANY_RCPSP, graph, **kwargs):
constraint_max_time_to_current_solution=False,
)
else:
params_0_cls = kwargs["params_0_cls"]
params_0_kwargs = kwargs["params_0_kwargs"]
params_0 = params_0_cls(**params_0_kwargs)
params_0 = ParamsConstraintBuilder(**params_0_kwargs)
if kwargs["params_1_kwargs"] is None:
params_1 = ParamsConstraintBuilder(
minus_delta_primary=5000,
Expand All @@ -374,9 +371,8 @@ def build_constraint_handler(rcpsp_problem: ANY_RCPSP, graph, **kwargs):
constraint_max_time_to_current_solution=False,
)
else:
params_1_cls = kwargs["params_1_cls"]
params_1_kwargs = kwargs["params_1_kwargs"]
params_1 = params_1_cls(**params_1_kwargs)
params_1 = ParamsConstraintBuilder(**params_1_kwargs)
params_list = [params_0, params_1]
constraint_handler = NeighborRepairProblems(
problem=rcpsp_problem, params_list=params_list
Expand Down Expand Up @@ -517,21 +513,11 @@ class LargeNeighborhoodSearchScheduling(LNS_CP, SolverGenericRCPSP):
[ConstraintHandlerType.MIX_SUBPROBLEMS],
),
),
SubBrickHyperparameter(
name="params_0_cls",
choices=[ParamsConstraintBuilder],
default=ParamsConstraintBuilder,
),
SubBrickKwargsHyperparameter(
name="params_0_kwargs", subbrick_hyperparameter="params_0_cls"
),
SubBrickHyperparameter(
name="params_1_cls",
choices=[ParamsConstraintBuilder],
default=ParamsConstraintBuilder,
name="params_0_kwargs", subbrick_cls=ParamsConstraintBuilder
),
SubBrickKwargsHyperparameter(
name="params_1_kwargs", subbrick_hyperparameter="params_1_cls"
name="params_1_kwargs", subbrick_cls=ParamsConstraintBuilder
),
]

Expand Down
24 changes: 16 additions & 8 deletions discrete_optimization/generic_rcpsp_tools/neighbor_tools_rcpsp.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,14 +70,22 @@ def get_max_time_solution(solution: ANY_SOLUTION):

class ParamsConstraintBuilder(Hyperparametrizable):
hyperparameters = [
IntegerHyperparameter(name="minus_delta_primary", low=0, default=100),
IntegerHyperparameter(name="plus_delta_primary", low=0, default=100),
IntegerHyperparameter(name="minus_delta_secondary", low=0, default=0),
IntegerHyperparameter(name="plus_delta_secondary", low=0, default=0),
IntegerHyperparameter(name="minus_delta_primary_duration", default=5, low=0),
IntegerHyperparameter(name="plus_delta_primary_duration", default=5, low=0),
IntegerHyperparameter(name="minus_delta_secondary_duration", default=5, low=0),
IntegerHyperparameter(name="plus_delta_secondary_duration", default=5, low=0),
IntegerHyperparameter(name="minus_delta_primary", low=0, default=100, high=200),
IntegerHyperparameter(name="plus_delta_primary", low=0, default=100, high=200),
IntegerHyperparameter(name="minus_delta_secondary", low=0, default=0, high=10),
IntegerHyperparameter(name="plus_delta_secondary", low=0, default=0, high=10),
IntegerHyperparameter(
name="minus_delta_primary_duration", default=5, low=0, high=10
),
IntegerHyperparameter(
name="plus_delta_primary_duration", default=5, low=0, high=10
),
IntegerHyperparameter(
name="minus_delta_secondary_duration", default=5, low=0, high=10
),
IntegerHyperparameter(
name="plus_delta_secondary_duration", default=5, low=0, high=10
),
CategoricalHyperparameter(
name="constraint_max_time_to_current_solution",
choices=[True, False],
Expand Down
Empty file.
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,11 @@
import optuna
except ImportError:
logger.warning("You should install optuna to use TimedPercentilePruner for optuna.")

class TimedPercentilePruner:
def __init__(self, **kwargs):
raise RuntimeError("Cannot be instantiated if optuna is not installed.")

else:
from optuna.pruners import BasePruner
from optuna.study._study_direction import StudyDirection
Expand Down
Loading