# set_objective¶

Class method.

do_mpc.estimator.MHE.set_objective(self, stage_cost, arrival_cost)

Set the stage cost $$l(\cdot)$$ and arrival cost $$m(\cdot)$$ function for the MHE problem:

\begin{split}\underset{ \begin{array}{c} \mathbf{x}_{0:N+1}, \mathbf{u}_{0:N}, p,\\ \mathbf{w}_{0:N}, \mathbf{v}_{0:N} \end{array} }{\mathrm{min}} &m(x_0,\tilde{x}_0, p,\tilde{p}) +\sum_{k=0}^{N-1} l(v_k, w_k, p, p_{\text{tv},k}),\\ &\left.\begin{aligned} \mathrm{s.t.}\quad x_{k+1} &= f(x_k,u_k,z_k,p,p_{\text{tv},k})+ w_k,\\ y_k &= h(x_k,u_k,z_k,p,p_{\text{tv},k}) + v_k, \\ &g(x_k,u_k,z_k,p_k,p_{\text{tv},k}) \leq 0 \end{aligned}\right\} k=0,\dots, N\end{split}

Use the class attributes:

• mhe._w as $$w_k$$
• mhe._v as $$v_k$$
• mhe._x_prev as $$\tilde{x}_0$$
• mhe._x as $$x_0$$
• mhe._p_est_prev as $$\tilde{p}_0$$
• mhe._p_est as $$p_0$$

To formulate the objective function and pass the stage cost and arrival cost independently.

Note

The retrieved attributes are symbolic structures, which can be queried with the given variable names, e.g.:

x1 = mhe._x['state_1']


For a vector of all states, use the .cat method as shown in the example below.

Example:

# Get variables:
v = mhe._v.cat

stage_cost = v.T@np.diag(np.array([1,1,1,20,20]))@v

x_0 = mhe._x
x_prev = mhe._x_prev
p_0 = mhe._p_est
p_prev = mhe._p_est_prev

dx = x_0.cat - x_prev.cat
dp = p_0.cat - p_prev.cat

arrival_cost = 1e-4*dx.T@dx + 1e-4*dp.T@dp

mhe.set_objective(stage_cost, arrival_cost)


Note

Use set_default_objective() as a high-level wrapper for this method, if you want to use the default MHE objective function.

Parameters: stage_cost (CasADi expression) – Stage cost that is added to the MHE objective at each age. arrival_cost (CasADi expression) – Arrival cost that is added to the MHE objective at the initial state. None None