"""Abstract Operator classes
"""
# main imports
from enum import Enum
from abc import abstractmethod
[docs]class KindOperator(Enum):
"""Enum in order to recognize kind of operators
"""
MUTATOR = 1
CROSSOVER = 2
[docs]class Operator():
"""Abstract Operator class which enables to update solution applying operator (computation)
"""
@abstractmethod
def __init__(self):
pass
[docs] @abstractmethod
def apply(self, solution):
"""Apply the current operator transformation
Args:
solution: {Solution} -- Solution instance
"""
pass
[docs] def setAlgo(self, algo):
"""Keep into operator reference of the whole algorithm
The reason is to better manage operator instance
Args:
algo: {Algorithm} -- the algorithm reference runned
"""
self._algo = algo
[docs]class Mutation(Operator):
"""Abstract Mutation extend from Operator
Attributes:
kind: {KindOperator} -- specify the kind of operator
"""
def __init__(self):
self._kind = KindOperator.MUTATOR
[docs] def apply(self, solution):
raise NotImplementedError
[docs]class Crossover(Operator):
"""Abstract crossover extend from Operator
Attributes:
kind: {KindOperator} -- specify the kind of operator
"""
def __init__(self):
self._kind = KindOperator.CROSSOVER
[docs] def apply(self, solution):
raise NotImplementedError