def __init__(self, dae, nSteps): # check inputs assert isinstance(dae, Dae) assert isinstance(nSteps, int) # make sure dae has everything assert hasattr(dae, '_residual') self.dae = dae self.dae._freeze('MultipleShootingStage(dae)') # set up design vars self.nSteps = nSteps self.states = C.msym("x", self.nStates(), self.nSteps) self.actions = C.msym("u", self.nActions(), self.nSteps) self.params = C.msym("p", self.nParams()) # self._dvs = C.msym("dv",self.nStates()*self.nSteps+self.nActions()*self.nSteps+self.nParams()) # # numXVars = self.nStates()*self.nSteps # numUVars = self.nActions()*self.nSteps # numPVars = self.nParams() # # self.states = C.reshape(self._dvs[:numXVars], [self.nStates(), self.nSteps]) # self.actions = C.reshape(self._dvs[numXVars:numXVars+numUVars], [self.nActions(), self.nSteps]) # self.params = self._dvs[numXVars+numUVars:] # # assert self.states.size() == numXVars # assert self.actions.size() == numUVars # assert self.params.size() == numPVars # set up interface self._constraints = Constraints() self._bounds = Bounds(self.dae._xNames, self.dae._uNames, self.dae._pNames, self.nSteps) self._initialGuess = InitialGuess(self.dae._xNames, self.dae._uNames, self.dae._pNames, self.nSteps) self._designVars = DesignVars( (self.dae._xNames, self.states), (self.dae._uNames, self.actions), (self.dae._pNames, self.params), self.nSteps)