Invariant Sets
Given a system described with MathematicalSystems.jl and HybridSystems.jl, an invariant set can be computed using the following function:
SwitchOnSafety.invariant_sets
— Functioninvariant_sets(system::AbstractHybridSystem, optimizer_constructor,
set_variables::AbstractVector{<:SetProg.AbstractVariable};
volume_heuristic = nth_root,
infeasibility_certificates = nothing,
verbose=1,
λ=Dict{transitiontype(system), Float64}(),
enabled = states(system))
Compute maximal invariant sets of the family set_variables
for the modes of system
using the solver provided by optimizer_constructor
. The volume of the sets is estimated using volume_heuristic
. If the program is infeasible, the certificates for each transition are stored in infeasibility_certificates
. For the containment of non-homogeneous, the S-procedure might be a Bilinear Matrix Inequality (BMI) which is NP-hard to solve. To avoid that, provides the value of λ
to use in the dictionary λ
. To ignore some state and the transitions involving these states in the computation, give an enabled
vector without them.
SwitchOnSafety.invariant_sets!
— Functioninvariant_sets!(sets, modes_to_compute, system::AbstractHybridSystem,
args...; kwargs...)
Similar to invariant_sets(system, args...; kwargs...)
but stores the result in sets
and only compute the modes in modes_to_compute
. The other sets in enabled
that are not in modes_to_compute
are assumed to have the value given in sets
.