示例#1
0
文件: pe.py 项目: adbuerger/casiopeia
    def _set_optimization_variables_initials(self, pinit, xinit):

        xinit = inputchecks.check_states_data(xinit, \
            self._discretization.system.nx, \
            self._discretization.number_of_intervals)
        repretitions_xinit = \
            self._discretization.optimization_variables["X"][:,:-1].shape[1] / \
                self._discretization.number_of_intervals
        
        Xinit = ci.repmat(xinit[:, :-1], repretitions_xinit, 1)

        Xinit = ci.horzcat([ \

            Xinit.reshape((self._discretization.system.nx, \
                Xinit.size() / self._discretization.system.nx)),
            xinit[:, -1],

            ])

        pinit = inputchecks.check_parameter_data(pinit, \
            self._discretization.system.np)
        Pinit = pinit

        Vinit = np.zeros(self._discretization.optimization_variables["V"].shape)
        EPS_Uinit = np.zeros( \
            self._discretization.optimization_variables["EPS_U"].shape)

        self._optimization_variables_initials = ci.veccat([ \

                Pinit,
                Xinit,
                EPS_Uinit,
                Vinit,

            ])
示例#2
0
    def run_system_simulation(self, x0, time_points, udata = None, \
        integrator_options = {}, print_status = True):

        r'''
        :param x0: state values :math:`x_0 \in \mathbb{R}^{\text{n}_\text{x}}`
                   at the first time point :math:`t_0`
        :type x0: numpy.ndarray, casadi.DMatrix, list

        :param time_points: switching time points for the controls
                            :math:`t_\text{N} \in \mathbb{R}^\text{N}`
        :type time_points: numpy.ndarray, casadi.DMatrix, list

        :param udata: optional, values for the time-varying controls at the
                      first :math:`N-1` switching time points 
                      :math:`u_\text{N} \in \mathbb{R}^{\text{n}_\text{u} \times \text{N}-1}`; if no values
                      are given, 0 will be used
        :type udata: numpy.ndarray, casadi.DMatrix

        :param integrator_options: optional, options to be passed to the CasADi
                                   integrator (see the CasADi documentation
                                   for a list of all possible options)
        :type integrator_options: dict

        :param print_status: optional, set to ``True`` (default) or ``False`` to
                                       enable or disable console printing.
        :type print_status: bool

        This function will run a system simulation for the specified initial
        state values and control data from :math:`t_0` to
        :math:`t_\text{N}`.

        If you receive integrator-related error messages during the simulation,
        please check the corresponding parts of the
        CasADi documentation.

        After the simulation has finished, the simulation results
        :math:`x_\text{N}` can be accessed via the class attribute
        ``Simulation.simulation_results``.

        '''
        if print_status:

            print('\n' + '# ' + 23 * '-' + \
                ' casiopeia system simulation ' + 22 * '-' + ' #')
            print('\nRunning system simulation, this might take some time ...') 

        self.__initialize_simulation(x0 = x0, time_points = time_points, \
            udata = udata, integrator_options_user = integrator_options)

        self.__simulation_results = ci.horzcat([ \

            self.__x0,
            self.__simulation(x0 = self.__x0, p = self.__simulation_input)["xf"]

            ])

        if print_status:

            print("\nSystem simulation finished.")
示例#3
0
    def run_system_simulation(self, x0, time_points, udata=None, integrator_options={}, print_status=True):

        r"""
        :param x0: state values :math:`x_0 \in \mathbb{R}^{\text{n}_\text{x}}`
                   at the first time point :math:`t_0`
        :type x0: numpy.ndarray, casadi.DMatrix, list

        :param time_points: switching time points for the controls
                            :math:`t_\text{N} \in \mathbb{R}^\text{N}`
        :type time_points: numpy.ndarray, casadi.DMatrix, list

        :param udata: optional, values for the time-varying controls at the
                      first :math:`N-1` switching time points 
                      :math:`u_\text{N} \in \mathbb{R}^{\text{n}_\text{u} \times \text{N}-1}`; if no values
                      are given, 0 will be used
        :type udata: numpy.ndarray, casadi.DMatrix

        :param integrator_options: optional, options to be passed to the CasADi
                                   integrator (see the CasADi documentation
                                   for a list of all possible options)
        :type integrator_options: dict

        :param print_status: optional, set to ``True`` (default) or ``False`` to
                                       enable or disable console printing.
        :type print_status: bool

        This function will run a system simulation for the specified initial
        state values and control data from :math:`t_0` to
        :math:`t_\text{N}`.

        If you receive integrator-related error messages during the simulation,
        please check the corresponding parts of the
        CasADi documentation.

        After the simulation has finished, the simulation results
        :math:`x_\text{N}` can be accessed via the class attribute
        ``Simulation.simulation_results``.

        """
        if print_status:

            print("\n" + "# " + 23 * "-" + " casiopeia system simulation " + 22 * "-" + " #")
            print("\nRunning system simulation, this might take some time ...")

        self.__initialize_simulation(
            x0=x0, time_points=time_points, udata=udata, integrator_options_user=integrator_options
        )

        self.__simulation_results = ci.horzcat(
            [self.__x0, self.__simulation(x0=self.__x0, p=self.__simulation_input)["xf"]]
        )

        if print_status:

            print("\nSystem simulation finished.")
