Commit 4e18b318 by Jorn Baayen

Added an experimental homotopy mixin for solving non-convex problems.

parent 34d04967
 # cython: embedsignature=True from rtctools.optimization.optimization_problem import OptimizationProblem from rtctools.optimization.timeseries import Timeseries import logging logger = logging.getLogger("rtctools") class HomotopyMixin(OptimizationProblem): """ Homotopy. """ def seed(self, ensemble_member): if self._theta == 0.0: seed = super(HomotopyMixin, self).seed(ensemble_member) else: # Seed with previous results seed = {} results = self.extract_results(ensemble_member) for key in results.keys(): seed[key] = Timeseries(self.times(key), self._results[ ensemble_member][key]) return seed def parameters(self, ensemble_member): parameters = super(HomotopyMixin, self).parameters(ensemble_member) options = self.homotopy_options() parameters[options['homotopy_parameter']] = self._theta return parameters def homotopy_options(self): return {'delta_theta_0' : 1.0, 'delta_theta_min' : 0.01, 'homotopy_parameter': 'theta'} def optimize(self): self._theta = 0.0 # Homotopy parameter options = self.homotopy_options() delta_theta = options['delta_theta_0'] while self._theta <= 1.0: logger.info("Solving with homotopy parameter theta = {}.".format(self._theta)) success = super(HomotopyMixin, self).optimize() if not success: if self._theta == 0.0: return False self._theta -= delta_theta delta_theta /= 2 if delta_theta < options['delta_theta_min']: return False self._theta += delta_theta return True \ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!