Linear Time Invariant Systems#

A Linear Time Invariant system has a representation

\[\begin{split}\mat{c}{x_{k+1} \\ z_k} = \mat{c|c}{\Acl & \Bcl \hl \Ccl & \Dcl } \mat{c}{x_k \\ w_k}.\end{split}\]

System#

The algorithmic interconnection is

\[\begin{split}\begin{align*} w_k & \in F_k(z_k), \\ \mat{c}{x^N_{k+1} \hl z_k \\ y_k} &= \mat{c|cc}{A & B_z & B_u \hl C_z & D_{zd} & D_{zu} \\ C_y & D_{yd} & D_{yu}} \mat{c}{x_k^N \hl w_k \\ u_k}, \\ \mat{c}{\xi_{k+1} \\ u_k} &= \mat{c|c}{\Ac & \Bc \hl \Cc & \Dc } \mat{c}{\xi_k \\ y_k}. \end{align*}\end{split}\]
class system.lti.opt_system#

Bases: system.generic.opt_system_interface

OPT_SYSTEM interconnection of network and operators by default is LTI (linear time invariant)

Constructor Summary
opt_system(op, P, K, bind, tracking)#

OPT_SYSTEM Constructor

Method Summary
build_plant(iqc_data, rho)#

BUILD_PLANT: form the plant to be used for analysis or synthesis

Parameters:
  • iqc_data – from manager.iqc_op_all, information about the operator iqc descriptions

  • rho – exponential convergence rate (default 1)

Returns:
  • alg_psi – plant with filters (psi)

  • alg_loop – plant without filters, but after loop transformation (should be stable)

  • iqc_op – iqcs for the robust uncertainties

get_K(param)#

GET_K get the controller K

get_P(param)#

GET_P get the network P

nxi()#

nxi: number of states in controller

nxn()#

nxn: number of states in network

Regulator#

An open LTI system with disturbance \(d\) and regulated error \(e\) is

\[\begin{split}\begin{align} d_{k+1} &= S d_k, \\ \mat{c}{x_{k+1} \hl e_k \\ y_k} &= \mat{c|cc}{A & B_d & B_u \hl C_e & D_{ed} & D_{eu} \\ C_y & D_{yd} & D_{yu}} \mat{c}{x_k \hl d_k \\ u_k}. \end{align}\end{split}\]

The regulator equations for this system are to find \((\Pi, \Gamma, \Phi)\) satisfying

\[\begin{split}\begin{align} \mat{c}{\Pi S \hl 0 \\ \Phi} &= \mat{c|cc}{A & B_d & B_u \hl C_e & D_{ed} & D_{eu} \\ C_y & D_{yd} & D_{yu}} \mat{c}{\Pi \hl I \\ \Gamma}. \end{align}\end{split}\]

If these regulator equations fail, then there does not exist a well-posed and convergent optimization algorithm for this network.

class system.lti.regulator_lti#

Bases: system.generic.regulator_interface

REGULATOR_LTI Regulator for LTI systems

Constructor Summary
regulator_lti(sys)#

REGULATOR_LTI Constructor

Method Summary
connect_model(plant, rho)#

connect the plant to the model (nominal regulator equation) and discount by rho

Parameters:
  • plant – original system

  • rho – exponential weighting

Return:

plant_model – plant and model together

get_model(vars_reg)#

GET_MODEL fetch the internal model (nominal)

Parameters:

vars_reg – variables of the problem (regulator)

Return:

model – the full-order internal model

sys_regulated_aug()#

SYS_REGULATED_AUG augment the system by the regulated disturbance. ONLY used for reduced-order control

Return:

alg_aug – augmented plant with output channels [z, zp, e, y] and input channels [w, wp, d, u]

LMI Analysis#

class system.lti.lmi_analysis_lti#

Bases: system.generic.lmi_analysis_interface

LMI_ANALYSIS_LTI analysis LMIs for algorithmic interconnections involving linear-time-invariant (LTI) networks and controllers

Constructor Summary
lmi_analysis_lti(sys, config)#

LMI_ANALYSIS_LTI Constructor

Method Summary
create_vars_storage(cons, alg_psi, name)#

create_vars_storage create variables for the dissipation constraints

Parameters:
  • cons – accumulated constraints

  • alg_psi – the filtered algorithmic interconnection

  • name – a name for the variable

