Integral Quadratic Constraints#
Input-output sequences of the operators satisfy a family of relations defined by {doc}Integral Quadratic Constraints (IQC).
IQC Analysis#
Sequences \((w, z)\) obeying \(w_k \in F(z_k)\) are constrained by \(F\)’s membership in the operator class \(\F\). Valid relations among \((w, z)\) may expressed in the framework of Integral Quadratic Constraints (IQC) if \(0 \in F(0)\). This IQC methodology is used to certify the Robust Stability portion of the convergence test, the Regulator Equation requirement must be evaluated separately.
IQCs and Valid Relations#
An IQC with terminal cost is a tuple \((\Psi, M, X)\), where \(M, X\) are symmetric matrices, and \(\Psi\) is a linear system
The system \(\Psi\) is referred to as the filter of the IQC.
A sequence \((p, q)\) obeys the IQC \((\Psi, M, X)\) if the relation
holds for all time horizons \(T \in \N\), whenever \(\Psi\) is driven by the inputs \((p, q)\) starting from the initial condition \(\psi_0 = 0\).
IQCs for Operators#
Every operator class obeys a family of valid relations. Each relation is parameterized by a tuple \((\Psi, M, X, \ell)\), where \(\ell\) is a signal transformation matrix
and the signals \((p, q)\) derived from \(w_k \in F(z_k)\) satisfy the IQC \((\Psi, M, X)\).
As an example, if an \(m\)-strongly convex function \(f_0\) obeys \(0 \in \partial f_0(0)\) and \(0 = f_0(0)\), then sequences \((w, z)\) with \(w_k \in \partial f_0(z_k)\) for all \(k \in \N\) satisfy a relation \((\Psi, M, X, \ell)\) defined by
for any scalar coefficients \(\lambda_0, \lambda_1\) satisfying
Exponential Weighting#
Linear convergence can be established by proving boundedness of an exponentially weighted system.
Given a rate \(\rho > 0\), the \(\rho\)-exponential weighting of a sequence \(x\) is \(\ov x\), defined as \(\ov x_k := \rho^{-k} x_k\) for all \(k \in \N\). The exponential weighting of an optimization algorithm \((F_0, G)\) with \(0 \in F_0(0)\) is
If \(\rho \in (0, 1)\), then the existence of a \(\gamma_0 > 0\) ensuring boundedness of the exponentially weighted system then proves linear convergence of the original system:
Valid relations for operators can be adjusted to allow for exponential weightings. The exponentially weighted sequences \((\ov w, \ov z)\) with \(\ov w_k \in \rho^{-k} F(\rho^k \ov z_k)\) for all \(k\) satisfies the one-step relation \((\Psi_1, M_1, X_1, \ell_1 )\), but with coefficients
Outlook for Optimization#
IQC descriptions of uncertainties can be used to validate optimization algorithms.
Let \(\rho > 0\) be a convergence rate, \(\Lambda(\rho)\) be a constraint set, and \((\Psi(\lambda), M(\lambda), X(\lambda), \ell)\) be a valid relation for any
\(F \in \F\)
pairs \((\ov w, \ov z)\) satisfying \(\ov w_k \in \rho^{-k} F(\rho^k \ov z_k)\) for all \(k\).
\(\lambda \in \Lambda(\rho)\).
The interconnection of linear systems \((\Psi(\lambda), \ell, G)\) with description
is summarized as the system
A sufficient condition for \(\ov x\) to be bounded for all \(F \in \F\) is if there exists a symmetric matrix \(P\) and coefficients \(\blam\) such that
Boundedness of the \(\rho\)- weighted \(\ov x\) implies linear convergence at rate \(\rho\) of the original state \(x\) if \(\rho \in (0, 1)\). Bisection can be used to minimize the rate \(\rho\) in this IQC Analysis problem, thus upper-bounding a worst case linear convergence rate. Conservatism can be reduced by consider higher-order valid IQCs.
IQCS for Analysis#
The IQC structure used in opt-syn for analysis of operators is a tuple \((\Psi, M, X, \ell)\), in which \(\Psi\) is structured as
The analysis IQCs may be tall: the dimensions of \((p^\psi, q^\psi)\) may be larger than the dimensions of \((p, q)\) respectively.
IQCS for Synthesis#
IQC synthesis requires filters in which the dimensions of \((p^\psi, q^\psi)\) and \((p, q)\) are equal. The class of filters used are
In IQC synthesis, it is required that \(\Psi_1, \Psi_2, \Psi_3\) are all stable, and that \(\Psi_2\) has a stable inverse. A tall IQC from analysis must be factorized into this square form first.
IQC Routines#
The iqcs routines are iqc_loop_split (analysis) and iqc_loop_factored (synthesis).
Analysis Structure#
- class iqc.iqc_loop_split#
IQC_LOOP_SPLIT Description of an IQC satisfied by an operator’s input-output sequences.
- Constructor Summary
- iqc_loop_split(Psi1, M, loop, Psi2, X)#
IQC_LOOP_SPLIT Constructor
- Property Summary
- M#
running cost
- Psi1#
primal filter (output of nonlinearity)
- Psi2#
dual filter (input of nonlinearity)
- X#
terminal cost
- loop#
loop transformation (in lft/star product form)
- Method Summary
- blkdiag(b)#
BLKDIAG: block diagonal of the multipliers :param b: the other IQC :type b: iqc_loop_split
- Returns:
iqc – the output IQC
- compute_Vhat(Psih)#
- find a state-coordinate change matrix,
such that Vhat*Ahat=Apsi*Vhat, Vhat*Bhat=Bpsi, and Chat=Cpsi*Vhat by solving system of linear equations.
- Parameters:
Psih – squared iqc filter
- Returns:
Vh – state-coordinate change
- factor(perturb)#
FACTOR factorization of the IQC for synthesis. The tall filters must be factored into a square system to allow for inversion and IQC synthesis.
- Returns:
iqc_factored (iqc_loop_factored): factored IQC with same frequency response
- get_psi()#
get the multiplier by block diagonalization :Returns: sys (ss/sdpss) – the multiplier
- hinf_factorize()#
HINF_FACTORIZE perform an h-infinity type factorization
- Returns:
iqc_factored (iqc_loop_factored) – factored IQC with same frequency response
Vh – state coordinate change
Z – terminal cost matrix
- lift(c)#
LIFT: kronecker by c (coordinates) :param c: dimension of the lift :type c: int
- Returns:
iqc_lift (iqc_loop_split) – the output IQC
- nf()#
NF number of states in the IQC filter
- np()#
number of outputs (channel one)
- nq()#
number of outputs (channel two)
- nw()#
number of inputs (channel two)
- nx1()#
NX1 number of states in filter 1
- nx2()#
NX2 number of states in filter 2
- nz()#
number of inputs (channel one)
- passive_factorize()#
passive_FACTORIZE perform a canonical factorization for operators with passive-type running costs. This is used for the class \(S_{m, L}\).
- Returns:
iqc_factored (iqc_loop_factored): factored IQC with same frequency response Vh: state coordinate change Z: terminal cost matrix
- recover(lmi_out)#
RECOVER: recover the numerical values of an IQC from an LMI solution
- Parameters:
lmi_out – solution of the program
- rhotrafo(rho)#
RHOTRAFO exponential weighting of the IQC by rho
- Parameters:
rho – discount rate
- Returns:
iqc – output IQC
- rotate(M, direction)#
ROTATE apply rotation to the IQC for periodic_orbit usage
- Parameters:
M – symmetry matrix
direction (
int) – power
- Returns:
iqc – output IQC
Synthesis Structure#
- class iqc.iqc_loop_factored#
IQC_LOOP_FACTORED factored IQCs that are amenable to synthesis
- Constructor Summary
- iqc_loop_factored(Psi1, Psi2, C3, D3, M, X, loop)#
IQC_LOOP_FACTORED Constructor
- Property Summary
- C3#
crossover D matrix
- D3#
crossover D matrix
- M#
running cost
- Psi1#
primal filter (output of nonlinearity)
- Psi2#
dual filter (input of nonlinearity)
- X#
terminal cost
- loop#
signal transformation matrix
- Method Summary
- blkdiag(b)#
BLKDIAG: block diagonal of the multipliers :param b: the other IQC :type b: iqc_loop_split
- Returns:
iqc – the output IQC
if length(varargin) == 1
- factor()#
the IQC is already factored, do nothing
- get_psi()#
GET_PSI form the triangular filter system :Returns: psi_out – the output filter
- get_psi_13()#
GET_PSI_13 form the triangular multiplier only [psi1, psi3; 0, I], used for synthesis :Returns: psi_out – the output filter portion
- lift(c)#
LIFT: kronecker by c (coordinates) :param c: dimension of the lift :type c: int
- Returns:
iqc_lift (iqc_loop_split) – the output IQC
- nf()#
NF number of states in the IQC filter
- np()#
number of outputs (channel one)
- nq()#
number of outputs (channel two)
- nw()#
number of inputs (channel two)
- nx1()#
NX1 number of states in filter 1
- nx2()#
NX2 number of states in filter 2
- nz()#
number of inputs (channel one)
- psi2_inv()#
PSI2_INV inverse of the parameter psi2 :Returns: psi_inv – inverse of obj.Psi2
- rhotrafo(rho)#
RHOTRAFO rho weighting transformation: [A, B; C, D] => [1/rho A, 1/rho B; C, D]
- Parameters:
rho – exponential weighting
- Returns:
iqc_rho – rho-weighted IQC
- wrap_synth(P, n)#
wrap a genearlized plant with the filters for IQC controller synthesis
- Parameters:
P – nominal plant to be controlled, before IQC incorporation
n – dimension counter
- Return:
P_wrap – the generalized plant for IQC synthesis
Data Container#
- class iqc.iqc_data_container#
IQC_DATA container for the IQC arising from operators
- Constructor Summary
- iqc_data_container()#
IQC_DATA Constructor
- Property Summary
- ERGODIC#
(bool) true if function values
- augmented#
(bool) true if reduced-order control;
- common_rho#
(double) common rho used in noncausal synthesis
- ind_same#
(int array) indices for which m = L
- iqc#
(iqc_loop_split/iqc_loop_factored)the iqc
- iqc_op#
accumulated iqc for operators
- m_same#
(bool) for Sml, does m=L? If so, there is no uncertainty
- rotate#
(bool) true if periodic-orbit
- task#
(string) analysis or synthesis