@@ -23,7 +23,7 @@ struct JuMPDynamicOptProblem{uType, tType, isinplace, P, F, K} <:
2323 u0:: uType
2424 tspan:: tType
2525 p:: P
26- model :: InfiniteOptModel
26+ wrapped_model :: InfiniteOptModel
2727 kwargs:: K
2828
2929 function JuMPDynamicOptProblem (f, u0, tspan, p, model, kwargs... )
@@ -38,7 +38,7 @@ struct InfiniteOptDynamicOptProblem{uType, tType, isinplace, P, F, K} <:
3838 u0:: uType
3939 tspan:: tType
4040 p:: P
41- model :: InfiniteOptModel
41+ wrapped_model :: InfiniteOptModel
4242 kwargs:: K
4343
4444 function InfiniteOptDynamicOptProblem (f, u0, tspan, p, model, kwargs... )
@@ -110,34 +110,10 @@ function MTK.InfiniteOptDynamicOptProblem(sys::System, u0map, tspan, pmap;
110110 steps = nothing ,
111111 guesses = Dict (), kwargs... )
112112 prob = MTK. process_DynamicOptProblem (InfiniteOptDynamicOptProblem, InfiniteOptModel, sys, u0map, tspan, pmap; dt, steps, guesses, kwargs... )
113- MTK. add_equational_constraints! (prob. model , sys, pmap, tspan)
113+ MTK. add_equational_constraints! (prob. wrapped_model , sys, pmap, tspan)
114114 prob
115115end
116116
117- function MTK. set_variable_bounds! (model:: InfiniteOptModel , sys, pmap, tf)
118- for (i, u) in enumerate (unknowns (sys))
119- if MTK. hasbounds (u)
120- lo, hi = MTK. getbounds (u)
121- set_lower_bound (model. U[i], Symbolics. fixpoint_sub (lo, pmap))
122- set_upper_bound (model. U[i], Symbolics. fixpoint_sub (hi, pmap))
123- end
124- end
125-
126- for (i, v) in enumerate (MTK. unbound_inputs (sys))
127- if MTK. hasbounds (v)
128- lo, hi = MTK. getbounds (v)
129- set_lower_bound (model. V[i], Symbolics. fixpoint_sub (lo, pmap))
130- set_upper_bound (model. V[i], Symbolics. fixpoint_sub (hi, pmap))
131- end
132- end
133-
134- if MTK. symbolic_type (tf) === MTK. ScalarSymbolic () && hasbounds (tf)
135- lo, hi = MTK. getbounds (tf)
136- set_lower_bound (model. tₛ, lo)
137- set_upper_bound (model. tₛ, hi)
138- end
139- end
140-
141117function MTK. substitute_integral (model, exprs, tspan)
142118 intmap = Dict ()
143119 for int in MTK. collect_applied_operators (exprs, Symbolics. Integral)
@@ -191,14 +167,12 @@ end
191167
192168function add_solve_constraints! (prob:: JuMPDynamicOptProblem , tableau)
193169 @unpack A, α, c = tableau
194- @unpack model, f, p = prob
195- t = model. model[:t ]
170+ @unpack wrapped_model, f, p = prob
171+ @unpack tₛ, U, V, model = wrapped_model
172+ t = model[:t ]
196173 tsteps = supports (t)
197174 dt = tsteps[2 ] - tsteps[1 ]
198175
199- tₛ = model. tₛ
200- U = model. U
201- V = model. V
202176 nᵤ = length (U)
203177 nᵥ = length (V)
204178 if MTK. is_explicit (tableau)
@@ -212,22 +186,22 @@ function add_solve_constraints!(prob::JuMPDynamicOptProblem, tableau)
212186 push! (K, Kₙ)
213187 end
214188 ΔU = dt * sum ([α[i] * K[i] for i in 1 : length (α)])
215- @constraint (model. model , [n = 1 : nᵤ], U[n](τ) + ΔU[n]== U[n](τ + dt),
189+ @constraint (model, [n = 1 : nᵤ], U[n](τ) + ΔU[n]== U[n](τ + dt),
216190 base_name= " solve_time_$τ " )
217191 empty! (K)
218192 end
219193 else
220- @variable (model. model , K[1 : length (α), 1 : nᵤ], Infinite (t ))
194+ K = @variable (model, K[1 : length (α), 1 : nᵤ], Infinite (model[ :t ] ))
221195 ΔUs = A * K
222196 ΔU_tot = dt * (K' * α)
223197 for τ in tsteps[1 : end - 1 ]
224198 for (i, h) in enumerate (c)
225199 ΔU = @view ΔUs[i, :]
226- Uₙ = U + ΔU * h * dt
227- @constraint (model. model , [j = 1 : nᵤ], K[i, j]== (tₛ * f (Uₙ, V, p, τ + h * dt)[j]),
200+ Uₙ = U + ΔU * dt
201+ @constraint (model, [j = 1 : nᵤ], K[i, j]== (tₛ * f (Uₙ, V, p, τ + h * dt)[j]),
228202 DomainRestrictions (t => τ), base_name= " solve_K$i ($τ )" )
229203 end
230- @constraint (model. model , [n = 1 : nᵤ], U[n](τ) + ΔU_tot[n]== U[n](min (τ + dt, tsteps[end ])),
204+ @constraint (model, [n = 1 : nᵤ], U[n](τ) + ΔU_tot[n]== U[n](min (τ + dt, tsteps[end ])),
231205 DomainRestrictions (t => τ), base_name= " solve_U($τ )" )
232206 end
233207 end
256230MTK. InfiniteOptCollocation (solver, derivative_method = InfiniteOpt. FiniteDifference (InfiniteOpt. Backward ())) = InfiniteOptCollocation (solver, derivative_method)
257231
258232function MTK. prepare_and_optimize! (prob:: JuMPDynamicOptProblem , solver:: JuMPCollocation ; verbose = false , kwargs... )
259- model = prob. model . model
233+ model = prob. wrapped_model . model
260234 verbose || set_silent (model)
261235 # Unregister current solver constraints
262236 for con in all_constraints (model)
@@ -278,7 +252,7 @@ function MTK.prepare_and_optimize!(prob::JuMPDynamicOptProblem, solver::JuMPColl
278252end
279253
280254function MTK. prepare_and_optimize! (prob:: InfiniteOptDynamicOptProblem , solver:: InfiniteOptCollocation ; verbose = false , kwargs... )
281- model = prob. model . model
255+ model = prob. wrapped_model . model
282256 verbose || set_silent (model)
283257 set_derivative_method (model[:t ], solver. derivative_method)
284258 set_optimizer (model, solver. solver)
0 commit comments