Source code for paref.pareto_reflection_sequences.generic.repeating_sequence

from typing import List

from paref.interfaces.moo_algorithms.blackbox_function import BlackboxFunction
from paref.interfaces.pareto_reflections.pareto_reflection import ParetoReflection
from paref.interfaces.sequences_pareto_reflections.sequence_pareto_reflections import \
    SequenceParetoReflections


[docs]class RepeatingSequence(SequenceParetoReflections): """Define a sequence by repeating a list of Pareto reflections This is probably the most generic way to define a sequence of Pareto reflections: specify a (finite) list of Pareto reflections and repeat that list. It can be seen as implementing a list of Pareto reflections (which is a sequence) in the sequence of Pareto reflections interface. When to use ----------- # TBA: when to use? What it does ------------ The sequence simply loops through given list of Pareto reflections If the end is reached, the sequence starts again from the beginning of the list of reflections. Examples -------- # TBA: meaningful example when to use this Initialize list of Pareto reflections >>> import numpy as np >>> from paref.pareto_reflections.restrict_by_point import RestrictByPoint >>> from paref.moo_algorithms.stopping_criteria.max_iterations_reached import MaxIterationsReached Initialze stopping criteria >>> stopping_criteria = MaxIterationsReached(max_iterations=1) Initialize Pareto reflection to be repeated >>> pareto_reflecting_functions = [RestrictByPoint(nadir=np.ones(1),restricting_point=np.ones(1))] Initialize repeating sequence >>> sequence = RepeatingSequence(pareto_reflections=pareto_reflecting_functions) The repeating sequence returns the given Pareto reflection in each step of iteration until the stopping criteria is met >>> sequence.next().__class__.__name__ Restricting >>> sequence.next() None """ def __init__(self, pareto_reflections: List[ParetoReflection], ): """Specify the list of Pareto reflections you want to loop through Parameters ---------- pareto_reflections : List[ParetoReflection] Pareto reflections to be repeated stored in a list """ self._pareto_reflecting_functions = pareto_reflections self._iter = -1
[docs] def next(self, blackbox_function: BlackboxFunction) -> ParetoReflection: """Return the next Pareto reflection of the list of Pareto reflections Returns ------- ParetoReflection successor Pareto reflection of the sequence """ self._iter += 1 return self._pareto_reflecting_functions[self._iter % len(self._pareto_reflecting_functions)]