I am wondering how to interpret the velocity update in a Binary Particle Swarm Optimization (PSO). To recap the velocity update :
V(t+1) = V(t) + c1 * r1 * (XlocalBest - X(t))
+ c2 * r2 * (XglobalBest - X(t))
I understand that the binary position vector maps to values in the discrete domain. However, the binary vector contains only 0
and 1
s, where the length of this vector is n
-dimensional. What I don’t get is that the n
real valued velocity vector takes the n
binary vector (position), and takes e.g the difference between the local best position at a given index and the current position.
Is it correct that there’s only 0
,1
values that are subtracted for each X
value in the update ? (So that e.g c1 * r1
is only multiplied either with 0
, 1
or -1
)?
How can I use this information in relation to the sigmoid function that is often used in these PSOs? Should I update the velocities, and for example take a particles velocity vector where each element is in the domain [0,1)
, and put this into the sigmoid function, and turn the corresponding bit positions on or off in the particle’s binary vector such as r < sigmoid(velocity value)
, where r
is random in [0,1)
? Does this sound about right, or did I get it wrong?