Documente Academic
Documente Profesional
Documente Cultură
PSO este atribuită inițial lui Kennedy, Eberhart și Shi și a fost inițial destinată simulării
comportamentului social, ca o reprezentare stilizată a mișcării organismelor într-o turmă
de păsări sau pe o școală de pești. Algoritmul a fost simplificat și sa observat o
performanță optimizată. Cartea lui Kennedy și Eberhart descrie multe aspecte filosofice
ale PSO și inteligența roiurilor. Un sondaj amplu al aplicațiilor PSO este realizat de Poli
o revizuire cuprinzătoare a lucrărilor teoretice și experimentale privind PSO a fost
publicată de Bonyadi și Michalewicz.
Taxonomie
Inspirație
Particle Swarm Optimization este inspirată de comportamentul social de hrănire a unor animale,
cum ar fi comportamentul flocking al păsărilor și comportamentul școlar al peștilor.
Metaforă
Particulele din roiuri zburau printr-un mediu urmând membrii instalatori ai roiului și, în general,
influențează mișcarea lor spre zone istorice bune din mediul lor.
Strategie
Scopul algoritmului este de a avea localizate toate particulele optime într-un hiper-volum
multidimensional. Acest lucru se realizează prin atribuirea unor poziții aleatorii inițial tuturor
particulelor din spațiu și a vitezelor inițiale mici aleatorii. Algoritmul este executat ca o simulare,
avansând poziția fiecărei particule în funcție de viteza sa, poziția globală cea mai cunoscută în
spațiul problemei și cea mai bună poziție cunoscută unei particule. Funcția obiectiv este
prelevată după fiecare actualizare a poziției. De-a lungul timpului, printr-o combinație de
explorare și exploatare a unor poziții bune cunoscute în spațiul de căutare, particulele se ciocnesc
sau converg în jurul unei optime sau mai multe optime.
Particle Swarm Optimization ar putea părea complicat, dar este într-adevăr un algoritm foarte
simplu. Pe o serie de iterații, un grup de variabile are valorile lor ajustate mai aproape de
membrul a cărui valoare este mai apropiată de țintă la un moment dat. Imaginați-vă o turmă de
păsări care circulă într-o zonă în care pot mirosi o sursă ascunsă de hrană. Cel care este cel mai
apropiat de mâncare îi șuieră pe cel mai tare și pe celelalte păsări care se plimba în direcția lui.
Dacă oricare dintre celelalte păsări înconjurătoare se apropie mai mult de țintă decât de prima, se
zgâlțâie și ceilalți se îndreaptă spre el. Acest model de strângere continuă până când una dintre
păsări se va întâmpla asupra mâncării. Este un algoritm simplu și ușor de implementat.
1.2 Pseudocod-algoritm
O variantă de bază a algoritmului PSO funcționează prin faptul că are o populație (numită
roi) de soluții candidate (numite particule). Aceste particule sunt deplasate în spațiul de
căutare conform câtorva formule simple. Mișcările particulelor sunt ghidate de poziția lor
cea mai cunoscută în spațiul de căutare, precum și de poziția cea mai cunoscută a
întregului roi. Atunci când sunt descoperite poziții îmbunătățite, acestea vor veni apoi
pentru a ghida mișcările roiului. Procesul este repetat și, în acest fel, se speră, dar nu este
garantat, că în cele din urmă va fi găsită o soluție satisfăcătoare. În mod formal, permiteți
f: ℝn → ℝ să fie funcția de cost care trebuie minimizată. Funcția ia o soluție candidată ca
argument în forma unui vector de numere reale și produce un număr real ca ieșire care
indică valoarea funcției obiective a soluției candidat date. Gradientul f nu este cunoscut.
Scopul este de a găsi o soluție a pentru care f (a) ≤ f (b) pentru toate b în spațiul de
căutare, ceea ce ar însemna a este minimul global. Maximizarea poate fi efectuată luând
în considerare funcția h = -f. Fie S numărul de particule din roi, fiecare având o poziție xi
∈ ℝn în spațiul de căutare și o viteză vi ∈ ℝn. Fie Pi cea mai cunoscuta pozitie a
particulei i si g este cea mai cunoscuta pozitie a intregului roi.
Figura 1. Câteva topologii populaționale obișnuite (cartiere). (A) Persoane cu o singură vedere,
în care persoanele se compară numai cu cele mai bune rezultate. (B) Topologia inelului, în care
fiecare persoană se compară numai cu cele din stânga și din dreapta. (C) Topologie complet
conectată, unde toată lumea este comparată. (D) Izolate, în cazul în care indivizii se compară
numai cu cei din grupurile specificate.
Definirea vecinătății și modul în care sunt utilizate au efecte diferite asupra comportamentului
algoritmului.
The Algorithm
Pseudo Code
For each particle
{
Initialize particle
}
Acesta este un exemplu simplu în care algoritmul găsește trei numere care ajung până la o valoare țintă.
Se utilizează un cartier complet conectat, astfel încât toate particulele pot fi comparate unele cu altele.
Destul de usor. Găsiți trei operanzi care adaugă până la 50. Zece particule folosite. V_MAX = 10
Exemplu rezultat 1:
47 + -3 + 8 = 52
27 + 3 + 10 = 40
41 + 6 + 31 = 78
47 + 40 + -4 = 83
41 + -3 + 30 = 68
6 + 14 + 35 = 55
3 + 11 + 36 = 50
47 + 2 + 9 = 58
40 + -3 + 29 = 66
1 + 8 + 11 = 20
epoch number: 21
Particle 6 has achieved target.
3 + 11 + 36 = 50
Zece operanzi și 20 de particule. V_MAX = 10. De obicei, algoritmul funcționează puțin mai greu pentru a găsi
soluția.
Exemplu rezultat 2:
5 + -3 + 18 + 12 + 9 + 15 + 16 + 27 + -17 + -1 = 81
11 + 29 + -5 + 15 + -11 + 15 + -9 + 12 + -1 + 6 = 62
-10 + -2 + 5 + 12 + 14 + 21 + -23 + 10 + 5 + -5 = 27
23 + -10 + -3 + 12 + -9 + 1 + 7 + 8 + -42 + -15 = -28
23 + 1 + -9 + 12 + -12 + 23 + -9 + 12 + -1 + 10 = 50
22 + 19 + 36 + 8 + -18 + 3 + 36 + -17 + -1 + 0 = 88
-10 + -3 + 7 + 12 + 15 + 11 + 24 + -7 + 15 + -18 = 46
0 + -16 + -9 + -3 + 9 + 15 + 15 + 22 + 5 + 10 = 48
-10 + 25 + 30 + 12 + -18 + -3 + -9 + -7 + -1 + 10 = 29
0 + 2 + -9 + 12 + -1 + 6 + 26 + 7 + -36 + -17 = -10
-9 + -11 + -4 + 12 + -10 + 15 + -30 + 17 + 14 + -20 = -26
18 + -5 + 21 + -22 + -1 + 5 + 26 + 17 + 23 + -21 = 61
-20 + -17 + -10 + -8 + -1 + 6 + 13 + 14 + 21 + -8 = -10
23 + 1 + -1 + -18 + 7 + 13 + 9 + 18 + 25 + -6 = 71
23 + 25 + -9 + 12 + 26 + -19 + -9 + -7 + -1 + 10 = 51
-13 + 25 + 1 + 7 + 26 + -19 + -9 + 7 + -35 + -16 = -26
-11 + -4 + 21 + 3 + 9 + 20 + 36 + 9 + -15 + -5 = 63
20 + 2 + -14 + 3 + 18 + 21 + -9 + 25 + -1 + 10 = 75
0 + -12 + -9 + 12 + -7 + 4 + 7 + 14 + -1 + 10 = 18
4 + 6 + 34 + -20 + 8 + 23 + -9 + -25 + -18 + 10 = 13
epoch number: 103
Particle 4 has achieved target.
23 + 1 + -9 + 12 + -12 + 23 + -9 + 12 + -1 + 10 = 50
Java Code:
import java.util.ArrayList;
import java.util.Random;
initialize();
while(!done)
{
// Two conditions can end this loop:
// if the maximum number of epochs allowed has been reached, or,
// if the Target value has been found.
if(epoch < MAX_EPOCHS){
System.out.print(testProblem(i)+ "\n");
if(testProblem(i) == TARGET){
done = true;
}
} // i
gBestTest = minimum();
aParticle = particles.get(gBest);
// if(any particle's pBest value is better than the gBest value, make
it the new gBest value.
if(Math.abs(TARGET - testProblem(gBestTest)) < Math.abs(TARGET -
testProblem(gBest))){
gBest = gBestTest;
}
getVelocity(gBest);
updateparticles(gBest);
epoch += 1;
}else{
done = true;
}
}
return;
}
private static void getVelocity(int gBestindex)
{
// from Kennedy & Eberhart(1995).
// vx[][] = vx[][] + 2 * rand() * (pbestx[][] - presentx[][]) +
// 2 * rand() * (pbestx[][gbest] - presentx[][])
int testResults = 0;
int bestResults = 0;
double vValue = 0.0;
Particle aParticle = null;
bestResults = testProblem(gBestindex);
} // i
return;
}
aParticle = particles.get(index);
for(int i = 0; i < MAX_INPUTS; i++)
{
total += aParticle.data(i);
}
return total;
}
while(!done)
{
foundNewWinner = false;
for(int i = 0; i < MAX_PARTICLES; i++)
{
if(i != winner){ // Avoid self-comparison.
// The minimum has to be in relation to the Target.
if(Math.abs(TARGET - testProblem(i)) < Math.abs(TARGET -
testProblem(winner))){
winner = i;
foundNewWinner = true;
}
}
}
if(foundNewWinner == false){
done = true;
}
}
return winner;
}
public Particle()
{
this.mpBest = 0;
this.mVelocity = 0.0;
}
}
Result:
Aceasta este o interpretare a problemei clasice a comis voiajorului, unde cel mai scurt tur trebuie
să fie găsit în rândul tuturor oraselor, fără să-l viziteze de două ori. Algoritmul execută distanța
minimă carteziană prin opt orașe numite 0, 1, 2, 3, 4, 5, 6 și 7. Există 88 (sau 16.777.216)
combinații posibile, dar acest algoritm le poate găsi în mai puțin de 83, și uneori mai puțin de 82!
Locațiile orașelor sunt (30, 5), (40, 10), (40, 20), (29, 25), (19, 25), (9, 19) 5). Acesta este
aproximativ un cerc; ceva ușor de văzut pe un grafic și verificați soluțiile algoritmului cu. Sunt
explorate toate modurile de combinare folosind șiruri de opt cifre de la 0 la 7 pentru a găsi cea
care reprezintă distanța cea mai scurtă (adică, 01234567). Cu mâna, am găsit soluția de
aproximativ 86.6299, care este valoarea țintă a algoritmului. Pentru a simplifica acest exemplu,
nu există nici un punct de pornire sau final, și nu contează în ce direcție merge turul (adică
înainte sau înapoi).
De exemplu, o soluție care arată ca 34567012 este validă deoarece se deplasează înainte de la 3
și în jurul valorii de 2. Soluția 76543210 este la fel de valabilă, merge doar înapoi de la 7 la 0.
M-am decis să iau cu ușurință un algoritm PSO ușor diferit. Am adăugat cel mai grav la nivel
global variabilelor globale. Scorul de viteză se calculează folosind viteza globală cea mai
defavorabilă, definind viteza ca măsură a cât de rău se face fiecare particulă (spre deosebire de
cât de bun). Modificarea datelor se face prin schimbarea cifrelor din cadrul fiecărui set de date
particulare. Valoarea schimbării depinde de cât de rău se face (adică, viteza). Particulele sunt
împinse încet către cel mai bun la nivel mondial, prin copierea unor fragmente din cele mai bune
date ale particulelor (topologie cu o singură perspectivă). Schimbarea și copierea se fac pentru
toate particulele, cu excepția celor mai bune la nivel mondial. În acest exemplu, pot fi
experimentate doar trei variabile: PARTICLE_COUNT - numărul de particule utilizate în test.
V_MAX - permisă modificarea vitezei maxime. MAX_EPOCHS - număr de iterații pentru
algoritm.
Exemplu rezultat 1
PARTICLE_COUNT = 10, V_MAX = 4, MAX_EPOCHS = 10000.
Route: 2, 3, 4, 6, 5, 7, 0, 1, Distance: 99.93584193997158
Route: 2, 7, 3, 4, 6, 5, 0, 1, Distance: 132.21887327932137
Route: 6, 4, 7, 3, 5, 0, 1, 2, Distance: 161.01823909844032
Route: 4, 7, 0, 5, 2, 6, 1, 3, Distance: 178.79093664436735
Route: 3, 6, 1, 5, 0, 4, 7, 2, Distance: 194.08096028878091
Route: 4, 6, 0, 7, 2, 1, 5, 3, Distance: 148.4061583915042
Route: 7, 0, 1, 2, 3, 4, 5, 6, Distance: 86.62998956150375
Route: 5, 2, 3, 6, 7, 0, 1, 4, Distance: 139.06558715090466
Route: 7, 2, 3, 6, 0, 4, 5, 1, Distance: 171.45598237170142
Route: 2, 3, 0, 4, 6, 1, 5, 7, Distance: 179.90206048967966
Changes for particle 1: 2
Changes for particle 2: 2
Changes for particle 3: 2
Changes for particle 4: 3
Changes for particle 5: 3
Changes for particle 6: 3
Changes for particle 7: 3
Changes for particle 8: 3
Changes for particle 9: 4
epoch number: 85
Target reached.
Shortest Route: 7, 0, 1, 2, 3, 4, 5, 6, Distance: 86.62998956150375
Exemplu rezultat 2
PARTICLE_COUNT = 4, V_MAX = 4, MAX_EPOCHS = 10000. Fewer workers usually means longer to
finish.
Route: 2, 0, 7, 6, 5, 4, 3, 1, Distance: 99.99543531546844
Route: 6, 0, 7, 1, 2, 3, 4, 5, Distance: 105.73803621780542
Route: 0, 1, 2, 3, 4, 5, 6, 7, Distance: 86.62998956150375
Route: 7, 0, 3, 4, 5, 6, 1, 2, Distance: 127.70301302273303
Changes for particle 1: 3
Changes for particle 2: 3
Changes for particle 3: 4
epoch number: 801
Target reached.
Shortest Route: 0, 1, 2, 3, 4, 5, 6, 7, Distance: 86.62998956150375
Exemplu rezultat 3
PARTICLE_COUNT = 10, V_MAX = 8, MAX_EPOCHS = 10000. Increasing the velocity using the
implementation in this code has little effect.
Route: 0, 7, 5, 6, 4, 3, 2, 1, Distance: 99.93584193997157
Route: 1, 0, 7, 6, 5, 4, 3, 2, Distance: 86.62998956150375
Route: 6, 4, 1, 5, 2, 3, 0, 7, Distance: 161.78381796573566
Route: 5, 2, 3, 0, 4, 1, 6, 7, Distance: 172.28187399281768
Route: 1, 6, 4, 0, 2, 3, 5, 7, Distance: 162.1209488352703
Route: 0, 1, 3, 2, 7, 5, 6, 4, Distance: 136.36234159873652
Route: 0, 3, 6, 5, 1, 2, 7, 4, Distance: 165.76791494289756
Route: 6, 5, 4, 7, 0, 3, 1, 2, Distance: 133.2067162232275
Route: 7, 3, 1, 2, 4, 6, 5, 0, Distance: 136.2266417744836
Route: 6, 5, 7, 3, 1, 4, 2, 0, Distance: 155.1366049017671
Changes for particle 1: 4
Changes for particle 2: 6
Changes for particle 3: 6
Changes for particle 4: 6
Changes for particle 5: 7
Changes for particle 6: 7
Changes for particle 7: 7
Changes for particle 8: 7
Changes for particle 9: 8
epoch number: 221
Target reached.
Shortest Route: 1, 0, 7, 6, 5, 4, 3, 2, Distance: 86.62998956150375
import java.util.ArrayList;
import java.util.Random;
initialize();
while(!done)
{
// Two conditions can end this loop:
// if the maximum number of epochs allowed has been reached, or,
// if the Target value has been found.
if(epoch < MAX_EPOCHS){
getTotalDistance(i);
System.out.print("Distance: " + aParticle.pBest() + "\n");
if(aParticle.pBest() <= TARGET){
done = true;
}
} // i
getVelocity();
updateparticles();
System.out.println("epoch number: " + epoch);
epoch++;
}else{
done = true;
}
}
return;
}
return;
}
return;
}
public Particle()
{
this.mpBest = 0;
this.mVelocity = 0.0;
}
Concluzii
PSO este o metaheuristică deoarece face puține presupuneri sau nu despre problema
optimizată și poate căuta spații foarte mari ale soluțiilor candidate. Cu toate acestea,
metaheuristica, cum ar fi PSO, nu garantează găsirea unei soluții optime. De asemenea,
PSO nu folosește gradientul problemei care este optimizat, ceea ce înseamnă că PSO nu
necesită ca problema optimizării să fie diferențiată așa cum este cerută de metodele
clasice de optimizare cum ar fi coborârea gradientului și metodele cvasi-newton.
De asemenea aceasta metoda poate fi folosita in domeniul energiei si a producerii de
piese de conectivitate pentru ca se folosesc semiautomate care pot fi rulate prin Java si se
poate face o optimizare mai usoara a pieselor de conectivitate produse.
Bibliografie:
http://mnemstudio.org/particle-swarm-example-1.htm
https://www.mathworks.com/help/gads/particle-swarm-optimization-
algorithm.html?requestedDomain=true
http://ieeexplore.ieee.org/document/488968/