Skip to content

Commit

Permalink
WIP GA solver
Browse files Browse the repository at this point in the history
  • Loading branch information
nhuet committed Sep 23, 2024
1 parent 9503baa commit 16d9d16
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 14 deletions.
21 changes: 20 additions & 1 deletion discrete_optimization/generic_tools/ea/ga_tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,28 @@
DeapSelection,
ObjectiveHandling,
)
from discrete_optimization.generic_tools.hyperparameters.hyperparameter import (
EnumHyperparameter,
FloatHyperparameter,
IntegerHyperparameter,
)
from discrete_optimization.generic_tools.hyperparameters.hyperparametrizable import (
Hyperparametrizable,
)


class ParametersGa(Hyperparametrizable):
hyperparameters = [
EnumHyperparameter(name="crossover", enum=DeapCrossover, default=None),
EnumHyperparameter(
name="selection", enum=DeapSelection, default=DeapSelection.SEL_TOURNAMENT
),
IntegerHyperparameter(name="pop_size", low=1, high=1000, default=100),
FloatHyperparameter(name="mut_rate", low=0, high=0.9, default=0.1),
FloatHyperparameter(name="crossover_rate", low=0, high=1, default=0.9),
FloatHyperparameter(name="tournament_size", low=0, high=1, default=0.2),
]

class ParametersGa:
def __init__(
self,
mutation: Union[Mutation, DeapMutation],
Expand Down
26 changes: 13 additions & 13 deletions discrete_optimization/rcpsp/solver/rcpsp_ga_solver.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,29 +10,29 @@
ParametersAltGa,
ParametersGa,
)
from discrete_optimization.generic_tools.hyperparameters.hyperparameter import (
SubBrickKwargsHyperparameter,
)
from discrete_optimization.rcpsp.rcpsp_model import RCPSPModel
from discrete_optimization.rcpsp.solver.rcpsp_solver import SolverRCPSP


class GA_RCPSP_Solver(SolverRCPSP):
problem: RCPSPModel
hyperparameters = Ga.copy_and_update_hyperparameters(
crossover=dict(
choices=[
DeapCrossover.CX_UNIFORM_PARTIALY_MATCHED,
DeapCrossover.CX_ORDERED,
DeapCrossover.CX_PARTIALY_MATCHED,
]

hyperparameters = [
SubBrickKwargsHyperparameter(
name="parameters_ga_kwargs", subbrick_cls=ParametersGa
)
)
# RCPSP needs permutation encoding, not all crossover are available.
]

def solve(self, parameters_ga: Optional[ParametersGa] = None, **args):
def solve(self, parameters_ga: Optional[ParametersGa] = None, **kwargs):
if parameters_ga is None:
parameters_ga = ParametersGa.default_rcpsp()
args = self.complete_with_default_hyperparameters(args)
for key in args:
setattr(parameters_ga, key, args[key])
kwargs = self.complete_with_default_hyperparameters(kwargs)
if kwargs["parameters_ga_kwargs"] is not None:
for key in kwargs["parameters_ga_kwargs"]:
setattr(parameters_ga, key, kwargs["parameters_ga_kwargs"][key])
ga_solver = Ga(
problem=self.problem,
encoding=parameters_ga.encoding,
Expand Down

0 comments on commit 16d9d16

Please sign in to comment.