Particle Swarm Optimization
Manopt.particle_swarm — Functionpatricle_swarm(M, F)perform the particle swarm optimization algorithm (PSO), starting with the initial particle positions $x_0$[Borckmans2010]. The aim of PSO is to find the particle position $g$ on the Manifold M that solves
\[\min_{x ∈\mathcal{M}} F(x).\]
To this end, a swarm of particles is moved around the Manifold M in the following manner. For every particle $k$ we compute the new particle velocities $v_k^{(i)}$ in every step $i$ of the algorithm by
\[v_k^{(i)} = ω \, \operatorname{T}_{x_k^{(i)}\gets x_k^{(i-1)}}v_k^{(i-1)} + c \, r_1 \operatorname{retr}_{x_k^{(i)}}^{-1}(p_k^{(i)}) + s \, r_2 \operatorname{retr}_{x_k^{(i)}}^{-1}(g),\]
where $x_k^{(i)}$ is the current particle position, $ω$ denotes the inertia, $c$ and $s$ are a cognitive and a social weight, respectively, $r_j$, $j=1,2$ are random factors which are computed new for each particle and step, $\operatorname{retr}^{-1}$ denotes an inverse retraction on the Manifold M, and $\operatorname{T}$ is a vector transport.
Then the position of the particle is updated as
\[x_k^{(i+1)} = \operatorname{retr}_{x_k^{(i)}}(v_k^{(i)}),\]
where $\operatorname{retr}$ denotes a retraction on the Manifold M. At the end of each step for every particle, we set
\[p_k^{(i+1)} = \begin{cases} x_k^{(i+1)}, & \text{if } F(x_k^{(i+1)})<F(p_{k}^{(i)}),\\ p_{k}^{(i)}, & \text{else,} \end{cases} \]
and
\[g_k^{(i+1)} =\begin{cases} p_k^{(i+1)}, & \text{if } F(p_k^{(i+1)})<F(g_{k}^{(i)}),\\ g_{k}^{(i)}, & \text{else,} \end{cases}\]
i.e. $p_k^{(i)}$ is the best known position for the particle $k$ and $g^{(i)}$ is the global best known position ever visited up to step $i$.
Input
M– a manifold $\mathcal M$F– a cost function $F:\mathcal M→ℝ$ to minimize
Optional
n- (100) number of random initial positions of x0x0– the initial positions of each particle in the swarm $x_k^{(0)} ∈ \mathcal M$ for $k = 1, \dots, n$, per default these are nrandom_pointsvelocity– a set of tangent vectors (of typeAbstractVector{T}) representing the velocities of the particles, per default arandom_tangentper inital positioninertia– (0.65) the inertia of the patriclessocial_weight– (1.4) a social weight factorcognitive_weight– (1.4) a cognitive weight factorretraction_method– (default_retraction_method(M)) aretraction(M,x,ξ)to use.inverse_retraction_method- (default_inverse_retraction_method(M)) aninverse_retraction(M,x,y)to use.vector_transport_mthod- (default_vector_transport_method(M)) a vector transport method to use.stopping_criterion– (StopWhenAny(StopAfterIteration(500),StopWhenChangeLess(10^{-4})))a functor inheriting fromStoppingCriterionindicating when to stop.
... and the ones that are passed to decorate_options for decorators.
Output
the obtained (approximate) minimizer $g$, see get_solver_return for details
Manopt.particle_swarm! — Functionpatricle_swarm!(M, F; n=100, x0::AbstractVector=[random_point(M) for i in 1:n], kwargs...)perform the particle swarm optimization algorithm (PSO), starting with the initial particle positions $x_0$[Borckmans2010] in place of x0.
Input
M– a manifold $\mathcal M$F– a cost function $F:\mathcal M→ℝ$ to minimize
Optional
n- (100) number of random initial positions of x0x0– the initial positions of each particle in the swarm $x_k^{(0)} ∈ \mathcal M$ for $k = 1, \dots, n$, per default these are nrandom_points
for more optional arguments, see particle_swarm.
Options
Manopt.ParticleSwarmOptions — TypeParticleSwarmOptions{P,T} <: OptionsDescribes a particle swarm optimizing algorithm, with
Fields
x– a set of points (of typeAbstractVector{P}) on a manifold as initial particle positionsvelocity– a set of tangent vectors (of typeAbstractVector{T}) representing the velocities of the particlesinertia– (0.65) the inertia of the patriclessocial_weight– (1.4) a social weight factorcognitive_weight– (1.4) a cognitive weight factorstopping_criterion– ([StopAfterIteration](@ref)(500) |[StopWhenChangeLess](@ref)(1e-4)) a functor inheriting from [StoppingCriterion`](@ref) indicating when to stop.retraction_method– (default_retraction_method(M)) the rectraction to useinverse_retraction_method- (default_inverse_retraction_method(M)) an inverse retraction to use.vector_transport_method- (default_vector_transport_method(M)) a vector transport to use
Constructor
ParticleSwarmOptions(M, x0, velocity; kawrgs...)construct a particle swarm Option for the manifold M starting at initial population x0 with velocities x0, where the manifold is used within the defaults of the other fields mentioned above, which are keyword arguments here.
See also
Literature
- Borckmans2010
P. B. Borckmans, M. Ishteva, P.-A. Absil, A Modified Particle Swarm Optimization Algorithm for the Best Low Multilinear Rank Approximation of Higher-Order Tensors, In: Dorigo M. et al. (eds) Swarm Intelligence. ANTS 2010. Lecture Notes in Computer Science, vol 6234. Springer, Berlin, Heidelberg, doi 10.1007/978-3-642-15461-4_2