@@ -84,12 +84,15 @@ namespace_operation(sys::OptimizationSystem) = namespace_operation(sys.op,sys.na
84
84
hessian_sparsity (sys:: OptimizationSystem ) =
85
85
hessian_sparsity (sys. op,[dv () for dv in states (sys)])
86
86
87
+ struct ManualModelingToolkit <: DiffEqBase.AbstractADType end
88
+
87
89
"""
88
90
```julia
89
91
function DiffEqBase.OptimizationProblem{iip}(sys::OptimizationSystem,
90
92
parammap=DiffEqBase.NullParameters();
91
93
u0=nothing, lb=nothing, ub=nothing,
92
- hes = false, sparse = false,
94
+ grad = false,
95
+ hess = false, sparse = false,
93
96
checkbounds = false,
94
97
linenumbers = true, parallel=SerialForm(),
95
98
kwargs...) where iip
@@ -98,30 +101,53 @@ function DiffEqBase.OptimizationProblem{iip}(sys::OptimizationSystem,
98
101
Generates an OptimizationProblem from an OptimizationSystem and allows for automatically
99
102
symbolically calculating numerical enhancements.
100
103
"""
101
- function DiffEqBase. OptimizationProblem {iip} (sys:: OptimizationSystem ,
104
+ function DiffEqBase. OptimizationProblem {iip} (sys:: OptimizationSystem , u0,
102
105
parammap= DiffEqBase. NullParameters ();
103
- u0= nothing , lb= nothing , ub= nothing ,
104
- hes = false , sparse = false ,
106
+ lb= nothing , ub= nothing ,
107
+ grad = false ,
108
+ hess = false , sparse = false ,
105
109
checkbounds = false ,
106
110
linenumbers = true , parallel= SerialForm (),
107
111
kwargs... ) where iip
108
112
dvs = states (sys)
109
113
ps = parameters (sys)
110
114
111
115
f = generate_function (sys,checkbounds= checkbounds,linenumbers= linenumbers,
112
- parallel = parallel, expression= Val{false })
116
+ expression= Val{false })
113
117
u0 = varmap_to_vars (u0,dvs)
118
+
119
+ if grad
120
+ grad_oop,grad_iip = generate_gradient (sys,checkbounds= checkbounds,linenumbers= linenumbers,
121
+ parallel= parallel,expression= Val{false })
122
+ _grad (u,p) = grad_oop (u,p)
123
+ _grad (J,u,p) = grad_iip (J,u,p)
124
+ else
125
+ _grad = nothing
126
+ end
127
+
128
+ if hess
129
+ hess_oop,hess_iip = generate_hessian (sys,checkbounds= checkbounds,linenumbers= linenumbers,
130
+ sparse= sparse,parallel= parallel,expression= Val{false })
131
+ _hess (u,p) = hess_oop (u,p)
132
+ _hess (J,u,p) = hess_iip (J,u,p)
133
+ else
134
+ _hess = nothing
135
+ end
136
+
137
+ _f = OptimizationFunction {iip,typeof(f),typeof(_grad),typeof(_hess),Nothing,Nothing,Nothing,Nothing} (f,_grad,_hess,nothing ,ManualModelingToolkit (),nothing ,nothing ,nothing ,0 )
138
+
114
139
p = varmap_to_vars (parammap,ps)
115
140
lb = varmap_to_vars (lb,dvs)
116
141
ub = varmap_to_vars (ub,dvs)
117
- OptimizationProblem (f,p;u0 = u0, lb= lb,ub= ub,kwargs... )
142
+ OptimizationProblem {iip} (_f,u0,p; lb= lb,ub= ub,kwargs... )
118
143
end
119
144
120
145
"""
121
146
```julia
122
147
function DiffEqBase.OptimizationProblemExpr{iip}(sys::OptimizationSystem,
123
148
parammap=DiffEqBase.NullParameters();
124
149
u0=nothing, lb=nothing, ub=nothing,
150
+ grad = false,
125
151
hes = false, sparse = false,
126
152
checkbounds = false,
127
153
linenumbers = true, parallel=SerialForm(),
@@ -134,9 +160,10 @@ calculating numerical enhancements.
134
160
"""
135
161
struct OptimizationProblemExpr{iip} end
136
162
137
- function OptimizationProblemExpr {iip} (sys:: OptimizationSystem ,
163
+ function OptimizationProblemExpr {iip} (sys:: OptimizationSystem , u0,
138
164
parammap= DiffEqBase. NullParameters ();
139
- u0= nothing , lb= nothing , ub= nothing ,
165
+ lb= nothing , ub= nothing ,
166
+ grad = true ,
140
167
hes = false , sparse = false ,
141
168
checkbounds = false ,
142
169
linenumbers = false , parallel= SerialForm (),
@@ -145,7 +172,7 @@ function OptimizationProblemExpr{iip}(sys::OptimizationSystem,
145
172
ps = parameters (sys)
146
173
147
174
f = generate_function (sys,checkbounds= checkbounds,linenumbers= linenumbers,
148
- parallel = parallel, expression= Val{true })
175
+ expression= Val{true })
149
176
u0 = varmap_to_vars (u0,dvs)
150
177
p = varmap_to_vars (parammap,ps)
151
178
lb = varmap_to_vars (lb,dvs)
@@ -156,6 +183,6 @@ function OptimizationProblemExpr{iip}(sys::OptimizationSystem,
156
183
u0 = $ u0
157
184
lb = $ lb
158
185
ub = $ ub
159
- OptimizationProblem (f,p;u0 = u0, lb= lb,ub= ub,kwargs... )
186
+ OptimizationProblem (f,u0,p; lb= lb,ub= ub,kwargs... )
160
187
end
161
188
end
0 commit comments