Skip to content

Commit 440fe47

Browse files
authored
Merge pull request #81 from control-toolbox/53-dev-plot-a-solution
53 dev plot a solution
2 parents 6c0146f + 2a25e13 commit 440fe47

21 files changed

Lines changed: 968 additions & 305 deletions

Project.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ Interpolations = "a98d9a8b-a2ab-59e6-89dd-64a1c18fca59"
1010
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
1111
MLStyle = "d8e11817-5142-5d16-987a-aa16d5891078"
1212
MacroTools = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09"
13+
OrderedCollections = "bac558e1-5e72-5ebc-8fee-abe8a469f55d"
1314
Parameters = "d96e819e-fc66-5662-9728-84c9c7592b0a"
1415
PrettyTables = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d"
1516
RecipesBase = "3cdcf5f2-1ef4-517c-9805-6587b60abb01"
@@ -33,6 +34,7 @@ JSON3 = "1.14"
3334
LinearAlgebra = "1"
3435
MLStyle = "0.4"
3536
MacroTools = "0.5"
37+
OrderedCollections = "1.8.0"
3638
Parameters = "0.12"
3739
Plots = "1.40"
3840
PrettyTables = "2.4"

docs/Project.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4"
33

44
[compat]
55
Documenter = "1"
6+
julia = "1.10"

ext/CTModelsJLD.jl

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
module CTModelsJLD
22

3-
using CTBase
43
using CTModels
54
using DocStringExtensions
65
using JLD2

ext/CTModelsJSON.jl

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
module CTModelsJSON
22

3-
using CTBase
43
using CTModels
54
using DocStringExtensions
65

@@ -28,7 +27,6 @@ function CTModels.export_ocp_solution(
2827
"message" => CTModels.message(sol),
2928
"stopping" => CTModels.stopping(sol),
3029
"success" => CTModels.success(sol),
31-
"path_constraints" => CTModels.discretize(CTModels.path_constraints(sol), T),
3230
"path_constraints_dual" =>
3331
CTModels.discretize(CTModels.path_constraints_dual(sol), T),
3432
"state_constraints_lb_dual" =>
@@ -39,7 +37,6 @@ function CTModels.export_ocp_solution(
3937
CTModels.discretize(CTModels.control_constraints_lb_dual(sol), T),
4038
"control_constraints_ub_dual" =>
4139
CTModels.discretize(CTModels.control_constraints_ub_dual(sol), T),
42-
"boundary_constraints" => CTModels.boundary_constraints(sol), # ctVector or Nothing
4340
"boundary_constraints_dual" => CTModels.boundary_constraints_dual(sol), # ctVector or Nothing
4441
"variable_constraints_lb_dual" => CTModels.variable_constraints_lb_dual(sol), # ctVector or Nothing
4542
"variable_constraints_ub_dual" => CTModels.variable_constraints_ub_dual(sol), # ctVector or Nothing
@@ -81,15 +78,7 @@ function CTModels.import_ocp_solution(
8178
P = Matrix{Float64}(reduce(hcat, P)')
8279
end
8380

84-
# get path constraints (and dual): convert to matrix
85-
path_constraints = if isnothing(blob["path_constraints"])
86-
nothing
87-
else
88-
stack(blob["path_constraints"]; dims=1)
89-
end
90-
if path_constraints isa Vector # if path_constraints is a Vector, convert it to a Matrix
91-
path_constraints = Matrix{Float64}(reduce(hcat, path_constraints)')
92-
end
81+
# get dual path constraints: convert to matrix
9382
path_constraints_dual = if isnothing(blob["path_constraints_dual"])
9483
nothing
9584
else
@@ -143,8 +132,7 @@ function CTModels.import_ocp_solution(
143132
)
144133
end
145134

146-
# get boundary constraints (and dual): no conversion needed
147-
boundary_constraints = blob["boundary_constraints"]
135+
# get dual of boundary constraints: no conversion needed
148136
boundary_constraints_dual = blob["boundary_constraints_dual"]
149137

150138
# get variable constraints dual: no conversion needed
@@ -165,13 +153,11 @@ function CTModels.import_ocp_solution(
165153
message=blob.message,
166154
stopping=Symbol(blob.stopping),
167155
success=blob.success,
168-
path_constraints=path_constraints,
169156
path_constraints_dual=path_constraints_dual,
170157
state_constraints_lb_dual=state_constraints_lb_dual,
171158
state_constraints_ub_dual=state_constraints_ub_dual,
172159
control_constraints_lb_dual=control_constraints_lb_dual,
173160
control_constraints_ub_dual=control_constraints_ub_dual,
174-
boundary_constraints=boundary_constraints,
175161
boundary_constraints_dual=boundary_constraints_dual,
176162
variable_constraints_lb_dual=variable_constraints_lb_dual,
177163
variable_constraints_ub_dual=variable_constraints_ub_dual,

ext/default.jl

Lines changed: 40 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -27,17 +27,45 @@ $(TYPEDSIGNATURES)
2727
2828
Used to set the default value of the plot size.
2929
"""
30-
function __size_plot(sol::CTModels.Solution, control::Symbol)
31-
n = CTModels.state_dimension(sol)
32-
m = @match control begin
33-
:components => CTModels.control_dimension(sol)
34-
:norm => 1
35-
:all => CTModels.control_dimension(sol) + 1
36-
_ => throw(
37-
CTBase.IncorrectArgument(
38-
"No such choice for control. Use :components, :norm or :all"
39-
),
40-
)
30+
function __size_plot(
31+
sol::CTModels.Solution,
32+
model::Union{CTModels.Model, Nothing},
33+
control::Symbol,
34+
layout::Symbol
35+
)
36+
if layout === :group
37+
if control === :all
38+
return (600, 560)
39+
else
40+
return (600, 280)
41+
end
42+
else
43+
n = CTModels.state_dimension(sol)
44+
l = @match control begin
45+
:components => CTModels.control_dimension(sol)
46+
:norm => 1
47+
:all => CTModels.control_dimension(sol) + 1
48+
_ => throw(
49+
CTBase.IncorrectArgument(
50+
"No such choice for control. Use :components, :norm or :all"
51+
),
52+
)
53+
end
54+
nc = model === nothing ? 0 : CTModels.dim_path_constraints_nl(model)
55+
return (600, 140 * (n + l + nc))
4156
end
42-
return (600, 140 * (n + m))
4357
end
58+
59+
"""
60+
$(TYPEDSIGNATURES)
61+
62+
Default style for the plot. Must be an empty tuple.
63+
"""
64+
__plot_style() = ()
65+
66+
"""
67+
$(TYPEDSIGNATURES)
68+
69+
Default suffix label for the plot. Must be an empty string.
70+
"""
71+
__plot_label_suffix() = ""

0 commit comments

Comments
 (0)