I can’t seem to find this anywhere and I’m sorry in advance if my trivial question is indeed elsewhere…
I have a differentiable periodic function:
function fitness(x::Vector)
LV = ones(105)
QV = ones(105,10)
Qx = zeros(size(QV,1))
V = dot(LV,(1 .- cos.(LinearAlgebra.mul!(Qx,QV,x))))
return V
end
with gradient
function g!(x::Vector, storage::Vector)
LV = ones(105)
QV = ones(105,10)
Qx = zeros(size(QV,1))
storage::Vector = vcat([dot(LV,QV[:,i] .* sin.(LinearAlgebra.mul!(Qx,QV,x))) for i ∈ 1:size(QV,2)]...)
end
and running
res = optimize(fitness,g!,zeros(10) .+0.01,method = LBFGS())
gives a single iteration and then Optim.minimizer(res)
just spits out a 10-element vector with 0.01
as every entry. What am I doing wrong here? My actual problem is more complicated than this (the LV and QV have the shapes as above, but the values of LV have huge hierarchies – I initially thought this was the issue, but it seems the optimization doesn’t run even for this MWE – and the QV are made up of integers in -10:10). Would be really grateful if someone could point me in the right direction here!
PS I tried to include
function h!(x::Vector, storage::Matrix)
LV = ones(105)
QV = ones(105,10)
Qx = zeros(size(QV,1))
storage::Matrix = hcat([[dot(LV,QV[:,i] .* QV[:,j] .* cos.(LinearAlgebra.mul!(Qx,QV,x))) for i ∈ 1:size(QV,2)] for j ∈ size(QV,2)]...)
end
and use method = Newton()
but that threw the error
no method matching h!(::Matrix{Float64}, ::Vector{Float64}
and I don’t really understand why! Thanks in advance