Beispiel #1
0
    def _merge_optimization_variables(self):

        optimization_variables = [ \
            pe_setup._optimization_variables for \
            pe_setup in self._pe_setups]

        self._optimization_variables = ci.vertcat(optimization_variables)
Beispiel #2
0
    def _merge_optimization_variables(self):

        optimization_variables = [ \
            doe_setup._optimization_variables for \
            doe_setup in self._doe_setups]

        self._optimization_variables = ci.vertcat(optimization_variables)
Beispiel #3
0
    def _setup_constraints(self):

        self._constraints = ci.vertcat([ \

                self._measurement_deviations,
                self._discretization.equality_constraints,

            ])
Beispiel #4
0
    def _merge_cov_matrix_derivative_directions(self):

        cov_matrix_derivative_directions = \
            [doe_setup._cov_matrix_derivative_directions for
            doe_setup in self._doe_setups]

        self._cov_matrix_derivative_directions = \
            ci.vertcat(cov_matrix_derivative_directions)
Beispiel #5
0
    def _merge_optimization_variables_upper_bounds(self):

        optimization_variables_upper_bounds = [ \
            doe_setup._optimization_variables_upper_bounds for \
            doe_setup in self._doe_setups]

        self._optimization_variables_upper_bounds = \
            ci.vertcat(optimization_variables_upper_bounds)
Beispiel #6
0
    def _merge_optimization_variables_initials(self):

        optimization_variables_initials = [ \
            doe_setup._optimization_variables_initials for \
            doe_setup in self._doe_setups]

        self._optimization_variables_initials = \
            ci.vertcat(optimization_variables_initials)
Beispiel #7
0
    def _merge_optimization_variables_initials(self):

        optimization_variables_initials = [ \
            pe_setup._optimization_variables_initials for \
            pe_setup in self._pe_setups]

        self._optimization_variables_initials = \
            ci.vertcat(optimization_variables_initials)
Beispiel #8
0
    def _merge_cov_matrix_derivative_directions(self):

        cov_matrix_derivative_directions = \
            [doe_setup._cov_matrix_derivative_directions for
            doe_setup in self._doe_setups]

        self._cov_matrix_derivative_directions = \
            ci.vertcat(cov_matrix_derivative_directions)
Beispiel #9
0
    def _merge_optimization_variables_upper_bounds(self):

        optimization_variables_upper_bounds = [ \
            doe_setup._optimization_variables_upper_bounds for \
            doe_setup in self._doe_setups]

        self._optimization_variables_upper_bounds = \
            ci.vertcat(optimization_variables_upper_bounds)
Beispiel #10
0
    def _setup_constraints(self):

        self._constraints = ci.vertcat([ \

                self._measurement_deviations,
                self._equality_constraints_controls_applied,

            ])
Beispiel #11
0
    def _setup_constraints(self):

        self._constraints = ci.vertcat([ \

                self._measurement_deviations,
                self._discretization.equality_constraints,

            ])
Beispiel #12
0
    def _setup_constraints(self):

        self._constraints = ci.vertcat([ \

                self._measurement_deviations,
                self._equality_constraints_controls_applied,

            ])
Beispiel #13
0
    def _setup_gauss_newton_lagrangian_hessian(self):

        gauss_newton_lagrangian_hessian_diag = ci.vertcat([ \
            ci.mx(self._cov_matrix_derivative_directions.shape[0] - \
                self._weightings_vectorized.shape[0], 1), \
            self._weightings_vectorized])

        self._gauss_newton_lagrangian_hessian = ci.diag( \
            gauss_newton_lagrangian_hessian_diag)
Beispiel #14
0
    def _set_measurement_deviations(self):

        self._measurement_deviations = ci.vertcat([ \

                ci.vec(self._measurements_controls_applied) - \
                self._measurement_data_vectorized + \
                ci.vec(self._discretization.optimization_variables["V"])

            ])
