Jedinka u računalu može biti predstavljena na više načine : kao niz bitova
(eoBit)
, niz cijelih brojeva (eoInt)
ili niz realnih brojeva (eoReal).
EO framework pruža podršku za sve tri vrste jedinki .
Prilikom definiranja jedinke potrebno je definirati i tip podatka koji predstavlja
njezinu dobrotu.
primjeri:
eoBit< double > jedinka ; // definiramo jedinku koja
se sastoji od niza bitova i ima vrijednost dobrote tipa double
eoInt< int > jedinka; // jedinka tipa int i dobrote
tipa int
eoReal< double > jedinka; // jedinka tipa real (float) i dobrote double
typedef eoBit< double > tip_jedinke;
eoPop< tip_jedinke > ime_populacije;
ime_populacije.push_back(jedinka); // dodajemo jedinku u populaciju
ime_populacije.sort( ); // sortiramo populaciju
cout<<ime_populacije; // ispišemo cijelu populaciju
double dobrota( const jedinka & x) {
. . .
// ovdje je nešto radimo
. . .
return varijabla;
}
eoEvalFuncPtr< tip_jedinke > ime_funkcijskog_objekta ( pokazivač_na_funkciju);
eoBit< double > jedinka ; // definiramo dobrotu kao double tip , iako ju ovdje nećemo koristiti
rng.reseed( time (NULL) ) // definiramo seed za generator , koristeći time( ) funkciju dobivamo da prilikom svakog pokretanja dobijemo
// durgačji niz brojeva
for (int i=0; i<VELICINA_JEDINKE; i++) {
jedinka.push_back( rng.flip ( ) ) // napuni jedinku s 1 i 0
}
bool eoRng::flip ( double vjerojatnost=0.5 )
double eoRng::uniform (double m = 1.0)
typedef eoReal < double > jedinka; //definiramo tip podataka
//...
rng.reseed(time(NULL));
eoEvalFuncPtr< jedinka > eval( funkcija_dobrote );
eoUniformGenerator< double > generator(-10.0,10.0); //definiramo generator koji će generirati uniformno brojeve između -10 i 10
eoInitFixedLength< jedinka > random (5, generator); // određujemo veličinu jedinki u našem slučaju 5
eoPop< jedinka > pop(10,random); // stvaramo populaciju veličine 10
apply < jedinka >(eval,pop); // računamo dobrote pojedinih jedinki
eoBitMutation< tip_jedinke > mutacija( vjerojatnost ) // definiramo mutaciju s parametrom vjerojatnost
template < class Chrom >
eoBitMutation < Chrom >::eoBitMutation(const double & _rate=0.01, bool _normalize = false )
typedef eoBit< double > jedinka ; // definiramo tip podatka jedinka
//.....
jedinka v; // definiramo novu jedinku v
//.....
eoBitMutation< jedinka > mutacija(0.1) // definiramo mutaciju
mutacija(v); // primjenimo mutaciju vraća vrijednost true ako se je nešto promijenilo inače false
template < class EOT >
eoUniformMutation< EOT >::eoUniformMutation(const double &_epsilon, const double &_p_change=1.0)
template < class EOT >
eoNormalMutation< EOT >::eoNormalMutation(const double &_sigma, const double &_p_change=1.0)
eo1PtBitXover< tip_jedinke > krizanje;
eoNPtsBitXover< tip_jedinke > krizanje(4); // definiramo križanje koje će križati dvije jedinke na 4 mjesta
eoUBitXover< tip_jedinke > krizanje
eoSegmentCrossover< tip_jedinke > krizanje;
template < class EOT >
eoSegmentCrossover < EOT >::eoSegmentCrossOver (const double & _aplha =0.0)
eoProportionalSelect< tip_jedinke > selekcija;
eoDetTournamentSelect< tip_jedinke > selekcija(velicina);
eoStochTournamentSelect< tip_jedinke > selekcija(postotak) // postotak=[0.5,1]
eoRandomSelect < tip_jedinke > selekcija;
eoGenContinue < tip_jedinke > trajanje ( MAX_BROJ_GENERACIJA)
eoSGA< tip_jedinke > algoritam (selekcija, krizanje, CROSS_RATE, mutacija, MUT_RATE, ime_funkcijskog_objekta,trajanje) ;
algoritam (populacija); // izvršavanje algoritma nad populacijom