Discrete Particle Swarm optimization
8 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
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 Commenti
Risposte (1)
Shishir Reddy
il 30 Mag 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 Commenti
Vedere anche
Categorie
Scopri di più su Particle Swarm in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!