Discrete Particle Swarm optimization
8 views (last 30 days)
Show older comments
Hello,
i am looking for a diskrete PSO, so that the function particleswarm is just inserting positive integer numbers.
Edit: nobody there to answer my question?
lb=[ 0 0 0 0 , 0 0 0 0 ];
ub=[inf 1000 inf 1000 , inf 1000 inf 1000 ];
fun = @(JPL) optimization1(JPL)
nvars=size(lb,2)
[x,fval,exitflag,output] = particleswarm(fun,nvars,lb,ub)
0 Comments
Answers (1)
Shishir Reddy
on 30 May 2025
Hi @hackel16
The built-in 'particleswarm' function in MATLAB is designed for continuous optimization, meaning it doesn't inherently support discrete or integer-only variables. However, the integer behaviour can be enforced within the objective function by rounding the input variables.
Here’s how you can modify your anonymous function to work with discrete (integer) values:
lb = [0 0 0 0, 0 0 0 0];
ub = [inf 1000 inf 1000, inf 1000 inf 1000];
nvars = numel(lb);
% Wrap the objective function to round inputs to nearest integers
fun = @(JPL) optimization1(round(abs(JPL)));
[x, fval, exitflag, output] = particleswarm(fun, nvars, lb, ub);
This workaround effectively treats the problem as a discrete one, though 'particleswarm' itself still works in continuous space as the actual particle positions are continuous, but the evaluation of the objective function uses the rounded values.
For more information regarding 'particleswarm' function, kindly refer the following documentation - https://www.mathworks.com/help/gads/particleswarm.html
I hope this workaround helps.
0 Comments
See Also
Categories
Find more on Particle Swarm in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!