I’m using the PSO algorithm in Optim.jl to minimise a certain loss function, which is a positive multinomial of very high degree (over a constraint domain, a product of several simplexes), and the optimisation is done in BigFloat precision.
The loss function itself consists of recursive computations that are not suited to parralelisation, so i thought I’ll parallelise at the Swarm level: after all, the Particle Swarm algorithm computes in parallel objectives values for many points, hence parralelisation can be done there.
I noticed that they were several issues on github talking about that :
- https://github.com/JuliaNLSolvers/Optim.jl/pull/735 This PR proposes a solution that would fit me, but was finaly never merged.
- In this one https://github.com/JuliaNLSolvers/Optim.jl/pull/843 , @pkofod proposes several gists that may possibly works, and talks about an implementation later in another package.
I’ve been using Julia for only one week now so I’m not really sure of what’s the good way of doing what I want to do. My current plan is to update the first PR code to build my own version of Optim.jl and make julia work with it. The PR is old (~1year), and i guess that the stable version of Optim.jl has moved since.
Last but not least, I’d like the possibility to tweak myself some of the details of the ParticleSwarm implementation I’m using, e.g including a Scout phase as in Hasan Koyuncu & Rahime Ceylan’s ScPSO. How hard would it be to export through Optim.jl layers a tweakable Boolean to enable / disable this modification to the classical PSO ?
- Do you know about other implementation of a PSO that I missed (and that are pure-julia for BigFloat support) ?
- How hard would it be to bring the old PR back to life ?
- What documentation should i read before diving into making my own PR / testing the package / documenting? What are julia’s standard tools for testing / documentations / etc (again, only a few days since i started learning julia).
Thanks for any remarks you might have