Discrete Particle Swarm optimization

2 vues (au cours des 30 derniers jours)
hackel16
hackel16 le 18 Nov 2016
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)

Réponses (1)

Shishir Reddy
Shishir Reddy le 30 Mai 2025
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.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by