示例#4
0
    def _set_optimization_variables_initials(self, qinit, x0, uinit):

        self.simulation = Simulation(self._discretization.system, \
            self._pdata, qinit)
        self.simulation.run_system_simulation(x0, \
            self._discretization.time_points, uinit, print_status = False)
        xinit = self.simulation.simulation_results

        repretitions_xinit = \
            self._discretization.optimization_variables["X"][:,:-1].shape[1] / \
                self._discretization.number_of_intervals
        
        Xinit = ci.repmat(xinit[:, :-1], repretitions_xinit, 1)

        Xinit = ci.horzcat([ \

            Xinit.reshape((self._discretization.system.nx, \
                Xinit.size() / self._discretization.system.nx)),
            xinit[:, -1],

            ])

        uinit = inputchecks.check_controls_data(uinit, \
            self._discretization.system.nu, \
            self._discretization.number_of_intervals)
        Uinit = uinit

        qinit = inputchecks.check_constant_controls_data(qinit, \
            self._discretization.system.nq)
        Qinit = qinit

        self._optimization_variables_initials = ci.veccat([ \

                Uinit,
                Qinit,
                Xinit,

            ])
示例#5
0
    def _set_optimization_variables_initials(self, qinit, x0, uinit):

        self.simulation = Simulation(self._discretization.system, \
            self._pdata, qinit)
        self.simulation.run_system_simulation(x0, \
            self._discretization.time_points, uinit, print_status = False)
        xinit = self.simulation.simulation_results

        repretitions_xinit = \
            self._discretization.optimization_variables["X"][:,:-1].shape[1] / \
                self._discretization.number_of_intervals
        
        Xinit = ci.repmat(xinit[:, :-1], repretitions_xinit, 1)

        Xinit = ci.horzcat([ \

            Xinit.reshape((self._discretization.system.nx, \
                Xinit.numel() / self._discretization.system.nx)),
            xinit[:, -1],

            ])

        uinit = inputchecks.check_controls_data(uinit, \
            self._discretization.system.nu, \
            self._discretization.number_of_intervals)
        Uinit = uinit

        qinit = inputchecks.check_constant_controls_data(qinit, \
            self._discretization.system.nq)
        Qinit = qinit

        self._optimization_variables_initials = ci.veccat([ \

                Uinit,
                Qinit,
                Xinit,

            ])
示例#6
0
文件: pe.py 项目: MannyKayy/casiopeia
    def _set_optimization_variables_initials(self, pinit, xinit):

        xinit = inputchecks.check_states_data(xinit, \
            self._discretization.system.nx, \
            self._discretization.number_of_intervals)
        repretitions_xinit = \
            self._discretization.optimization_variables["X"][:,:-1].shape[1] / \
                self._discretization.number_of_intervals

        Xinit = ci.repmat(xinit[:, :-1], repretitions_xinit, 1)

        Xinit = ci.horzcat([ \

            Xinit.reshape((self._discretization.system.nx, \
                Xinit.numel() / self._discretization.system.nx)),
            xinit[:, -1],

            ])

        pinit = inputchecks.check_parameter_data(pinit, \
            self._discretization.system.np)
        Pinit = pinit

        Vinit = np.zeros(
            self._discretization.optimization_variables["V"].shape)
        EPS_Uinit = np.zeros( \
            self._discretization.optimization_variables["EPS_U"].shape)

        self._optimization_variables_initials = ci.veccat([ \

                Pinit,
                Xinit,
                Vinit,
                EPS_Uinit,

            ])