Source code for paref.moo_algorithms.minimizer.differential_evolution_minimizer
from typing import List
from paref.black_box_functions.design_space.bounds import Bounds
from paref.interfaces.moo_algorithms.blackbox_function import BlackboxFunction
from paref.interfaces.moo_algorithms.paref_moo import ParefMOO, CompositionWithParetoReflection
from paref.moo_algorithms.minimizer.gpr_minimizer import DifferentialEvolution
[docs]class DifferentialEvolutionMinimizer(ParefMOO):
[docs] def apply_moo_operation(self, blackbox_function: BlackboxFunction) -> None:
minimizer = DifferentialEvolution()
underlying_blackbox_function = blackbox_function
while isinstance(underlying_blackbox_function, CompositionWithParetoReflection):
underlying_blackbox_function = underlying_blackbox_function._blackbox_function
length_evaluations = len(underlying_blackbox_function.evaluations)
if isinstance(blackbox_function.design_space, Bounds):
print('Starting minimization...')
res = minimizer(
function=lambda x: blackbox_function(x),
upper_bounds=blackbox_function.design_space.upper_bounds,
lower_bounds=blackbox_function.design_space.lower_bounds,
)
else:
raise ValueError('Design space property of blackbox function must be an instance of Bounds!')
print('finished!')
underlying_blackbox_function.evaluations = underlying_blackbox_function.evaluations[:length_evaluations]
underlying_blackbox_function(res)
print('Value of blackbox: ', underlying_blackbox_function.y[-1])
@property
def supported_codomain_dimensions(self) -> List[int]:
return [1]