Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using Optim
- struct Box <: Optim.Manifold
- min
- max
- end
- import Optim.retract!
- import Optim.project_tangent!
- retract!(B::Box, x) = (x .= min.(B.max,max.(B.min, x)))
- function project_tangent!(B::Box,g,x)
- for i in eachindex(x)
- if x[i] == B.min[i] || x[i] == B.max[i]
- g[i] = 0
- end
- end
- end
- n = 10
- f(x) = -sum(abs2,x)
- g(x) = -2x
- g!(stor,x) = copy!(stor,g(x))
- x0 = randn(n)
- manif = Box(fill(-1.0, (n,)),fill(1.0, (n,)))
- res = Optim.optimize(f, g!, x0, Optim.GradientDescent(manifold=manif))
Add Comment
Please, Sign In to add comment