You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* working Enzyme
# Conflicts:
# Project.toml
# examples/budgerigar.jl
# src/endotherm/thermoregulation/ipopt.jl
# src/endotherm/thermoregulation/rulebased.jl
* Track HeatExchange API renames and add smoothing kwarg to IPOPTControl
Caller-side updates for upstream renames: generated_heat_flow → metabolic_heat_flow,
per-side insulation_depth/conductivity moved under .dorsal/.ventral, shape_b → axis_ratio_b,
respiration_mass → respiration_mass_flow. Adds `smoothing` field on IPOPTControl
(default SmoothBound(1e-5)) threaded into nlp_pack so AD sees differentiable kinks.
* cleanup and deps
* more cleanup
* Apply suggestion from @rafaqz
@@ -331,6 +329,6 @@ Typical tuning guidance for penalty weights:
331
329
332
330
## Limitations and Future Work
333
331
334
-
-**Automatic differentiation:**`Unitful.jl` units propagate through `HeatExchange.heat_balance`, making it incompatible with `ForwardDiff` or `Zygote`. All derivatives are computed by finite differences via `FiniteDiff.jl`. Stripping units from the inner-loop heat balance computation would allow exact derivatives and potentially faster convergence.
332
+
-**Automatic differentiation:**derivatives are computed via `Enzyme.jl` (reverse-mode for the objective gradient, forward-mode for the constraint Jacobian). The Hessian and constraint Hessian callbacks are stubs because IPOPT runs with the L-BFGS Hessian approximation; supplying exact second-order information may improve convergence further.
335
333
-**Dorsal/ventral symmetry:** the mean-weighted body approximation merges dorsal and ventral sides. The full `solve_metabolic_rate` computes them separately. In strongly asymmetric conditions (e.g. high solar loading on dorsal surface) this may introduce small errors.
336
334
-**Global optimality:** IPOPT finds a local optimum of the NLP. For well-posed problems the objective is approximately convex and the local optimum is unique, but unusual initial conditions or extreme parameter combinations may yield suboptimal solutions.
0 commit comments