Skip to content

Commit

Permalink
Merge branch 'develop'
Browse files Browse the repository at this point in the history
  • Loading branch information
bruscalia committed Dec 20, 2023
2 parents 308cc19 + 4f87f1c commit c529260
Show file tree
Hide file tree
Showing 21 changed files with 61,501 additions and 40,891 deletions.
3 changes: 0 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,6 @@ experimental
*.egg-info
/venv
*/venv
cythonize_files.py
/pymoode/cython/*.html
/pymoode/cython/*.pyd
__pycache__/
cheat_codes.txt
notebooks/validate_runtime.ipynb
19 changes: 11 additions & 8 deletions pymoode/algorithms/base/differential.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
# Native
from typing import Optional

# External
import numpy as np

Expand Down Expand Up @@ -35,7 +38,7 @@ def __init__(self,
**kwargs):
"""
Base class for Differential Evolution algorithms
Parameters
----------
pop_size : int, optional
Expand Down Expand Up @@ -81,7 +84,7 @@ def __init__(self,
genetic_mutation, optional
Pymoo's genetic mutation operator after crossover. Defaults to NoMutation().
survival : Survival, optional
Replacement survival operator. Defaults to ImprovementReplacement().
Expand Down Expand Up @@ -109,7 +112,7 @@ def __init__(self,
advance_after_initial_infill=advance_after_initial_infill,
**kwargs,
)

self.termination = DefaultSingleObjectiveTermination()

def _initialize_advance(self, infills=None, **kwargs):
Expand All @@ -125,7 +128,7 @@ def _advance(self, infills=None, **kwargs):

# One-to-one replacement survival
self.pop = self.survival.do(self.problem, self.pop, infills)

def _set_optimum(self, **kwargs):
if not has_feasible(self.pop):
self.opt = self.pop[[np.argmin(self.pop.get("CV"))]]
Expand All @@ -134,7 +137,7 @@ def _set_optimum(self, **kwargs):


class MODE(DifferentialEvolution):

def __init__(self,
pop_size=100,
sampling=LHS(),
Expand All @@ -146,7 +149,7 @@ def __init__(self,
survival=RankAndCrowding(),
output=MultiObjectiveOutput(),
**kwargs):

super().__init__(
pop_size=pop_size,
sampling=sampling,
Expand All @@ -159,8 +162,8 @@ def __init__(self,
output=output,
**kwargs,
)

self.termination = DefaultMultiObjectiveTermination()

def _initialize_advance(self, infills=None, **kwargs):
self.pop = self.survival.do(self.problem, infills, None, n_survive=self.pop_size)
44 changes: 26 additions & 18 deletions pymoode/algorithms/base/evolutionary.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,16 @@
# Native
from typing import Optional

# pymoo imports
from pymoo.core.algorithm import Algorithm
from pymoo.core.duplicate import DefaultDuplicateElimination, NoDuplicateElimination
from pymoo.core.initialization import Initialization
from pymoo.core.infill import InfillCriterion
from pymoo.core.population import Population
from pymoo.core.repair import NoRepair
from pymoo.core.repair import NoRepair, Repair
from pymoo.core.survival import Survival
from pymoo.core.sampling import Sampling
from pymoo.core.mating import Mating


# =========================================================================================================
Expand All @@ -13,42 +19,44 @@

class EvolutionaryAlgorithm(Algorithm):

def __init__(self,
pop_size=None,
sampling=None,
mating=None,
survival=None,
n_offsprings=None,
eliminate_duplicates=True,
repair=None,
advance_after_initial_infill=False,
**kwargs):
def __init__(
self,
pop_size: Optional[int] = None,
sampling: Optional[Sampling] = None,
mating: Optional[Mating] = None,
survival: Optional[Survival] = None,
n_offsprings: Optional[int] = None,
eliminate_duplicates: bool = True,
repair: Optional[Repair] = None,
advance_after_initial_infill: bool = False,
**kwargs
):
"""Base class for Evolutionary Algorithms
Parameters
----------
pop_size : int, optional
Population size, by default None
sampling : Sampling, optional
pymoo Sampling instance, by default None
mating : InfillCriterion, optional
pymoo mating operator, by default None
survival : Survival, optional
pymoo survival operator, by default None
n_offsprings : int, optional
Number of offspring individuals created at each generation, by default None
eliminate_duplicates : DuplicateElimination | bool | None, optional
Eliminate duplicates in mating, by default True
repair : Repair, optional
pymoo repair operator. In the algorithm level it should be called when sampling.
It is recommended that mating operators also have some repair associated with. By default None
advance_after_initial_infill : bool, optional
Either or not apply survival after initialization, by default False
"""
Expand Down
6 changes: 3 additions & 3 deletions pymoode/algorithms/nsde.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
# =========================================================================================================

class NSDE(MODE):

def __init__(self,
pop_size=100,
variant="DE/rand/1/bin",
Expand All @@ -22,7 +22,7 @@ def __init__(self,
survival=RankAndCrowding(),
**kwargs):
"""
NSDE is an algorithm that combines that combines NSGA-II sorting and survival strategies
NSDE is an algorithm that combines that combines NSGA-II sorting and survival strategies
to DE mutation and crossover.
For many-objective problems, try using NSDE-R, GDE3-MNN, or GDE3-2NN.
Expand Down Expand Up @@ -93,7 +93,7 @@ def __init__(self,
survival=survival,
**kwargs,
)

def _advance(self, infills=None, **kwargs):

assert infills is not None, "This algorithms uses the AskAndTell interface thus 'infills' must to be provided."
Expand Down
Loading

0 comments on commit c529260

Please sign in to comment.