Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
  • 18:22
    mforets opened #2852
  • 16:37

    schillic on gh-pages

    build based on fb903ff (compare)

  • 16:23
    schillic updated the wiki
  • 16:22

    schillic on underapprox

    (compare)

  • 16:22

    schillic on master

    cleanup underapproximate Merge branch 'master' into mfor… remove unfinished sentence and 2 more (compare)

  • 16:22
    schillic closed #2306
  • 15:02
    mforets commented #2306
  • 15:00
    mforets synchronize #2306
  • 15:00

    mforets on underapprox

    add inplace version (compare)

  • 14:58

    mforets on makie

    updates in plot3d (compare)

  • 14:44
    mforets edited #2851
  • 14:44
    mforets opened #2851
  • 14:37
    mforets labeled #2850
  • 14:37
    mforets opened #2850
  • 14:12

    schillic on gh-pages

    build based on f663b7f (compare)

  • 14:00
    schillic updated the wiki
  • 13:57

    schillic on 2756

    (compare)

  • 13:57

    schillic on master

    convex_hull of UnionSet Merge pull request #2848 from J… (compare)

  • 13:57
    schillic closed #2848
  • 13:57
    schillic closed #2756
Christian Schilling
@schillic
Christian Schilling
@schillic
the time for using LazySets increased by 2 seconds compared to v1.6.1 :(
Marcelo Forets
@mforets
ohh
2 seconds is a lot. you tried v1.7 the other day. it also has that additional latency? (i guess so? )
there is supposed to be a workshop / talk about how to use tools to reduce latency
Christian Schilling
@schillic
in v1.7.0-beta3.0 it's 1 second faster compared to v1.6.2 :)
Marcelo Forets
@mforets
the workshop It's all Set: A hands-on introduction to JuliaReach
has been announced
and also the minisymposium Set Propagation Methods in Julia: Techniques and Applications
https://pretalx.com/juliacon2021/talk/DRMPLU/
Christian Schilling
@schillic
@mforets: about the recent segmentation fault when building the docs: it's not just us: JuliaPolyhedra/Polyhedra.jl#265
Marcelo Forets
@mforets
i feel like adding the content of the notebooks to the packages docs
i also like the guided introduction to NNA
can we also trim the youtube video? i mean, the last 15 mins with the NNA presentation
so we can link that directly from the NNA docs
Christian Schilling
@schillic
:+1:
Marcelo Forets
@mforets
FYI there is a #set-propagation discord channel for JuliaCon
Marcelo Forets
@mforets
during the w.e. i plan to continue working on the RA docs revamp
i think we should update the names of the section in a better way
it might be like this:
  • Linear methods (which explains reach-sets, flowpipes, etc in the context of ivps with set initial conditions of the form x' = Ax )
  • Handling inputs sets (not sure about the section name. this is about linear systems with non-deterministic inputs).
  • Taylor models methods
  • Hybrid systems
  • Clocked systems
  • Exploiting structure (which goes at depth into different use cases of LGG09, BFFPSV18)
    • ... the list continue
the motivation to separate "Linear methods" wrt systems with inputs is to introduce the set propagation concepts incrementally
Christian Schilling
@schillic
"nondeterministic linear systems"?
or "with uncertainties"
Marcelo Forets
@mforets
perfect
Marcelo Forets
@mforets
a blog post on julia ecosystem statistics: https://julialang.org/blog/2021/08/general-survey/
Marcelo Forets
@mforets
Ellipsotopes!
Marcelo Forets
@mforets
Luca has added an explanation about solving interval linear systems with LazySets, https://juliaintervals.github.io/IntervalLinearAlgebra.jl/dev/explanations/solution_set/#Oettli-Pr%C3%A4ger-theorem
Marcelo Forets
@mforets
FYI the new version of the RFEM article is available on arxiv, https://arxiv.org/pdf/2105.05841.pdf
pastankaitis
@pastankaitis
Hi all, I totally new to JuliaReach and trying to use it for computing reach sets of hybrid systems (specifically simple water tank model). But encountered few issues is there some could help with those or where would be the best place to ask for advice? Thank you
Marcelo Forets
@mforets
Welcome, here is a good place to ask. Do you have a example code, or the model described in other format?
pastankaitis
@pastankaitis
Hi @mforets. I just uploaded the current version of the water tank model to https://github.com/pastankaitis/WaterTank.git. I mostly used your spacecraft model (but looked at others too) as guiding example for the development. I'm getting this error "LoadError: BoundsError: attempt to access 1-element Vector{TaylorN{Float64}} at index [2]" but not sure what could the problem :) Thanks for any help!
Marcelo Forets
@mforets
Thanks for sending your model. In the dynamic equation for the stable mode I think there's a typo:
@taylorize function stable!(du, u, p, t)
    # differential equations for the stable water tank mode
    du[1] = 0
    du[2] = 0
    du[1] = 0 # < du[3] = 0 ?
    return du
end
Apart from that, due to a current limitation in the way @taylorize works, please substitute all right-hand sides which are numeric constants with zero(u[1]) or one(u[1]). For example,
For example, the equation for the filling mode should read:
@taylorize function stable!(du, u, p, t)
    #differential equations for the stable water tank mode
    du[1] = zero(u[1])
    du[2] = zero(u[1])
    du[3] = zero(u[1])
    return du
end

and for the filling mode,

@taylorize function filling!(du, u, p, t)
    d_in, d_out, h = u
    #differential equations for the filling water tank mode
    du[1] = one(u[1])
    du[2] = zero(u[1])
    du[3] = d_in
    return du
end

etc

Marcelo Forets
@mforets
I also noted something strange in the definition of the hybrid automaton, namely that two transitions have the same source/destination modes, and also the same label. I copy them here:
    # transition "stable" -> "normal"
    add_transition!(automaton, 1, 2, 1)
    #guard_1 = HalfSpace(h >= 0, var)
    t1 = @map(h -> h, dim: 3)

    # transition "normal" -> "filling"
    add_transition!(automaton, 2, 3, 2)
    guard_2 = HalfSpace(h <= V_saf_min, var)
    t2 = @map(h -> h, dim: 3, h ∈ guard_2)

    # transition "normal" -> "emptying"
    add_transition!(automaton, 2, 3, 2)
    guard_3 = HalfSpace(h >= V_saf_max, var)
    t3 = @map(h -> h, dim: 3, h ∈ guard_3)
In the add_transition! annotations, the integer arguments correspond to the source (resp target nodes), while the final argument is just a label (tag) for the transition.
So 2, 3, 2 should be repeated. It is possible to have more than one transition between the same pair of source/node modes, but from your comment in the code, and given that
modes=[stable_mode, normal_mode, filling_mode, emptying_mode]
Then I expect to see something more like:
    # transition "stable" -> "normal"
    add_transition!(automaton, 1, 2, 1)
    #guard_1 = HalfSpace(h >= 0, var)
    t1 = @map(h -> h, dim: 3)

    # transition "normal" -> "filling"
    add_transition!(automaton, 2, 3, 2)
    guard_2 = HalfSpace(h <= V_saf_min, var)
    t2 = @map(h -> h, dim: 3, h ∈ guard_2)

    # transition "normal" -> "emptying"
    add_transition!(automaton, 2, 4, 3)
    guard_3 = HalfSpace(h >= V_saf_max, var)
    t3 = @map(h -> h, dim: 3, h ∈ guard_3)

Does that make sense?

Another thing that I noticed is that the automaton begins at the "stable" mode, and the dynamics is zero, so I'm not sure that it will eventually take a transition. I may be wrong, but perhaps it's good if you revise the model with my previous comments, then we continue discussing how to obtain the reachability solution.

Marcelo Forets
@mforets
Looking further, I saw that the @map macro with a constrained set is ignored, in fact there is an unresolved issue about that (https://github.com/JuliaReach/MathematicalSystems.jl/issues/198#issuecomment-909562237)
With those changes, the transitions part looks like this (note that I also added a "universal" constraint to the first transition; since it is required at the moment).
    # transition "stable" -> "normal"
    add_transition!(automaton, 1, 2, 1)
    guard_1 = Universe(3)
    t1 = ConstrainedIdentityMap(3, guard_1)

    # transition "normal" -> "filling"
    add_transition!(automaton, 2, 3, 2)
    guard_2 = HalfSpace(h <= V_saf_min, var)
    t2 = ConstrainedIdentityMap(3, guard_2)

    # transition "normal" -> "emptying"
    add_transition!(automaton, 2, 4, 3)
    guard_3 = HalfSpace(h >= V_saf_max, var)
    t3 = ConstrainedIdentityMap(3, guard_3)
Marcelo Forets
@mforets
Another comment: if you plan to be working with linear hybrid automata, then I strongly suggest that you learn and use the linear solvers.
Marcelo Forets
@mforets

In case you still prefer to use the nonlinear solver TMJets, seems like it hits a corner case if every equation is zero, as in the stable!(du, u, p, t) case. I tried with zero(u[1]) + eps(Float64) and it works, it may be useful to debug what is going on in that special case.. but I would suggest to re-write the model and use linear solvers in the current case. That requires to manually write each coefficient matrix like:

    A = zeros(3, 3)
    stable_mode = @system(h' = A*h, h ∈ X) # water tank mode stable

etc.

In fact this formulation ends up being more compact than for the general nonlinear case.
Can you try to implement those changes and then we follow up the discussion?
pastankaitis
@pastankaitis
@mforets Thanks very much for this Marcelo! I will do the fixes and will let you know :)