@@ -150,29 +150,28 @@ function set_jump_bounds!(model, sys, pmap)
150
150
for (i, u) in enumerate (unknowns (sys))
151
151
if MTK. hasbounds (u)
152
152
lo, hi = MTK. getbounds (u)
153
- set_lower_bound (U[i], Symbolics. fixpoint_sub (lo, pmap))
154
- set_upper_bound (U[i], Symbolics. fixpoint_sub (hi, pmap))
153
+ set_lower_bound (U[i], Symbolics. fast_substitute (lo, pmap))
154
+ set_upper_bound (U[i], Symbolics. fast_substitute (hi, pmap))
155
155
end
156
156
end
157
157
158
158
V = model[:V ]
159
159
for (i, v) in enumerate (MTK. unbound_inputs (sys))
160
160
if MTK. hasbounds (v)
161
161
lo, hi = MTK. getbounds (v)
162
- set_lower_bound (V[i], Symbolics. fixpoint_sub (lo, pmap))
163
- set_upper_bound (V[i], Symbolics. fixpoint_sub (hi, pmap))
162
+ set_lower_bound (V[i], Symbolics. fast_substitute (lo, pmap))
163
+ set_upper_bound (V[i], Symbolics. fast_substitute (hi, pmap))
164
164
end
165
165
end
166
166
end
167
167
168
168
function add_jump_cost_function! (model:: InfiniteModel , sys, tspan, pmap; is_free_t = false )
169
- jcosts = MTK. get_costs (sys)
170
- consolidate = MTK. get_consolidate (sys)
171
- if isnothing (jcosts) || isempty (jcosts)
169
+ jcosts = cost (sys)
170
+ if Symbolics. _iszero (jcosts)
172
171
@objective (model, Min, 0 )
173
172
return
174
173
end
175
- jcosts = substitute_jump_vars (model, sys, pmap, jcosts; is_free_t)
174
+ jcosts = substitute_jump_vars (model, sys, pmap, [ jcosts] ; is_free_t)[ 1 ]
176
175
tₛ = is_free_t ? model[:tf ] : 1
177
176
178
177
# Substitute integral
@@ -187,17 +186,18 @@ function add_jump_cost_function!(model::InfiniteModel, sys, tspan, pmap; is_free
187
186
hi = haskey (pmap, hi) ? 1 : MTK. value (hi)
188
187
intmap[int] = tₛ * InfiniteOpt.∫ (arg, model[:t ], lo, hi)
189
188
end
190
- jcosts = map (c -> Symbolics. substitute (c , intmap), jcosts )
191
- @objective (model, Min, consolidate (jcosts))
189
+ jcosts = Symbolics. substitute (jcosts , intmap)
190
+ @objective (model, Min, MTK . value (jcosts))
192
191
end
193
192
194
193
function add_user_constraints! (model:: InfiniteModel , sys, pmap; is_free_t = false )
195
- conssys = MTK. get_constraintsystem (sys)
196
- jconstraints = isnothing (conssys) ? nothing : MTK. get_constraints (conssys)
194
+ jconstraints = MTK. get_constraints (sys)
197
195
(isnothing (jconstraints) || isempty (jconstraints)) && return nothing
196
+ cons_dvs, cons_ps = MTK. process_constraint_system (
197
+ jconstraints, Set (unknowns (sys)), parameters (sys), MTK. get_iv (sys); validate = false )
198
198
199
199
if is_free_t
200
- for u in MTK . get_unknowns (conssys)
200
+ for u in cons_dvs
201
201
x = MTK. operation (u)
202
202
t = only (arguments (u))
203
203
if (MTK. symbolic_type (t) === MTK. NotSymbolic ())
@@ -206,7 +206,7 @@ function add_user_constraints!(model::InfiniteModel, sys, pmap; is_free_t = fals
206
206
end
207
207
end
208
208
209
- auxmap = Dict ([u => MTK. default_toterm (MTK. value (u)) for u in unknowns (conssys) ])
209
+ auxmap = Dict ([u => MTK. default_toterm (MTK. value (u)) for u in cons_dvs ])
210
210
jconstraints = substitute_jump_vars (model, sys, pmap, jconstraints; auxmap, is_free_t)
211
211
212
212
# Substitute to-term'd variables
@@ -235,25 +235,25 @@ function substitute_jump_vars(model, sys, pmap, exprs; auxmap = Dict(), is_free_
235
235
x_ops = [MTK. operation (MTK. unwrap (st)) for st in sts]
236
236
c_ops = [MTK. operation (MTK. unwrap (ct)) for ct in cts]
237
237
238
- exprs = map (c -> Symbolics. fixpoint_sub (c, auxmap), exprs)
239
- exprs = map (c -> Symbolics. fixpoint_sub (c, Dict (pmap)), exprs)
238
+ exprs = map (c -> Symbolics. fast_substitute (c, auxmap), exprs)
239
+ exprs = map (c -> Symbolics. fast_substitute (c, Dict (pmap)), exprs)
240
240
if is_free_t
241
241
tf = model[:tf ]
242
242
free_t_map = Dict ([[x (tf) => U[i](1 ) for (i, x) in enumerate (x_ops)];
243
243
[c (tf) => V[i](1 ) for (i, c) in enumerate (c_ops)]])
244
- exprs = map (c -> Symbolics. fixpoint_sub (c, free_t_map), exprs)
244
+ exprs = map (c -> Symbolics. fast_substitute (c, free_t_map), exprs)
245
245
end
246
246
247
247
# for variables like x(t)
248
248
whole_interval_map = Dict ([[v => U[i] for (i, v) in enumerate (sts)];
249
249
[v => V[i] for (i, v) in enumerate (cts)]])
250
- exprs = map (c -> Symbolics. fixpoint_sub (c, whole_interval_map), exprs)
250
+ exprs = map (c -> Symbolics. fast_substitute (c, whole_interval_map), exprs)
251
251
252
252
# for variables like x(1.0)
253
253
fixed_t_map = Dict ([[x_ops[i] => U[i] for i in 1 : length (U)];
254
254
[c_ops[i] => V[i] for i in 1 : length (V)]])
255
255
256
- exprs = map (c -> Symbolics. fixpoint_sub (c, fixed_t_map), exprs)
256
+ exprs = map (c -> Symbolics. fast_substitute (c, fixed_t_map), exprs)
257
257
exprs
258
258
end
259
259
0 commit comments