Source code for smif.optimisation

"""Implements the interface to optimization functionality

This module defines an :class:`OptimizerTemplate` which lays out the fundamental
steps of any optimization algorithm. To implement your own algorithm, create a
child class which inherits OptimizerTemplate and implement the methods.

"""
__author__ = "Will Usher, Tom Russell"
__copyright__ = "Will Usher, Tom Russell"
__license__ = "mit"


from abc import ABC, abstractmethod


[docs]class OptimizerTemplate(ABC): """ """ def __init__(self): self._action_space = None self._optimization_function = None self._results = {'optimal_decision': None, 'objective_value': None}
[docs] def initialize(self, available_interventions): """Setup the optimization problem Arguments --------- available_interventions : int The number of dimensions """ assert isinstance(available_interventions, int)
self._action_space = available_interventions @property def optimization_function(self): """The function which will be minimized by the algorithm The optimization function should return a scalar and accept a vector of binary decision variables """ return self._optimization_function @optimization_function.setter def optimization_function(self, function): self._optimization_function = function @property def results(self): """The results from a successful optimization """ return self._results @results.setter def results(self, value): self._results = value
[docs] @abstractmethod def run(self): """Override to implement an optimization algorithm The optimization algorithm should return the optimal decision vector and objective function """
pass