Beispiel #15
0
    def _set_measurement_deviations(self):

        self._measurement_deviations = ci.vertcat([ \

                ci.vec(self._discretization.measurements) - \
                self._measurement_data_vectorized + \
                ci.vec(self._discretization.optimization_variables["V"])

            ])
Beispiel #16
0
    def _setup_gauss_newton_lagrangian_hessian(self):

        gauss_newton_lagrangian_hessian_diag = ci.vertcat([ \
            ci.mx(self._cov_matrix_derivative_directions.shape[0] - \
                self._weightings_vectorized.shape[0], 1), \
            self._weightings_vectorized])

        self._gauss_newton_lagrangian_hessian = ci.diag( \
            gauss_newton_lagrangian_hessian_diag)
Beispiel #17
0
    def __generate_scaled_dae(self):

        # ODE time scaling according to:
        # https://groups.google.com/forum/#!topic/casadi-users/AeXzJmBH0-Y

        t_scale = ci.mx_sym("t_scale", 1)

        self.__dae_scaled = {"x": self.__system.x, \
            "p": ci.vertcat([t_scale, self.__system.u]), \
            "ode": t_scale * self.__ode_parameters_applied}
Beispiel #18
0
    def gauss_newton_lagrangian_hessian(self):

        gauss_newton_lagrangian_hessian_diag = ci.vertcat([ \
            ci.mx(self._optimization_variables.shape[0] - \
                self._weightings_vectorized.shape[0], 1), \
            self._weightings_vectorized])

        gauss_newton_lagrangian_hessian = ci.diag( \
            gauss_newton_lagrangian_hessian_diag)

        return gauss_newton_lagrangian_hessian
Beispiel #19
0
    def gauss_newton_lagrangian_hessian(self):

        gauss_newton_lagrangian_hessian_diag = ci.vertcat([ \
            ci.mx(self._optimization_variables.shape[0] - \
                self._weightings_vectorized.shape[0], 1), \
            self._weightings_vectorized])

        gauss_newton_lagrangian_hessian = ci.diag( \
            gauss_newton_lagrangian_hessian_diag)

        return gauss_newton_lagrangian_hessian
Beispiel #20
0
    def _setup_covariance_matrix(self, kkt_matrix, \
            number_of_unknown_parameters):

        I = ci.mx_eye(number_of_unknown_parameters)
        O = ci.mx(kkt_matrix.shape[0] - number_of_unknown_parameters, \
            number_of_unknown_parameters)

        Z_p = ci.vertcat([I, O])

        self._covariance_matrix = ci.solve(kkt_matrix, Z_p, "csparse")[ \
            :number_of_unknown_parameters, :number_of_unknown_parameters]
Beispiel #21
0
    def _setup_covariance_matrix(self, kkt_matrix, \
            number_of_unknown_parameters):


        I = ci.mx_eye(number_of_unknown_parameters)
        O = ci.mx(kkt_matrix.shape[0] - number_of_unknown_parameters, \
            number_of_unknown_parameters)

        Z_p = ci.vertcat([I,O])

        self._covariance_matrix = ci.solve(kkt_matrix, Z_p, "csparse")[ \
            :number_of_unknown_parameters, :number_of_unknown_parameters]
Beispiel #22
0
    def __generate_scaled_dae(self):

        # ODE time scaling according to:
        # https://groups.google.com/forum/#!topic/casadi-users/AeXzJmBH0-Y

        t_scale = ci.mx_sym("t_scale", 1)

        dae_scaled = ci.mx_function(
            "dae_scaled",
            ci.daeIn(x=self.__system.x, p=ci.vertcat([t_scale, self.__system.u])),
            ci.daeOut(ode=t_scale * self.__ode_parameters_applied),
        )

        self.__dae_scaled = dae_scaled.expand()
Beispiel #23
0
    def _merge_and_setup_constraints(self):

        constraints = [self._doe_setups[0]._constraints]

        for k, doe_setup in enumerate(self._doe_setups[:-1]):

            # Connect estimation problems by setting p_k - p_k+1 = 0

            constraints.append(doe_setup._discretization.optimization_variables["P"] - \
                self._doe_setups[k+1]._discretization.optimization_variables["P"])

            constraints.append(self._doe_setups[k+1]._constraints)

        self._constraints = ci.vertcat(constraints)
