Source code for yaocptool.methods.classic.directmethod

# -*- coding: utf-8 -*-
"""
Created on Fri Oct 21 16:40:15 2016

@author: marco
"""
from casadi import substitute

from yaocptool.methods.base.solutionmethodsbase import SolutionMethodsBase


[docs]class DirectMethod(SolutionMethodsBase):
[docs] def __init__(self, problem, **kwargs): """ :param problem: yaocptool.modelling.ocp.OptimalControlProblem :param integrator_type: str :param solution_method: str :param degree: int :param discretization_scheme: str 'multiple-shooting' | 'collocation' """ self.cost_as_a_sum = False super(DirectMethod, self).__init__(problem, **kwargs) self.solution_class = 'direct' self.has_cost_state = False
def _parametrize_control(self): u_pol = self.create_control_approximation() self.problem.replace_variable(self.model.u, u_pol) if hasattr(self.problem, 'H'): self.problem.H = substitute(self.problem.H, self.model.u, u_pol) if hasattr(self, 's'): self.s = substitute(self.s, self.model.u, u_pol) if 'g' in self.__dict__: g = self.g g = substitute(g, self.model.u, u_pol) self.g = g return u_pol def _create_cost_state(self): if not self.has_cost_state: x_c = self.problem.create_cost_state() self.has_cost_state = True self.problem.V = self.problem.V + x_c
[docs] def prepare(self): super(DirectMethod, self).prepare() self._create_cost_state() self._parametrize_control()