Discrete Particle Swarm optimization

8 visualizaciones (últimos 30 días)
hackel16
hackel16 el 18 de Nov. de 2016
Respondida: Shishir Reddy el 30 de Mayo de 2025
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)

Respuestas (1)

Shishir Reddy
Shishir Reddy el 30 de Mayo de 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.

Categorías

Más información sobre Particle Swarm en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by