Skip to content

Interfaces

Classes

Class name Description
OptimalControlProblem Create an OCP
NMPCSolver Configurate the solver
OCPSolver Solve the very first OCP
DynamicSystem Create a dynamic system

OptimalControlProblem

Formulate an OCP.

Example

./NMPC_Problem_Formulation.m

Properties Description
dim structure.{lambda,mu,u;x;p}, dimensions of lambda, mu, u, x, p.
lambda symbolic vector, multiplier vector.
mu symbolic vector, multiplier vector.
u symbolic vector, input vector.
x symbolic vector, state vector.
p symbolic vector, parameter vector.
f symbolic expression, function f.
M symbolic expression, matrix M .
L symbolic expression, function L.
C symbolic expression, function C.
N [1,1], number of discretization grids N.
T [1,1], prediction horizon T.
deltaTau [1,1], discretization size (T/N).
discretizationMethod string, discretization method.
isMEnabled bool, whether the M matrix is enabled.
Functions Description
OptimalControlProblem Constructor.
Input:
muDim: [1,1], dimension of mu.
uDim: [1,1], dimension of u.
xDim: [1,1], dimension of x.
pDim: [1,1], dimension of p.
T: [1,1], prediction horizon.
N: [1,1], number of discretization grids.
Output:
OptimalControlProblem
setf Set f.
Inherit from DynamicSystem
setM Set M.
Inherit from DynamicSystem
setStateName Give names to all or part of the states.
Inherit from DynamicSystem
setInputName Give names to all or part of the inputs.
Inherit from DynamicSystem
setParameterName Give names to all or part of the parameters.
Inherit from DynamicSystem
setL Set L.
Input:
L: symbolic expression, function L.
Output: none.
setC Set C.
Input:
C: symbolic expression, function C.
Output: none.
setT Set T.
Input:
T: symbolic variable/double [1,1], must be included in p if it is a symbolic variable.
Output: none.
setDiscretizationMethod Set the discretization method.
Input:
method: string, 'Euler' or 'RK4', discretization method.
Output: none
codeGen Generate necessary files.
Input: none.
Output: none.

NMPCSolver

Configurate the NMPC solver.

Example

./NMPC_Problem_Formulation.m

Properties Description
OCP OptimalControlProblem, OptimalControlProblem object.
HessianApproximation string, Hessian approximation method.
Functions Description
NMPCSolver Constructor.
Input:
OCP: OptimalControlProblem, OptimalControlProblem object.
Output:
NMPCSolver
setHessianApproximation Set the Hessian approximation method.
Input:
method: string, 'Newton', 'GaussNewton' or 'GaussNewtonLC', method of Hessian approximation.
Output: none
codeGen Generate necessary files.
Input: none.
Output: none.

OCPSolver

Solve the very first OCP offline.

Example

./NMPC_Problem_Formulation.m

Properties Description
OCP OptimalControlProblem, OptimalControlProblem object.
NMPCSolver NMPCSolver, NMPCSolver object.
x0 [xDim,1], initial state.
lambda [xDim,N], multipliers.
mu [muDim,N], multipliers.
u [uDim,N], inputs.
x [xDim,N], states.
p [pDim,N], given parameters.
LAMBDA [xDim,xDim,N], dependent variable LAMBDA.
Functions Description
OCPSolver Constructor.
Input:
OCP: OptimalControlProblem, OptimalControlProblem object.
NMPCSolver: NMPCSolver, NMPCSolver object.
x0: [xDim,1], initial state.
pVal: [pDim,N], given parameters.
Output:
OCPSolver
OCPSolve Solve the OCP with a providing initial guess offline.
Input:
lambdaInitGuess: [xDim,N], initial guess of lambda.
muInitGuess: [muDim,N], initial guess of mu.
uInitGuess: [uDim,N], initial guess of u.
xInitGuess: [xDim,N], initial guess of x.
method: string, 'fsolve' or 'NMPC_Iter_GaussNewton', solver.
Output:
lambda: [xDim,N], optimal value of lambda.
mu: [muDim,N], optimal value of mu.
u: [uDim,N], optimal value of u.
x: [xDim,N], optimal value of x.
initFromMatFile Initialize from file with automatic interpolation.
Input:
matFile: string, file name of the mat file.
Output:
lambda: [xDim,N], interpolated value of lambda.
mu: [muDim,N], interpolated value of mu.
u: [uDim,N], interpolated value of u.
x: [xDim,N], interpolated value of x.
initFromStartEnd Initialize from the start and the end values by linear interpolation.
Input:
lambdaStart: [xDim,1], start value of lambda.
muStart: [muDim,1], start value of mu.
uStart: [uDim,1], start value of u.
xStart: [xDim,1], start value of x.
lambdaEnd: [xDim,1], end value of lambda.
muEnd: [muDim,1], end value of mu.
uEnd: [uDim,1], end value of u.
xEnd: [xDim,1], end value of x.
method: string, 'fsolve' or 'NMPC_Iter_GaussNewton', solver.
Output:
lambda: [xDim,N], interpolated value of lambda.
mu: [muDim,N], interpolated value of mu.
u: [uDim,N], interpolated value of u.
x: [xDim,N], interpolated value of x.
getLAMBDA Get the dependent variable LAMBDA from the given x0, lambda, mu, u, x, p.
Input:
x0: [xDim,1], initial state.
lambda: [xDim,N], lambda.
mu: [muDim,N], mu.
u: [uDim,N], u.
x: [xDim,N], x.
p: [pDim,N], p.
Output:
LAMBDA: [xDim,xDim,N]
getCost Get the cost function from the given u, x, p.
Input:
u: [uDim,N], u.
x: [xDim,N], x.
p: [pDim,N], p.
Output:
cost: [1,1]

