Joint Spectral Radius (JSR)

The Joint Spectral Radius (JSR) of a discrete-time switched system is the minimal value of γ such that the system scaled by γ is asymptotically stable.

SwitchOnSafety.ScaledHybridSystemType
struct ScaledHybridSystem{T, H <: Union{DiscreteSwitchedLinearSystem, ConstrainedDiscreteSwitchedLinearSystem}} <: HybridSystems.AbstractHybridSystem
    system::H
    γ::T
end

Discrete-time system where each reset map is scaled by γ, that is, the reset map x ↦ Ax of system is replaced by x ↦ Ax/γ.

source

The JSR is NP-hard to compute but several methods exist to approximate this quantity.

Gripenberg algorithm, a Branch-and-Bound approach

The following approachs searches through all the different switching sequences, pruning some using the running estimate of the lower bound.

SwitchOnSafety.gripenbergFunction
gripenberg(s::AbstractDiscreteSwitchedSystem; δ=1e-2,
                max_eval = 10000, max_ρ_eval = max_eval,
                max_norm_eval = max_eval, max_length = 50,
                matrix_norm = A -> opnorm(A, 2), verbose = 1)

Gripenberg algorithm [G96] for computing an upper bound ub and a lower bound lb to the Joint Spectral Radius such that ub - lb ≤ 1e-2.

[G96] Gripenberg, G. Computing the joint spectral radius. Linear Algebra and its Applications, Elsevier, 1996, 234, 43-60

source

Sum-of-Squares approach

The following method computes upper bounds using Sum Of Squares Programming

SwitchOnSafety.soslyapFunction
soslyap(s::AbstractSwitchedSystem, d; optimizer_constructor=nothing)

Find Sum-of-Squares Lyapunov functions; i.e. solves [(5), PJ08] or gives moment matrices certifying the infeasibility of the problem. Use ScaledHybridSystem to use a different growth rate than 1.

[PJ08] P. Parrilo and A. Jadbabaie. Approximation of the joint spectral radius using sum of squares. Linear Algebra and its Applications, Elsevier, 2008, 428, 2385-2402

source
SwitchOnSafety.soslyapbsFunction
soslyapbs(s::AbstractSwitchedSystem, d::Integer,
          soslb, dual,
          sosub, primal;
          verbose=0, tol=1e-5, step=0.5, scaling=quickub(s),
          ranktols=tol, disttols=tol, kws...)

Find the smallest γ such that soslyap is feasible.

source

The infeasibility certificates computed in the binary search carried out by soslyapbs can be used to produce cycles of high growth rate using findsmp on the sequence produced by sosbuildsequence.

SwitchOnSafety.sosbuildsequenceFunction
sosbuildsequence(s::AbstractSwitchedSystem, d::Integer;
                 v_0=:Random, p_0=:Random, l::Integer=1,
                 Δt::Float64=1., niter::Integer=42,
                 kws...)

Compute the truncation of length l of the high growth rate infinite sequence produced by the algorithm introduced in [LJP17]. The trajectory ends at mode v_0 (or a random one if v_0 is :Random) and is built backward as explained in [LJP17]. The measures used to guide the construction are the infeasibility certificates of highest growth rate computed by soslyap with polynomials of degree 2d. The starting polynomial is either p_0, or a random strictly sum-of-squares polynomial if p_0 is :Random or the primal solution of soslyap certifying the best upper bound for mode v_0.

  • [LJP17] B. Legat, R. M. Jungers, and P. A. Parrilo.

Certifying unstability of Switched Systems using Sum of Squares Programming, arXiv preprint arXiv:1710.01814, 2017.

source
SwitchOnSafety.findsmpFunction
findsmp(seq::HybridSystems.DiscreteSwitchingSequence)

Extract the cycle of highest growth rate in the sequence seq.

source

Alternatively, sosextractcycle can be used to find cycles of high growth rate.

Polytopic approach

The following method can verify numerically that a cycle is an s.m.p. by computing invariant polytopes. When it is not an s.m.p., it find a candidate of higher growth rate.

@docs` invariant_polytopes