-
-
Notifications
You must be signed in to change notification settings - Fork 7
Closed
Labels
bugSomething isn't workingSomething isn't working
Description
I tried using this with the latest package versions:
[b2108857] Lux v1.7.0
[961ee093] ModelingToolkit v9.63.0
[f162e290] ModelingToolkitNeuralNets v1.5.0
[16a59e39] ModelingToolkitStandardLibrary v2.19.0
[7f7a1694] Optimization v4.1.1
[42dfb2eb] OptimizationOptimisers v0.3.7
[1dea7af3] OrdinaryDiffEq v6.91.0
[91a5bcdd] Plots v1.40.9
[53ae85a6] SciMLStructures v1.6.1
[860ef19b] StableRNGs v1.0.2
[2efcf032] SymbolicIndexingInterface v0.3.37
However, this code (copied directly from https://sciml.github.io/ModelingToolkitNeuralNets.jl/dev/friction/):
# Fetch packages.
using Catalyst
using ModelingToolkitNeuralNets
using ModelingToolkit
import ModelingToolkit.t_nounits as t
import ModelingToolkit.D_nounits as Dt
using ModelingToolkitStandardLibrary.Blocks
using OrdinaryDiffEq
using Optimization
using OptimizationOptimisers: Adam
using SciMLStructures
using SciMLStructures: Tunable
using SymbolicIndexingInterface
using StableRNGs
using Lux
using Plots
Fbrk = 100.0
vbrk = 10.0
Fc = 80.0
vst = vbrk / 10
vcol = vbrk * sqrt(2)
function friction(v)
sqrt(2 * MathConstants.e) * (Fbrk - Fc) * exp(-(v / vst)^2) * (v / vst) +
Fc * tanh(v / vcol)
end
function friction_true()
@variables y(t) = 0.0
@constants Fu = 120.0
eqs = [
Dt(y) ~ Fu - friction(y)
]
return ODESystem(eqs, t, name = :friction_true)
end
model_true = structural_simplify(friction_true())
prob_true = ODEProblem(model_true, [], (0, 0.1), [])
sol_ref = solve(prob_true, Rodas4(); saveat = 0.001)
scatter(sol_ref, label = "velocity")
scatter(sol_ref.t, friction.(first.(sol_ref.u)), label = "friction force")
function friction_ude(Fu)
@variables y(t) = 0.0
@constants Fu = Fu
@named nn_in = RealInputArray(nin = 1)
@named nn_out = RealOutputArray(nout = 1)
eqs = [Dt(y) ~ Fu - nn_in.u[1]
y ~ nn_out.u[1]]
return ODESystem(eqs, t, name = :friction, systems = [nn_in, nn_out])
end
Fu = 120.0
model = friction_ude(Fu)
chain = Lux.Chain(
Lux.Dense(1 => 10, Lux.mish, use_bias = false),
Lux.Dense(10 => 10, Lux.mish, use_bias = false),
Lux.Dense(10 => 1, use_bias = false)
)
@named nn = NeuralNetworkBlock(1, 1; chain = chain, rng = StableRNG(1111))
eqs = [connect(model.nn_in, nn.output)
connect(model.nn_out, nn.input)]
ude_sys = complete(ODESystem(eqs, t, systems = [model, nn], name = :ude_sys))
sys = structural_simplify(ude_sys)
function loss(x, (prob, sol_ref, get_vars, get_refs))
new_p = SciMLStructures.replace(Tunable(), prob.p, x)
new_prob = remake(prob, p = new_p, u0 = eltype(x).(prob.u0))
ts = sol_ref.t
new_sol = solve(new_prob, Rodas4(), saveat = ts, abstol = 1e-8, reltol = 1e-8)
loss = zero(eltype(x))
for i in eachindex(new_sol.u)
loss += sum(abs2.(get_vars(new_sol, i) .- get_refs(sol_ref, i)))
end
if SciMLBase.successful_retcode(new_sol)
loss
else
Inf
end
end
of = OptimizationFunction{true}(loss, AutoForwardDiff())
prob = ODEProblem(sys, [], (0, 0.1), [])
get_vars = getu(sys, [sys.friction.y])
get_refs = getu(model_true, [model_true.y])
x0 = reduce(vcat, getindex.((default_values(sys),), tunable_parameters(sys)))
cb = (opt_state, loss) -> begin
@info "step $(opt_state.iter), loss: $loss"
return false
end
op = OptimizationProblem(of, x0, (prob, sol_ref, get_vars, get_refs))
res = solve(op, Adam(5e-3); maxiters = 10000, callback = cb)generates a
ERROR: MethodError: no method matching one(::Type{Any})
This error has been manually thrown, explicitly, so the method may exist but be intentionally marked as unimplemented.
Closest candidates are:
one(::Type{Union{Missing, T}}) where T
@ Base missing.jl:105
one(::Type{Union{}}, Any...)
@ Base number.jl:349
one(::Type{ModelingToolkitStandardLibrary.Electrical.Logic})
@ ModelingToolkitStandardLibrary ~/.julia/packages/ModelingToolkitStandardLibrary/x7wQe/src/Electrical/Digital/logic.jl:40
...
Stacktrace:
[1] one(::Type{Any})
@ Base ./missing.jl:106
[2] macro expansion
@ ~/.julia/packages/ForwardDiff/UBbGT/src/partials.jl:0 [inlined]
[3] single_seed(::Type{ForwardDiff.Partials{12, Any}}, ::Val{1})
@ ForwardDiff ~/.julia/packages/ForwardDiff/UBbGT/src/partials.jl:9
[4] macro expansion
@ ~/.julia/packages/ForwardDiff/UBbGT/src/apiutils.jl:0 [inlined]
[5] construct_seeds(::Type{ForwardDiff.Partials{12, Any}})
@ ForwardDiff ~/.julia/packages/ForwardDiff/UBbGT/src/apiutils.jl:39
[6] ForwardDiff.GradientConfig(f::DifferentiationInterface.FixTail{…}, x::Vector{…}, ::ForwardDiff.Chunk{…}, ::ForwardDiff.Tag{…})
@ ForwardDiff ~/.julia/packages/ForwardDiff/UBbGT/src/config.jl:121
[7] prepare_gradient(f::typeof(loss), backend::AutoForwardDiff{…}, x::Vector{…}, contexts::DifferentiationInterface.Constant{…})
@ DifferentiationInterfaceForwardDiffExt ~/.julia/packages/DifferentiationInterface/srtnM/ext/DifferentiationInterfaceForwardDiffExt/onearg.jl:317
[8] instantiate_function(f::OptimizationFunction{…}, x::Vector{…}, adtype::AutoForwardDiff{…}, p::Tuple{…}, num_cons::Int64; g::Bool, h::Bool, hv::Bool, fg::Bool, fgh::Bool, cons_j::Bool, cons_vjp::Bool, cons_jvp::Bool, cons_h::Bool, lag_h::Bool)
@ OptimizationBase ~/.julia/packages/OptimizationBase/gvXsf/src/OptimizationDIExt.jl:26
[9] instantiate_function
@ ~/.julia/packages/OptimizationBase/gvXsf/src/OptimizationDIExt.jl:17 [inlined]
[10] #instantiate_function#40
@ ~/.julia/packages/OptimizationBase/gvXsf/src/OptimizationDIExt.jl:274 [inlined]
[11] instantiate_function
@ ~/.julia/packages/OptimizationBase/gvXsf/src/OptimizationDIExt.jl:267 [inlined]
[12] OptimizationCache(prob::OptimizationProblem{…}, opt::Adam; callback::Function, maxiters::Int64, maxtime::Nothing, abstol::Nothing, reltol::Nothing, progress::Bool, structural_analysis::Bool, manifold::Nothing, kwargs::@Kwargs{…})
@ OptimizationBase ~/.julia/packages/OptimizationBase/gvXsf/src/cache.jl:60
[13] OptimizationCache
@ ~/.julia/packages/OptimizationBase/gvXsf/src/cache.jl:25 [inlined]
[14] #__init#1
@ ~/.julia/packages/OptimizationOptimisers/xC7Ic/src/OptimizationOptimisers.jl:15 [inlined]
[15] __init
@ ~/.julia/packages/OptimizationOptimisers/xC7Ic/src/OptimizationOptimisers.jl:11 [inlined]
[16] #init#728
@ ~/.julia/packages/SciMLBase/YTOjh/src/solve.jl:173 [inlined]
[17] init
@ ~/.julia/packages/SciMLBase/YTOjh/src/solve.jl:171 [inlined]
[18] solve(::OptimizationProblem{…}, ::Adam; kwargs::@Kwargs{…})
@ SciMLBase ~/.julia/packages/SciMLBase/YTOjh/src/solve.jl:95
[19] top-level scope
@ ~/Path/file.jl:103
Some type information was truncated. Use `show(err)` to see complete types.
on the last line
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working