JuliaAPlavin / AccessibleOptimization.jl

MIT License
3 stars 0 forks source link

Support `FixArgs`? #4

Open jariji opened 2 months ago

jariji commented 2 months ago

It only supports Fix2 but sometimes I have extra arguments.

OptProblemSpec((@o optfunc(_, c, tab)), MVector, θ₀, vars,)
ERROR: MethodError: no method matching OptProblemSpec(::AccessorsExtra.FixArgs{…}, ::Type{…}, ::@NamedTuple{…}, ::OptArgs{…})

Closest candidates are:
  OptProblemSpec(::F, ::D, ::U, ::X0, ::VS, ::CS) where {F, D, U, X0, VS<:OptArgs, CS<:Union{Nothing, OptCons}}
   @ AccessibleOptimization ~/.julia/packages/AccessibleOptimization/VZ9ve/src/AccessibleOptimization.jl:103
  OptProblemSpec(::Base.Fix2, ::Type, ::Any, ::OptArgs, ::OptCons)
   @ AccessibleOptimization ~/.julia/packages/AccessibleOptimization/VZ9ve/src/AccessibleOptimization.jl:111
  OptProblemSpec(::Base.Fix2, ::Union{Nothing, Type}, ::Any, ::OptArgs, ::Union{Nothing, OptCons})
   @ AccessibleOptimization ~/.julia/packages/AccessibleOptimization/VZ9ve/src/AccessibleOptimization.jl:115
  ...
aplavin commented 2 months ago

As I understand, this limitation is due to Optimization.jl: they specifically support two-arg f that is called as f(x, p) for x being the optimization variables vector, and p an arbitrary value user passes to OptimizationProblem – https://docs.sciml.ai/Optimization/stable/API/optimization_problem/. Here, I take Fix2 and extract its fields to pass to Optimization.

aplavin commented 2 months ago

I guess it can convert any function to a two-arg function to pass to Optimization.jl though...