Returns:
  • vars_diss – variables of the problem in the dissipation constraints

  • cons – accumulated constraints

h2(vars, cons, diss)#

H2: certificate of stochastic performance

Parameters:
  • vars – variables of the problem

  • cons – accumulated constraints

  • diss (diss_data) – structure describing the dissipation constraint

Returns:
  • cons – accumulated constraints

  • objective – term to be minimized

  • con_M – PSD blocks for the dynamics constraint

p2p(vars, cons, diss)#

p2p: certificate of peak to peak induced norm :param vars: variables of the problem :param cons: accumulated constraints :param diss: structure describing the dissipation constraint :type diss: diss_data

Returns:
  • cons – accumulated constraints

  • objective – term to be minimized

  • con_M – PSD blocks for the dynamics constraint

process_recovery(sol, lmi_out, alg_psi, diss)#

recover the controller :param sol: solution structure :param lmi_out: output from solver :param alg_psi: the filtered algorithmic interconnection :param diss: structure describing the dissipation constraint :type diss: diss_data

Returns:

sol – solution structure

quad(vars, cons, diss)#

QUAD: certificate of quadratic performance

Parameters:
  • vars – variables of the problem

  • cons – accumulated constraints

  • diss (diss_data) – structure describing the dissipation constraint

Returns:
  • cons – accumulated constraints

  • objective – term to be minimized

  • con_M – PSD blocks for the dynamics constraint

LMI Synthesis#

class system.lti.lmi_synthesis_lti#

Bases: system.generic.lmi_synthesis_interface

LMI_SYNTHESIS_LTI synthesis LMIs for algorithmic interconnections involving linear-time-invariant (LTI) networks and controllers

Constructor Summary
lmi_synthesis_lti(sys, config)#

LMI_SYNTHESIS_LTI Constructor

Method Summary
augment_vars(vars, diss, con_M)#

AUGMENT_VARS add new variables/terms for recovery (useful for matrix elimination)

check_lower_triangular()#

CHECK_LOWER_TRIANGULAR is the D matrix constrained to be block-lower-triangular? This must be true to use matrix elimination

Returns:

is_tri (bool) – verdict on lower triangularity

create_vars_storage(cons, alg_psi, name)#

create_vars_storage create variables for the dissipation constraints

Parameters:
  • cons – accumulated constraints

  • alg_psi – the filtered algorithmic interconnection

  • name – a name for the variable

Returns:
  • vars_diss – variables of the problem in the dissipation constraints

  • cons – accumulated constraints

elimination()#

ELIMINATION is the matrix elimination lemma used?

get_GY_dim(n, ns)#

dimension of the GY term :param n: number of states :param ns: number of exogenous disturbances

Returns:

ys – size of GY matrix

get_storage(vars_diss, vars_reg)#

GET_STORAGE get the storage function matrix G

Parameters:
  • vars_diss – variables of the problem in the dissipation constraints

  • vars_reg – variables for regulator equation

Returns:

G – the closed-loop storage matrix (warped)

h2(vars, cons, diss)#

H2: certificate of stochastic performance

Parameters:
  • vars – variables of the problem

  • cons – accumulated constraints

  • diss (diss_data) – structure describing the dissipation constraint

Returns:
  • cons – accumulated constraints

  • objective – term to be minimized

  • con_M – PSD blocks for the dynamics constraint

p2p(vars, cons, diss)#
p2p: certificate of finite-horizon peak-to-peak norm bounds

when starting at a zero (steady state) initial condition, not transient performance.

Parameters:
  • cons – accumulated constraints

  • alg_psi – the filtered algorithmic interconnection

  • name – a name for the variable

Returns:
  • vars_diss – variables of the problem in the dissipation constraints

  • cons – accumulated constraints

Warning

not yet stable. do not use yet.

quad(vars, cons, diss)#

QUAD: certificate of infinite-horizon quadratic performance

Parameters:
  • vars – variables of the problem

  • cons – accumulated constraints

  • diss (diss_data) – structure describing the dissipation constraint

Returns:
  • cons – accumulated constraints

  • objective – term to be minimized

  • con_M – PSD blocks for the dynamics constraint

recover_K_from_elim(vars_rec)#

recover the eliminated matrices in the controller

Parameters:

vars_rec – recovered variables from solver