DynamicSystem

Construct a dynamic system M(u(t),x(t),p(t))\dot{x}=f(u(t),x(t),p(t)).

Example

./NMPC_Problem_Formulation.m

Properties Description
dim structure.{u;x;p}, dimensions of u, x, p.
u symbolic vector, input vector.
x symbolic vector, state vector.
p symbolic vector, parameter vector.
f symbolic expression, function f.
M symbolic expression, matrix M .
isMEnabled bool, whether the M matrix is enabled.
Functions Description
DynamicSystem Constructor.
Input:
uDim: [1,1], dimension of u.
xDim: [1,1], dimension of x.
pDim: [1,1], dimension of p.
Output:
DynamicSystem
setf Set f.
Input:
f: symbolic expression, function f.
Output: none.
setM Set M.
Input:
M: symbolic expression, M matrix.
Output: none.
setStateName Give names to all or part of the states.
Example:
[X,Y,Z] =~.setStateName({'X','Y','Z'});
[X,Z] =~.setStateName({'X','Z'},[1 3]);
setInputName Give names to all or part of the inputs.
Example:
[F1,F2,F3] =~.setInputName({'F1','F2','F3'};
[F1,F3] =~.setInputName({'F1','F3'},[1 3]);
setParameterName Give names to all or part of the parameters.
Example:
[a,b,c] =~.setParameterName({'a','b','c'};
[a,c] =~.setParameterName({'a','c'},[1 3]);
codeGen Generate necessary files.
Input: none.
Output: none.

Functions

Function name Description
NMPC_Iter Perform one iteration for solving the KKT conditions.
NMPC_Iter_CodeGen Generate code for function NMPC_Iter.
SIM_Plant_RK4 Simulate the dynamic system using the 4-order Runge-Kutta method.
Timer Specify your own timer function.

NMPC_Iter

Example

./Simu_Matlab.m

Function name NMPC_Iter
Description Perform one iteration to solve the KKT conditions.
Input x0: [xDim,1], initial state.
lambda: [xDim,N/DoP,DoP].
mu: [muDim,N/DoP,DoP].
u: [uDim,N/DoP,DoP].
x: [xDim,N/DoP,DoP].
p: [pDim,N/DoP,DoP], given parameters.
LAMBDA: [xDim,xDim,N/DoP,DoP].
discretizationMethod: string, 'Euler' or 'RK4'.
isMEnabled: bool.
Output lambda: [xDim,N/DoP,DoP].
mu: [muDim,N/DoP,DoP].
u: [uDim,N/DoP,DoP].
x: [xDim,N/DoP,DoP].
LAMBDA: [xDim,xDim,N/DoP,DoP].
cost: [1,1], evaluation of the cost function after iteration.
error: [1,1], Euclidean norm of the KKT conditions.
timeElapsed: [1,1], computation time.

NMPC_Iter_CodeGen

Example

./Simu_Simulink_Setup.m

Function name NMPC_Iter_CodeGen
Description Generate code for function NMPC_Iter.
Input target: string, 'mex', 'dll', or 'mex'.
targetLang: string, 'C' or 'C++'.
args: cell, arguments applied to NMPC_Iter.
Output None

SIM_Plant_RK4

Example

./Simu_Matlab.m

Function name SIM_Plant_RK4
Description Simulate the dynamic system using the 4-order Runge-Kutta method.
Input u: [uDim,1], inputs applied to the plant.
x: [xDim,1], current state of the plant.
p: [pDim,1], given parameters.
Ts: [1,1], sampling interval.
Output xNext: [xDim,1], next state of the plant.

Timer

Example

./Timer.m

Function name Timer
Description Measure the current time.
Input None
Output t: [1,1], current time.
Statement Create Timer.m in the working directory to specify your own timer function.