Generalize Evaluation subsystem and Objective interface
Created by: gkirgizov
- Use generic ObjectiveFunction (Callable) instead of ObjectiveEvaluate in .optimise interface. This generalises Optimiser interface and allows passing arbitrary Callables as Objective functions.
- Introduce ObjectiveEvaluationDispatcher: Dispatcher accepts objective function and returns population evaluator. Its role is to define details of how objective must be actually evaluated, e.g. using multiprocessing, evaluation cache or remote evaluation. Rename EvaluationDispatcher to MultiprocessingDispatcher, which reflects its implementation.
- Introduce
evaluation_callback
functionality in Optimiser. This allows extracting the need for computing intermediate metrics. Now gp_composer defines this callback.
This is a continuation of PR #678 and part of the issue #608 (closed)