Returns:

Ak, Bk, Ck, Dk – controller matrices

LMI Synthesis, Reduced-Order Control#

LTI systems allow for reduced-order control synthesis

class system.lti.lmi_synthesis_lti_reduced_order#

Bases: system.lti.lmi_synthesis_lti

LMI_SYNTHESIS_LTI_REDUCED_ORDER reduced-order control synthesis LMIs for algorithmic interconnections involving linear-time-invariant (LTI) networks and controllers

Constructor Summary
lmi_synthesis_lti_reduced_order(sys, config)#

LMI_SYNTHESIS_LTI_REDUCED_ORDER Constructor

Method Summary
Pibar(vars_diss, vars_reg, invPi)#

similarity transformation for optimization over Pi used in regulator (reduced-order)

Parameters:
  • vars_diss – variables of the problem in the dissipation constraints

  • vars_reg – variables for regulator equation

  • inv_Pi (bool) – take inverse (true) or not (false)

Returns:

Pb – the portion of Pi

Pihat(vars_diss, vars_reg, invPi)#

similarity transformation for reduced-order control used in regulator (reduced-order)

Parameters:
  • vars_diss – variables of the problem in the dissipation constraints

  • vars_reg – variables for regulator equation

  • inv_Pi (bool) – take inverse (true) or not (false)

Returns:

Pb – the portion of Pi

con_spread(cons, vars)#

CON_SPREAD increase numerical conditioning by separating the primal and dual blocks. modified for reduced order control.

Parameters:
  • cons – accumulated constraints

  • vars – variables of the problem

Returns:

cons – accumulated constraints

connect_model(diss, rho)#

CONNECT_MODEL connect the plant to the internal model :param diss: information about dissipation relation :type diss: diss_data :param rho: discount rate

Returns:

P_modelaugmented generalized plant with internal model attached

create_vars(vars, cons, alg_psi, specs)#

CREATE_VARS create the variables for the problem :param vars: variables of the problem :param cons: accumulated constraints :param diss: structure describing the dissipation constraint :type diss: diss_data :param alg_psi: the filtered algorithmic interconnection :param specs: performance specifications

Returns:
  • vars – variables of the problem

  • cons – accumulated constraints

create_vars_controller(cons, alg_psi, name, D_mask)#

CREATE_VARS_CONTROLLER create the nonlinearly-transformed controller matrices :param cons: accumulated constraints :param alg_psi: the filtered algorithmic interconnection :param name: a name for the variable :param D_mask: sparsity pattern for D of the controller

Returns:
  • vars_K – controller variables [Ak, Bk, Ck, Dk], or some subset if elimination is used.

  • cons – accumulated constraints

create_vars_regulator()#

CREATE_VARS_REGULATOR parameterize the solutions to the regulator equations use this as a variable in reduced-order control :Returns: vars_reg – variables of the problem (regulator)

get_K_mask(nxi)#

K_mask: controller sparsity pattern :param nxi: number of controller states

Return:

K_mask – pattern of the controller

process_recovery(sol, lmi_out, alg_psi, diss)#

recover the controller :param sol: solution structure :param lmi_out: output from solver :param alg_psi: the filtered algorithmic interconnection :param diss: structure describing the dissipation constraint :type diss: diss_data

Returns:

sol – solution structure

recover_K_from_elim(vars_rec)#

recover the eliminated matrices in the controller

Parameters:

vars_rec – recovered variables from solver

Returns:

Ak, Bk, Ck, Dk – controller matrices

recover_subcontroller(alg_psi, P_aug, sol)#

RECOVER_SUBCONTROLLER recover the subcontroller of the current mode/control :param alg_psi: the filtered algorithmic interconnection :param P_aug: the transformed augmented generalized plant before IQC :param sol: solution structure

Returns:
  • sol – solution structure

  • K_sub – the subcontroller

recover_subcontroller_warp(P_trans, vars_rec, rho)#

RECOVER_SUBCONTROLLER_WARP recover the nonlinearly warped controller dynamics and indexers :param alg_psi: the filtered algorithmic interconnection :param P_trans: the transformed generalized plant before IQC :param sol: solution structure :param rho: discount rate

Output:

K_nofeed: subcontroller without direct feedthrough Gcl: closed-loop storage matrix (original) Ycl: similarity transformation/nonlinear warping