@@ -14,29 +14,33 @@ Export OCP solution in JSON format
1414function CTModels. export_ocp_solution (
1515 :: CTModels.JSON3Tag , sol:: CTModels.Solution ; filename_prefix= " solution"
1616)
17-
1817 T = CTModels. time_grid (sol)
1918
2019 blob = Dict (
21- " time_grid" => CTModels. time_grid (sol),
22- " state" => CTModels. state_discretized (sol),
23- " control" => CTModels. control_discretized (sol),
24- " variable" => CTModels. variable (sol),
25- " costate" => CTModels. costate_discretized (sol)[1 : (end - 1 ), :],
26- " objective" => CTModels. objective (sol),
27- " iterations" => CTModels. iterations (sol),
20+ " time_grid" => CTModels. time_grid (sol),
21+ " state" => CTModels. state_discretized (sol),
22+ " control" => CTModels. control_discretized (sol),
23+ " variable" => CTModels. variable (sol),
24+ " costate" => CTModels. costate_discretized (sol)[1 : (end - 1 ), :],
25+ " objective" => CTModels. objective (sol),
26+ " iterations" => CTModels. iterations (sol),
2827 " constraints_violation" => CTModels. constraints_violation (sol),
29- " message" => CTModels. message (sol),
30- " stopping" => CTModels. stopping (sol),
31- " success" => CTModels. success (sol),
32- " path_constraints" => CTModels. discretize (CTModels. path_constraints (sol), T),
33- " path_constraints_dual" => CTModels. discretize (CTModels. path_constraints_dual (sol), T),
34- " state_constraints_lb_dual" => CTModels. discretize (CTModels. state_constraints_lb_dual (sol), T),
35- " state_constraints_ub_dual" => CTModels. discretize (CTModels. state_constraints_ub_dual (sol), T),
36- " control_constraints_lb_dual" => CTModels. discretize (CTModels. control_constraints_lb_dual (sol), T),
37- " control_constraints_ub_dual" => CTModels. discretize (CTModels. control_constraints_ub_dual (sol), T),
38- " boundary_constraints" => CTModels. boundary_constraints (sol), # ctVector or Nothing
39- " boundary_constraints_dual" => CTModels. boundary_constraints_dual (sol), # ctVector or Nothing
28+ " message" => CTModels. message (sol),
29+ " stopping" => CTModels. stopping (sol),
30+ " success" => CTModels. success (sol),
31+ " path_constraints" => CTModels. discretize (CTModels. path_constraints (sol), T),
32+ " path_constraints_dual" =>
33+ CTModels. discretize (CTModels. path_constraints_dual (sol), T),
34+ " state_constraints_lb_dual" =>
35+ CTModels. discretize (CTModels. state_constraints_lb_dual (sol), T),
36+ " state_constraints_ub_dual" =>
37+ CTModels. discretize (CTModels. state_constraints_ub_dual (sol), T),
38+ " control_constraints_lb_dual" =>
39+ CTModels. discretize (CTModels. control_constraints_lb_dual (sol), T),
40+ " control_constraints_ub_dual" =>
41+ CTModels. discretize (CTModels. control_constraints_ub_dual (sol), T),
42+ " boundary_constraints" => CTModels. boundary_constraints (sol), # ctVector or Nothing
43+ " boundary_constraints_dual" => CTModels. boundary_constraints_dual (sol), # ctVector or Nothing
4044 " variable_constraints_lb_dual" => CTModels. variable_constraints_lb_dual (sol), # ctVector or Nothing
4145 " variable_constraints_ub_dual" => CTModels. variable_constraints_ub_dual (sol), # ctVector or Nothing
4246 )
@@ -56,7 +60,6 @@ Read OCP solution in JSON format
5660function CTModels. import_ocp_solution (
5761 :: CTModels.JSON3Tag , ocp:: CTModels.Model ; filename_prefix= " solution"
5862)
59-
6063 json_string = read (filename_prefix * " .json" , String)
6164 blob = JSON3. read (json_string)
6265
@@ -79,33 +82,65 @@ function CTModels.import_ocp_solution(
7982 end
8083
8184 # get path constraints (and dual): convert to matrix
82- path_constraints = isnothing (blob[" path_constraints" ]) ? nothing : stack (blob[" path_constraints" ]; dims= 1 )
85+ path_constraints = if isnothing (blob[" path_constraints" ])
86+ nothing
87+ else
88+ stack (blob[" path_constraints" ]; dims= 1 )
89+ end
8390 if path_constraints isa Vector # if path_constraints is a Vector, convert it to a Matrix
8491 path_constraints = Matrix {Float64} (reduce (hcat, path_constraints)' )
8592 end
86- path_constraints_dual = isnothing (blob[" path_constraints_dual" ]) ? nothing : stack (blob[" path_constraints_dual" ]; dims= 1 )
93+ path_constraints_dual = if isnothing (blob[" path_constraints_dual" ])
94+ nothing
95+ else
96+ stack (blob[" path_constraints_dual" ]; dims= 1 )
97+ end
8798 if path_constraints_dual isa Vector # if path_constraints_dual is a Vector, convert it to a Matrix
8899 path_constraints_dual = Matrix {Float64} (reduce (hcat, path_constraints_dual)' )
89100 end
90101
91102 # get state constraints (and dual): convert to matrix
92- state_constraints_lb_dual = isnothing (blob[" state_constraints_lb_dual" ]) ? nothing : stack (blob[" state_constraints_lb_dual" ]; dims= 1 )
103+ state_constraints_lb_dual = if isnothing (blob[" state_constraints_lb_dual" ])
104+ nothing
105+ else
106+ stack (blob[" state_constraints_lb_dual" ]; dims= 1 )
107+ end
93108 if state_constraints_lb_dual isa Vector # if state_constraints_lb_dual is a Vector, convert it to a Matrix
94- state_constraints_lb_dual = Matrix {Float64} (reduce (hcat, state_constraints_lb_dual)' )
109+ state_constraints_lb_dual = Matrix {Float64} (
110+ reduce (hcat, state_constraints_lb_dual)'
111+ )
112+ end
113+ state_constraints_ub_dual = if isnothing (blob[" state_constraints_ub_dual" ])
114+ nothing
115+ else
116+ stack (blob[" state_constraints_ub_dual" ]; dims= 1 )
95117 end
96- state_constraints_ub_dual = isnothing (blob[" state_constraints_ub_dual" ]) ? nothing : stack (blob[" state_constraints_ub_dual" ]; dims= 1 )
97118 if state_constraints_ub_dual isa Vector # if state_constraints_ub_dual is a Vector, convert it to a Matrix
98- state_constraints_ub_dual = Matrix {Float64} (reduce (hcat, state_constraints_ub_dual)' )
119+ state_constraints_ub_dual = Matrix {Float64} (
120+ reduce (hcat, state_constraints_ub_dual)'
121+ )
99122 end
100123
101124 # get control constraints (and dual): convert to matrix
102- control_constraints_lb_dual = isnothing (blob[" control_constraints_lb_dual" ]) ? nothing : stack (blob[" control_constraints_lb_dual" ]; dims= 1 )
125+ control_constraints_lb_dual = if isnothing (blob[" control_constraints_lb_dual" ])
126+ nothing
127+ else
128+ stack (blob[" control_constraints_lb_dual" ]; dims= 1 )
129+ end
103130 if control_constraints_lb_dual isa Vector # if control_constraints_lb_dual is a Vector, convert it to a Matrix
104- control_constraints_lb_dual = Matrix {Float64} (reduce (hcat, control_constraints_lb_dual)' )
131+ control_constraints_lb_dual = Matrix {Float64} (
132+ reduce (hcat, control_constraints_lb_dual)'
133+ )
134+ end
135+ control_constraints_ub_dual = if isnothing (blob[" control_constraints_ub_dual" ])
136+ nothing
137+ else
138+ stack (blob[" control_constraints_ub_dual" ]; dims= 1 )
105139 end
106- control_constraints_ub_dual = isnothing (blob[" control_constraints_ub_dual" ]) ? nothing : stack (blob[" control_constraints_ub_dual" ]; dims= 1 )
107140 if control_constraints_ub_dual isa Vector # if control_constraints_ub_dual is a Vector, convert it to a Matrix
108- control_constraints_ub_dual = Matrix {Float64} (reduce (hcat, control_constraints_ub_dual)' )
141+ control_constraints_ub_dual = Matrix {Float64} (
142+ reduce (hcat, control_constraints_ub_dual)'
143+ )
109144 end
110145
111146 # get boundary constraints (and dual): no conversion needed
@@ -141,7 +176,6 @@ function CTModels.import_ocp_solution(
141176 variable_constraints_lb_dual= variable_constraints_lb_dual,
142177 variable_constraints_ub_dual= variable_constraints_ub_dual,
143178 )
144-
145179end
146180
147181end
0 commit comments