Editura Sfântul Ierarh Nicolae ISBN 978-606-577-027-0
Editura Sfântul Ierarh Nicolae ISBN 978-606-577-027-0
Editura Sfântul Ierarh Nicolae ISBN 978-606-577-027-0
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
*afiseaza cea mai buna solutie gasita*/<br />
}<br />
Algoritmii genetici au o structura foarte generala, care permite folosirea lor pentru<br />
majoritatea problemelor. Ceea ce se schimba sunt urmatoarele:<br />
- codificarea cromozomilor;<br />
- initializarea populatiei;<br />
- incrucisarea;<br />
- mutatia.<br />
Vom da in continuare sursa completa ce implementeaza forma generala a<br />
programului. Pentru o mai buna lizibilitate a codului, toate functiile care se folosesc in<br />
acest program au fost mai intai declarate prin antetul lor inaintea programului principal, si<br />
dezvoltate apoi dupa acesta. Inca o data, comentariile la nivelul codului sursa sunt<br />
suficiente pentru a intelege ce se intampla.<br />
#include<br />
#include<br />
#include<br />
/*aici isi au prototipul functiile randomize() si random(int)*/<br />
const MaxPopulatie=100,<br />
/*numarul de cromozomi in populatie*/<br />
MaxIteratii=100,<br />
/*numarul de iteratii ale algoritmului*/<br />
MaxElitism=2,<br />
/*cati cromozomi sunt copiati prin elitism*/<br />
MaxCrossover=37,<br />
/*de cate ori apare incrucisarea intr-o populatie*/<br />
MaxMutatie=1;<br />
/*de cate ori apare mutatia intr-o populatie*/<br />
typedef struct{<br />
int gena[22];<br />
/*depinde de la problema la problema*/<br />
float fitness;<br />
}TCromozom;<br />
/*tipul care codifica un cromozom*/<br />
typedef TCromozom TPopulatie[MaxPopulatie+1];<br />
/*tipul care codifica o populatie*/<br />
TCromozom CelMaiBunCromozom;<br />
/*cea mai buna solutie in orice moment*/<br />
TPopulatie PopulatieVeche, PopulatieNoua;<br />
/*se lucreaza cu doua populatii*/<br />
int i,j,k,contor,co,r1,r2;<br />
int NrPop;<br />
void citire();<br />
void CalculFitness();<br />
void InitializeazaPopulatie();<br />
void Elitism(int NrMutati);<br />
void Crossover(TCromozom g1, TCromozom g2, TCromozom &rez1, TCromozom<br />
&rez2);<br />
void Mutatie(TCromozom &mutant);<br />
void MutaRestul(int NrMutati);<br />
void OrdoneazaDupaFitness();<br />
void SelectieParinti(int &r1, int &r2);<br />
11