Source code for gaggle.problem.base_problems.functional_problem

from gaggle.problem import Problem
from gaggle.arguments import ProblemArgs, SysArgs
from gaggle.population import Individual

import torch
from typing import Callable


[docs]class FunctionalProblem(Problem): """Problem that just uses a predefined fitness_function with default input arguments beyond the individual. """ def __init__(self, fitness_function: Callable, problem_args: ProblemArgs = None, sys_args: SysArgs = None, *args, **kwargs): super(FunctionalProblem, self).__init__(problem_args, sys_args) self.fitness_function = fitness_function self.args = args self.kwargs = kwargs
[docs] @torch.no_grad() def evaluate(self, individual: Individual, *args, **kwargs) -> float: # we don't use the provided *args, **kwargs as this is intended for the supervisor and the user would not # have direct access to this part of the pipeline and therefore the *args and **kwargs are set at init time return self.fitness_function(individual, *self.args, **self.kwargs)