The Particle Swarm Optimization (PSO) algorithm is an optimization method that was based on the idea that we perform better by communicating with each other. The algorithm has particles searching for an optimal value of a function, and communicating their results to aid each other. This allows PSO to perform better than other algorithms for optimization of multimodal functions. The downside is that PSO requires a large number of function calls which makes it slower than algorithms designed for better behaved functions. This means that for many real time applications, the data on which the objective function is based can change before the algorithm has converged. This could happen in echo cancellation, where movement affects the echo path that needs to be estimated, wireless networks, where the individual nodes may be on the move, antenna arrays, where the desired signal moves, and other areas.
To deal with the possibility of changing data, an adaptive variation of the algorithm, known as Adaptive Particle Swarm Optimization (APSO), has been introduced. The innovation is the introduction of sentries that evaluate the objective function at the same location at different times. Thus, changes in the data can be detected. When a change is detected, all of the personal best values of the particles are reconsidered. The original methodology was to simply replace the best value by the current value, which is equivalent to restarting the PSO algorithm without reseeding the swarm. Alternatively, the function can be reevaluated at the location of the personal best value and compared to the current location. This can improve accuracy by not discarding useful information, but requires extra function evaluations. The mechanism of the sentry can vary. Originally, there was a fixed location that was reevaluated every iteration, but this did not take into consideration that there may be local changes. This can be overcome by using previous best locations as sentries. Thus, we can evaluate for changes in multiple locations. Additionally, there is no reason for only a single sentry. If the function suggests many local changes, we can use multiple sentries to increase the likelihood of detecting changes at the expense of more function calls.