@@ -288,6 +288,21 @@ function DiffEqBase.OptimizationProblem{iip}(sys::OptimizationSystem, u0map,
288
288
hess_prototype = nothing
289
289
end
290
290
291
+ observedfun = let sys = sys, dict = Dict ()
292
+ function generated_observed (obsvar, args... )
293
+ obs = get! (dict, value (obsvar)) do
294
+ build_explicit_observed_function (sys, obsvar)
295
+ end
296
+ if args === ()
297
+ let obs = obs
298
+ (u, p) -> obs (u, p)
299
+ end
300
+ else
301
+ obs (args... )
302
+ end
303
+ end
304
+ end
305
+
291
306
if length (cstr) > 0
292
307
@named cons_sys = ConstraintsSystem (cstr, dvs, ps)
293
308
cons, lcons_, ucons_ = generate_function (cons_sys, checkbounds = checkbounds,
@@ -334,7 +349,8 @@ function DiffEqBase.OptimizationProblem{iip}(sys::OptimizationSystem, u0map,
334
349
cons_jac_prototype = cons_jac_prototype,
335
350
cons_hess_prototype = cons_hess_prototype,
336
351
expr = obj_expr,
337
- cons_expr = cons_expr)
352
+ cons_expr = cons_expr,
353
+ observed = observedfun)
338
354
OptimizationProblem {iip} (_f, u0, p; lb = lb, ub = ub, int = int,
339
355
lcons = lcons, ucons = ucons, kwargs... )
340
356
else
@@ -346,7 +362,8 @@ function DiffEqBase.OptimizationProblem{iip}(sys::OptimizationSystem, u0map,
346
362
syms = Symbol .(states (sys)),
347
363
paramsyms = Symbol .(parameters (sys)),
348
364
hess_prototype = hess_prototype,
349
- expr = obj_expr)
365
+ expr = obj_expr,
366
+ observed = observedfun)
350
367
OptimizationProblem {iip} (_f, u0, p; lb = lb, ub = ub, int = int,
351
368
kwargs... )
352
369
end
0 commit comments