Beispiel #24
0
    def _merge_and_setup_constraints(self):

        constraints = [self._pe_setups[0]._constraints]

        for k, pe_setup in enumerate(self._pe_setups[:-1]):

            # Connect estimation problems by setting p_k - p_k+1 = 0

            constraints.append(pe_setup._discretization.optimization_variables["P"] - \
                self._pe_setups[k+1]._discretization.optimization_variables["P"])

            constraints.append(self._pe_setups[k + 1]._constraints)

        self._constraints = ci.vertcat(constraints)
Beispiel #25
0
    def __initialize_simulation(self, x0, time_points, udata, integrator_options_user):

        self.__x0 = inputchecks.check_states_data(x0, self.__system.nx, 0)

        time_points = inputchecks.check_time_points_input(time_points)
        number_of_integration_steps = time_points.size - 1
        time_steps = time_points[1:] - time_points[:-1]

        udata = inputchecks.check_controls_data(udata, self.__system.nu, number_of_integration_steps)

        self.__simulation_input = ci.vertcat([np.atleast_2d(time_steps), udata])

        integrator_options = integrator_options_user.copy()
        integrator_options.update({"t0": 0, "tf": 1})  # ,  "number_of_finite_elements": 1})
        # integrator = ci.Integrator("integrator", "rk", \
        integrator = ci.Integrator("integrator", "cvodes", self.__dae_scaled, integrator_options)

        self.__simulation = integrator.mapaccum("simulation", number_of_integration_steps)
Beispiel #26
0
    def __initialize_simulation(self, x0, time_points, udata, \
        integrator_options_user):

        self.__x0 = inputchecks.check_states_data(x0, self.__system.nx, 0)

        time_points = inputchecks.check_time_points_input(time_points)
        number_of_integration_steps = time_points.size - 1
        time_steps = time_points[1:] - time_points[:-1]

        udata = inputchecks.check_controls_data(udata, self.__system.nu, \
            number_of_integration_steps)

        self.__simulation_input = ci.vertcat([np.atleast_2d(time_steps), udata])

        integrator_options = integrator_options_user.copy()
        integrator_options.update({"t0": 0, "tf": 1, "expand": True}) # ,  "number_of_finite_elements": 1})
        # integrator = ci.Integrator("integrator", "rk", \
        integrator = ci.Integrator("integrator", "cvodes", \
            self.__dae_scaled, integrator_options)

        self.__simulation = integrator.mapaccum("simulation", \
            number_of_integration_steps)
Beispiel #27
0
    def _merge_measurement_data(self):

        measurement_data = [pe_setup._measurement_data_vectorized for \
            pe_setup in self._pe_setups]

        self._measurement_data_vectorized = ci.vertcat(measurement_data)
Beispiel #28
0
    def _merge_weightings(self):

        weightings = [pe_setup._weightings_vectorized for \
            pe_setup in self._pe_setups]

        self._weightings_vectorized = ci.vertcat(weightings)
Beispiel #29
0
    def _merge_residuals(self):

        residuals = [pe_setup._residuals for \
            pe_setup in self._pe_setups]

        self._residuals = ci.vertcat(residuals)
Beispiel #30
0
    def _merge_measurement_data(self):

        measurement_data = [pe_setup._measurement_data_vectorized for \
            pe_setup in self._pe_setups]

        self._measurement_data_vectorized = ci.vertcat(measurement_data)
Beispiel #31
0
    def _merge_weightings(self):

        weightings = [pe_setup._weightings_vectorized for \
            pe_setup in self._pe_setups]

        self._weightings_vectorized = ci.vertcat(weightings)
Beispiel #32
0
    def _merge_residuals(self):

        residuals = [pe_setup._residuals for \
            pe_setup in self._pe_setups]

        self._residuals = ci.vertcat(residuals)