diff --git a/docs/src/examples/solvers/DC-DC converter.jl b/docs/src/examples/solvers/DC-DC converter.jl index 83f0c0024..b1e4c462f 100644 --- a/docs/src/examples/solvers/DC-DC converter.jl +++ b/docs/src/examples/solvers/DC-DC converter.jl @@ -1,5 +1,5 @@ using Test #src -# # Example: DC-DC converter solved by [Naive abstraction](https://github.com/dionysos-dev/Dionysos.jl/blob/master/docs/src/manual/manual.md#solvers). +# # Example: DC-DC converter solved by [Uniform grid abstraction](https://github.com/dionysos-dev/Dionysos.jl/blob/master/docs/src/manual/manual.md#solvers). # #md # [![Binder](https://mybinder.org/badge_logo.svg)](@__BINDER_ROOT_URL__/generated/DC-DC converter.ipynb) #md # [![nbviewer](https://img.shields.io/badge/show-nbviewer-579ACA.svg)](@__NBVIEWER_ROOT_URL__/generated/DC-DC converter.ipynb) @@ -55,7 +55,7 @@ hu = SVector(1) input_grid = DO.GridFree(u0, hu) using JuMP -optimizer = MOI.instantiate(AB.NaiveAbstraction.Optimizer) +optimizer = MOI.instantiate(AB.UniformGridAbstraction.Optimizer) MOI.set(optimizer, MOI.RawOptimizerAttribute("concrete_problem"), concrete_problem) MOI.set(optimizer, MOI.RawOptimizerAttribute("state_grid"), state_grid) MOI.set(optimizer, MOI.RawOptimizerAttribute("input_grid"), input_grid) diff --git a/docs/src/examples/solvers/Path planning.jl b/docs/src/examples/solvers/Path planning.jl index 9e681af68..9f6cb0e48 100644 --- a/docs/src/examples/solvers/Path planning.jl +++ b/docs/src/examples/solvers/Path planning.jl @@ -1,5 +1,5 @@ using Test #src -# # Example: Path planning problem solved by [Naive abstraction](https://github.com/dionysos-dev/Dionysos.jl/blob/master/docs/src/manual/manual.md#solvers). +# # Example: Path planning problem solved by [Uniform grid abstraction](https://github.com/dionysos-dev/Dionysos.jl/blob/master/docs/src/manual/manual.md#solvers). # #md # [![Binder](https://mybinder.org/badge_logo.svg)](@__BINDER_ROOT_URL__/generated/Path planning.ipynb) #md # [![nbviewer](https://img.shields.io/badge/show-nbviewer-579ACA.svg)](@__NBVIEWER_ROOT_URL__/generated/Path planning.ipynb) @@ -65,10 +65,10 @@ u0 = SVector(0.0, 0.0); h = SVector(0.3, 0.3); input_grid = DO.GridFree(u0, h); -# We now solve the optimal control problem with the `Abstraction.NaiveAbstraction.Optimizer`. +# We now solve the optimal control problem with the `Abstraction.UniformGridAbstraction.Optimizer`. using JuMP -optimizer = MOI.instantiate(AB.NaiveAbstraction.Optimizer) +optimizer = MOI.instantiate(AB.UniformGridAbstraction.Optimizer) MOI.set(optimizer, MOI.RawOptimizerAttribute("concrete_problem"), concrete_problem) MOI.set(optimizer, MOI.RawOptimizerAttribute("state_grid"), state_grid) MOI.set(optimizer, MOI.RawOptimizerAttribute("input_grid"), input_grid) diff --git a/docs/src/manual/manual.md b/docs/src/manual/manual.md index b60e10ba6..a547981b6 100644 --- a/docs/src/manual/manual.md +++ b/docs/src/manual/manual.md @@ -48,7 +48,7 @@ The following tables summarize the different solvers. | Type | Full vs partial discretization | Partition vs Cover | Shape | Local controller | Abstraction | System | Reference | | :--------------- | :---------- | :---------- | :---------- | :---------- | :---------- | :---------- | :---------- | -| [`Naive abstraction`](https://dionysos-dev.github.io/Dionysos.jl/dev/reference/Optim/#Dionysos.Optim.Abstraction.NaiveAbstraction.Optimizer) | Full | Partition | Hyperrectangle | Piece-wise constant | Non-determinisitic | Continuous-time | [`SCOTS: A Tool for the Synthesis of Symbolic Controllers`](https://dl.acm.org/doi/abs/10.1145/2883817.2883834) | +| [`Uniform grid abstraction`](https://dionysos-dev.github.io/Dionysos.jl/dev/reference/Optim/#Dionysos.Optim.Abstraction.UniformGridAbstraction.Optimizer) | Full | Partition | Hyperrectangle | Piece-wise constant | Non-determinisitic | Continuous-time | [`SCOTS: A Tool for the Synthesis of Symbolic Controllers`](https://dl.acm.org/doi/abs/10.1145/2883817.2883834) | | [`Lazy abstraction`](https://dionysos-dev.github.io/Dionysos.jl/dev/reference/Optim/#Dionysos.Optim.Abstraction.LazyAbstraction.Optimizer) | Partial | Partition | Hyperrectangle | Piece-wise constant | Non-determinisitic | Continuous-time | [`Alternating simulation on hierarchical abstractions`](https://ieeexplore.ieee.org/abstract/document/9683448/?casa_token=AXyECYU9FdwAAAAA:ERfvlbkORIbfGLbDd42d2K5K9SLVOjl-8kRs9pfp7lMa4QZEv0W4VgzlP8FshBlxXQF4ZQrDuzk) | | [`Hierarchical abstraction`](https://dionysos-dev.github.io/Dionysos.jl/dev/reference/Optim/#Dionysos.Optim.Abstraction.HierarchicalAbstraction.Optimizer) | Partial | Partition | Hyperrectangle | Piece-wise constant | Non-determinisitic | Continuous-time | [`Alternating simulation on hierarchical abstractions`](https://ieeexplore.ieee.org/abstract/document/9683448/?casa_token=AXyECYU9FdwAAAAA:ERfvlbkORIbfGLbDd42d2K5K9SLVOjl-8kRs9pfp7lMa4QZEv0W4VgzlP8FshBlxXQF4ZQrDuzk) | | [`Ellipsoid abstraction`](https://dionysos-dev.github.io/Dionysos.jl/dev/reference/Optim/#Dionysos.Optim.Abstraction.EllipsoidsAbstraction.Optimizer) | Full | Cover | Ellipsoid | Piece-wise affine | Determinisitic | Discrete-time affine | [`State-feedback Abstractions for Optimal Control of Piecewise-affine Systems`](https://arxiv.org/abs/2204.00315) | @@ -65,7 +65,7 @@ The following tables summarize the different solvers. **Solver interface** Each solver is defined by a module which must implement the abstract type [`AbstractOptimizer`](https://jump.dev/MathOptInterface.jl/stable/reference/models/#MathOptInterface.AbstractOptimizer) and the [`Optimize!`](https://jump.dev/MathOptInterface.jl/stable/reference/models/#MathOptInterface.optimize!) function. -For example, for the NaiveAbstraction solver, this structure and function are defined as follows +For example, for the UniformGridAbstraction solver, this structure and function are defined as follows ```julia using JuMP @@ -123,7 +123,7 @@ concrete_system = concrete_problem.system; Choose the solver you wish to use ```julia using JuMP -optimizer = MOI.instantiate(AB.NaiveAbstraction.Optimizer) +optimizer = MOI.instantiate(AB.UniformGridAbstraction.Optimizer) ``` Define the solver's meta-parameters diff --git a/docs/src/reference/Optim.md b/docs/src/reference/Optim.md index 80734928c..89b106863 100644 --- a/docs/src/reference/Optim.md +++ b/docs/src/reference/Optim.md @@ -4,7 +4,7 @@ This folder contains all the different (abstraction-based or not) solvers that c ## Abstraction-based solvers ```@docs -Dionysos.Optim.Abstraction.NaiveAbstraction.Optimizer +Dionysos.Optim.Abstraction.UniformGridAbstraction.Optimizer Dionysos.Optim.Abstraction.EllipsoidsAbstraction.Optimizer Dionysos.Optim.Abstraction.HierarchicalAbstraction.Optimizer Dionysos.Optim.Abstraction.LazyAbstraction.Optimizer diff --git a/src/optim/abstraction/abstraction.jl b/src/optim/abstraction/abstraction.jl index 32f3b5ad8..e60154ed5 100644 --- a/src/optim/abstraction/abstraction.jl +++ b/src/optim/abstraction/abstraction.jl @@ -1,6 +1,6 @@ module Abstraction -include("naive_abstraction.jl") +include("uniform_grid_abstraction.jl") include("lazy_abstraction.jl") include("hierarchical_abstraction.jl") include("ellipsoids_abstraction.jl") diff --git a/src/optim/abstraction/naive_abstraction.jl b/src/optim/abstraction/uniform_grid_abstraction.jl similarity index 99% rename from src/optim/abstraction/naive_abstraction.jl rename to src/optim/abstraction/uniform_grid_abstraction.jl index 21648ae16..4e201b9e3 100644 --- a/src/optim/abstraction/naive_abstraction.jl +++ b/src/optim/abstraction/uniform_grid_abstraction.jl @@ -1,6 +1,6 @@ -export NaiveAbstraction +export UniformGridAbstraction -module NaiveAbstraction +module UniformGridAbstraction import Dionysos const DI = Dionysos diff --git a/test/optim/test_NaiveAbstraction_reachability.jl b/test/optim/test_UniformGridAbstraction_reachability.jl similarity index 96% rename from test/optim/test_NaiveAbstraction_reachability.jl rename to test/optim/test_UniformGridAbstraction_reachability.jl index 918e7e54c..f2828efa6 100644 --- a/test/optim/test_NaiveAbstraction_reachability.jl +++ b/test/optim/test_UniformGridAbstraction_reachability.jl @@ -35,10 +35,10 @@ u0 = SVector(0.0, 0.0) h = SVector(0.3, 0.3) input_grid = DO.GridFree(u0, h) -# We now solve the optimal control problem with the `Abstraction.NaiveAbstraction.Optimizer`. +# We now solve the optimal control problem with the `Abstraction.UniformGridAbstraction.Optimizer`. using JuMP -optimizer = MOI.instantiate(AB.NaiveAbstraction.Optimizer) +optimizer = MOI.instantiate(AB.UniformGridAbstraction.Optimizer) MOI.set(optimizer, MOI.RawOptimizerAttribute("concrete_problem"), concrete_problem) MOI.set(optimizer, MOI.RawOptimizerAttribute("state_grid"), state_grid) MOI.set(optimizer, MOI.RawOptimizerAttribute("input_grid"), input_grid) @@ -50,7 +50,7 @@ abstract_problem = MOI.get(optimizer, MOI.RawOptimizerAttribute("abstract_proble abstract_controller = MOI.get(optimizer, MOI.RawOptimizerAttribute("abstract_controller")) concrete_controller = MOI.get(optimizer, MOI.RawOptimizerAttribute("concrete_controller")) -@testset "NaiveAbstraction reachability" begin +@testset "UniformGridAbstraction reachability" begin @test length(abstract_controller.data) == 19400 #src end diff --git a/test/optim/test_NaiveAbstraction_safety.jl b/test/optim/test_UniformGridAbstraction_safety.jl similarity index 94% rename from test/optim/test_NaiveAbstraction_safety.jl rename to test/optim/test_UniformGridAbstraction_safety.jl index c65a3e0cb..f3f97408f 100644 --- a/test/optim/test_NaiveAbstraction_safety.jl +++ b/test/optim/test_UniformGridAbstraction_safety.jl @@ -29,7 +29,7 @@ hu = SVector(1) input_grid = DO.GridFree(u0, hu) using JuMP -optimizer = MOI.instantiate(AB.NaiveAbstraction.Optimizer) +optimizer = MOI.instantiate(AB.UniformGridAbstraction.Optimizer) MOI.set(optimizer, MOI.RawOptimizerAttribute("concrete_problem"), concrete_problem) MOI.set(optimizer, MOI.RawOptimizerAttribute("state_grid"), state_grid) MOI.set(optimizer, MOI.RawOptimizerAttribute("input_grid"), input_grid) @@ -38,7 +38,7 @@ MOI.optimize!(optimizer) abstract_controller = MOI.get(optimizer, MOI.RawOptimizerAttribute("abstract_controller")) concrete_controller = MOI.get(optimizer, MOI.RawOptimizerAttribute("concrete_controller")) -@testset "NaiveAbstraction safety" begin +@testset "UniformGridAbstraction safety" begin @test length(abstract_controller.data) == 893803 #src end diff --git a/test/optim/unit_tests_NaiveAbstraction/test_controller.jl b/test/optim/unit_tests_UniformGridAbstraction/test_controller.jl similarity index 91% rename from test/optim/unit_tests_NaiveAbstraction/test_controller.jl rename to test/optim/unit_tests_UniformGridAbstraction/test_controller.jl index d6c308c5a..e4c6b82dc 100644 --- a/test/optim/unit_tests_NaiveAbstraction/test_controller.jl +++ b/test/optim/unit_tests_UniformGridAbstraction/test_controller.jl @@ -11,7 +11,7 @@ sleep(0.1) # used for good printing println("Started test") @testset "Controller" begin - contr = AB.NaiveAbstraction.NewControllerList() + contr = AB.UniformGridAbstraction.NewControllerList() UT.push_new!(contr, (5, 6)) UT.push_new!(contr, (5, 6)) diff --git a/test/optim/unit_tests_NaiveAbstraction/test_controllerreach.jl b/test/optim/unit_tests_UniformGridAbstraction/test_controllerreach.jl similarity index 91% rename from test/optim/unit_tests_NaiveAbstraction/test_controllerreach.jl rename to test/optim/unit_tests_UniformGridAbstraction/test_controllerreach.jl index 3e9a52e6a..48f4ae26a 100644 --- a/test/optim/unit_tests_NaiveAbstraction/test_controllerreach.jl +++ b/test/optim/unit_tests_UniformGridAbstraction/test_controllerreach.jl @@ -75,8 +75,8 @@ println("Started test") push!(targetlist, SY.get_state_by_xpos(symmodel, pos)) end - contr = AB.NaiveAbstraction.NewControllerList() - AB.NaiveAbstraction.compute_controller_reach!( + contr = AB.UniformGridAbstraction.NewControllerList() + AB.UniformGridAbstraction.compute_controller_reach!( contr, symmodel.autom, initlist, @@ -85,14 +85,14 @@ println("Started test") @test length(contr) == 412 if VERSION >= v"1.5" function f(autom, initlist, targetlist) - contr = AB.NaiveAbstraction.NewControllerList() + contr = AB.UniformGridAbstraction.NewControllerList() initset, targetset, num_targets_unreachable, current_targets, next_targets = - AB.NaiveAbstraction._data(contr, autom, initlist, targetlist) + AB.UniformGridAbstraction._data(contr, autom, initlist, targetlist) # Preallocates to make sure `_compute_controller_reach` does not need to allocate sizehint!(contr.data, 500) sizehint!(current_targets, 50) sizehint!(next_targets, 200) - @allocated AB.NaiveAbstraction._compute_controller_reach!( + @allocated AB.UniformGridAbstraction._compute_controller_reach!( contr, autom, initset, diff --git a/test/optim/unit_tests_NaiveAbstraction/test_controllersafe.jl b/test/optim/unit_tests_UniformGridAbstraction/test_controllersafe.jl similarity index 93% rename from test/optim/unit_tests_NaiveAbstraction/test_controllersafe.jl rename to test/optim/unit_tests_UniformGridAbstraction/test_controllersafe.jl index b6137f9a7..196093b72 100644 --- a/test/optim/unit_tests_NaiveAbstraction/test_controllersafe.jl +++ b/test/optim/unit_tests_UniformGridAbstraction/test_controllersafe.jl @@ -74,8 +74,13 @@ println("Started test") push!(safelist, SY.get_state_by_xpos(symmodel, pos)) end - contr = AB.NaiveAbstraction.NewControllerList() - AB.NaiveAbstraction.compute_controller_safe!(contr, symmodel.autom, initlist, safelist) + contr = AB.UniformGridAbstraction.NewControllerList() + AB.UniformGridAbstraction.compute_controller_safe!( + contr, + symmodel.autom, + initlist, + safelist, + ) @test length(contr) == 15043 invlist = Int[] diff --git a/test/optim/unit_tests_NaiveAbstraction/test_fromcontrolsystemgrowth.jl b/test/optim/unit_tests_UniformGridAbstraction/test_fromcontrolsystemgrowth.jl similarity index 100% rename from test/optim/unit_tests_NaiveAbstraction/test_fromcontrolsystemgrowth.jl rename to test/optim/unit_tests_UniformGridAbstraction/test_fromcontrolsystemgrowth.jl diff --git a/test/optim/unit_tests_NaiveAbstraction/test_fromcontrolsystemlinearized.jl b/test/optim/unit_tests_UniformGridAbstraction/test_fromcontrolsystemlinearized.jl similarity index 100% rename from test/optim/unit_tests_NaiveAbstraction/test_fromcontrolsystemlinearized.jl rename to test/optim/unit_tests_UniformGridAbstraction/test_fromcontrolsystemlinearized.jl diff --git a/test/runtests.jl b/test/runtests.jl index 01a581287..610c2ebf3 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -21,13 +21,13 @@ include("./symbolic/test_ellipsoidal_transitions.jl") include("./problem/test_problems.jl") -include("./optim/unit_tests_NaiveAbstraction/test_controller.jl") -include("./optim/unit_tests_NaiveAbstraction/test_controllerreach.jl") -include("./optim/unit_tests_NaiveAbstraction/test_controllersafe.jl") -include("./optim/unit_tests_NaiveAbstraction/test_fromcontrolsystemgrowth.jl") -include("./optim/unit_tests_NaiveAbstraction/test_fromcontrolsystemlinearized.jl") -include("./optim/test_NaiveAbstraction_safety.jl") -include("./optim/test_NaiveAbstraction_reachability.jl") +include("./optim/unit_tests_UniformGridAbstraction/test_controller.jl") +include("./optim/unit_tests_UniformGridAbstraction/test_controllerreach.jl") +include("./optim/unit_tests_UniformGridAbstraction/test_controllersafe.jl") +include("./optim/unit_tests_UniformGridAbstraction/test_fromcontrolsystemgrowth.jl") +include("./optim/unit_tests_UniformGridAbstraction/test_fromcontrolsystemlinearized.jl") +include("./optim/test_UniformGridAbstraction_safety.jl") +include("./optim/test_UniformGridAbstraction_reachability.jl") include("./optim/test_lazy_abstraction.jl") include("./optim/test_ellipsoids_abstraction.jl") include("./optim/test_lazy_ellipsoids_abstraction.jl")