• Main Page
  • Modules
  • Namespaces
  • Classes
  • Files
  • File List

D:/Projekt/ECF_trunk/examples/GPCache/GPcacheEvalOp.cpp

00001 #include <ecf/ECF.h>
00002 #include "GPcacheEvalOp.h"
00003 #include <math.h>
00004 #include <time.h>
00005 
00006 //definicije klasa i njihive funkcije
00007 //hrpa varijabli
00008 
00009 class Chrpa_varijabli {
00010 
00011     int memorija[VEL_CASHA] ;
00012     int prije_koraka_koristen[VEL_CASHA];
00013     int puta_koristen[VEL_CASHA] ;
00014     int zadnji_izbaceni ;
00015     int prvi_prazni ;
00016     int br_promasaja ;
00017     unsigned int brojac ;
00018     bool prazno ;
00019 
00020 public :
00021 
00022     bool kajImaPraznog();
00023     bool kajVecImaOvaj(int);
00024     int najmanji();
00025     int najveci();
00026     int kolkoSamPromasil();
00027     int vratiBrojac();
00028     int najkasniji();
00029     int najnoviji();
00030     int najrijedi();
00031     int najcesci();
00032     void ubaciNa(int,int) ;
00033     void dodajUPrazno(int);
00034     void promasaj();
00035     void povecaj_brojac();
00036     void set_zadnji(int);
00037     void inicializiraj();
00038     void azurirajVremana(int);
00039 
00040 };
00041 
00042 
00043 
00044 /*sada idu funkcije */
00045 
00046 
00047 int Chrpa_varijabli::najmanji(){
00048 
00049     int i , min=memorija[0] , index=0 ;
00050 
00051     for(i=1;i<VEL_CASHA;i++){
00052         if(memorija[i]<min){
00053             min=memorija[i];
00054             index=i;
00055         }
00056     }
00057     return index ;
00058 }
00059 
00060 int Chrpa_varijabli::najveci(){
00061 
00062     int i , max=memorija[0] , index=0 ;
00063 
00064     for(i=1;i<VEL_CASHA;i++){
00065         if(memorija[i]>max){
00066             max=memorija[i];
00067             index=i;
00068         }
00069     }
00070     return index ;
00071 }
00072 
00073 
00074 void Chrpa_varijabli::povecaj_brojac(){
00075 
00076     brojac++ ;
00077 }
00078 
00079 void Chrpa_varijabli::set_zadnji(int a){
00080 
00081     zadnji_izbaceni=a;
00082 }
00083 
00084 
00085 void Chrpa_varijabli::inicializiraj(){
00086 
00087     int i;
00088 
00089     for(i=0;i<VEL_CASHA;i++){
00090         memorija[i]=0;
00091         prije_koraka_koristen[i]=999;
00092         puta_koristen[i]=0 ;
00093     }
00094     brojac=0;
00095     zadnji_izbaceni=0;
00096     prazno=true;
00097     prvi_prazni=0;
00098     br_promasaja=0;
00099 
00100 }
00101 
00102 bool Chrpa_varijabli::kajImaPraznog(){
00103 
00104     if(prazno) return true;
00105     else return false;
00106 }
00107 
00108 bool Chrpa_varijabli::kajVecImaOvaj(int ulaz){
00109 
00110     int i ;
00111 
00112     for(i=0;i<VEL_CASHA;i++){
00113         if(ulaz==memorija[i]) {
00114             this->azurirajVremana(i);       
00115             return true;
00116         }
00117     }
00118     return false;
00119 }
00120 
00121 void Chrpa_varijabli::dodajUPrazno(int iznos){
00122     
00123     memorija[prvi_prazni]=iznos;
00124     this->azurirajVremana(prvi_prazni);
00125 
00126     prvi_prazni++;
00127     if (prvi_prazni>=VEL_CASHA) {
00128         prazno = false ;
00129     }
00130 }
00131 
00132 void Chrpa_varijabli::promasaj(){
00133 
00134     br_promasaja++;
00135 }
00136 
00137 
00138 int Chrpa_varijabli::kolkoSamPromasil(){
00139 
00140     return br_promasaja ;
00141 }
00142 
00143 void Chrpa_varijabli::ubaciNa(int na_mjesto , int iznos){
00144 
00145     int i ;
00146 
00147     memorija[na_mjesto]=iznos;
00148     this->azurirajVremana(na_mjesto);
00149 }
00150 
00151 int Chrpa_varijabli::vratiBrojac(){
00152 
00153     return brojac ;
00154 }
00155 
00156 
00157 int Chrpa_varijabli::najnoviji(){
00158 
00159     int i , min=prije_koraka_koristen[0] , index=0 ;
00160 
00161     for(i=1;i<VEL_CASHA;i++){
00162         if(prije_koraka_koristen[i]<=min){
00163             min=prije_koraka_koristen[i] ;
00164             index=i ;
00165         }
00166     }
00167     return index ;
00168 }
00169 
00170 int Chrpa_varijabli::najkasniji(){
00171 
00172     int i , max=prije_koraka_koristen[0], index=0 ;
00173 
00174     for(i=1;i<VEL_CASHA;i++){
00175         if(prije_koraka_koristen[i]>=max){
00176             max=prije_koraka_koristen[i] ;
00177             index=i;
00178         }
00179     }
00180     return index ;
00181 }
00182 
00183 
00184 int Chrpa_varijabli::najcesci(){
00185 
00186     int i , max=puta_koristen[0] , index=0;
00187 
00188     for (i=1;i<VEL_CASHA;i++){
00189         
00190         if(puta_koristen[i]>=max){
00191             max=puta_koristen[i];
00192             index = i ;
00193         }
00194     }
00195     return index ;
00196 }
00197 
00198 int Chrpa_varijabli::najrijedi(){
00199 
00200     int i , min=puta_koristen[0], index=0 ;
00201 
00202     for (i=1;i<VEL_CASHA;i++){
00203         
00204         if(puta_koristen[i]<=min){
00205             min=puta_koristen[i];
00206             index=i ;
00207         }
00208     }
00209     return index ;
00210 }
00211 void Chrpa_varijabli::azurirajVremana(int index){
00212 
00213     int i ;
00214     prije_koraka_koristen[index]=0;
00215     puta_koristen[index]++;
00216     for(i=0;i<VEL_CASHA;i++){
00217         prije_koraka_koristen[i]++;
00218     }
00219 }
00220 
00222 
00223 
00224 
00225 FitnessP GPcacheEvalOp :: evaluate(IndividualP individual){
00226 
00227   FitnessP fitness = static_cast<FitnessP> (new FitnessMin);
00228  
00229   TreeP tree = boost::dynamic_pointer_cast<Tree::Tree> 
00230       (individual->getGenotype());
00231 
00232   int polje[MAXPOLJE], i, j, k ;
00233   double temp[9];
00234   Chrpa_varijabli ime_hrpe_varijabli ;
00235 
00236   ime_hrpe_varijabli.inicializiraj() ;
00238 //pocetak inicijalizacije slucajnog polja
00239 
00240   if(VRSTA_POLJA==1){                       
00241       for (i=0; i<MAXPOLJE ; i++){
00242         polje[i]=((rand())%BR_STR)+1;
00243       }
00244   }
00246   else if(VRSTA_POLJA==2){
00247     for (i=0 ; i<MAXPOLJE ; i++){      
00248 
00249         polje[i]= ((rand())%BR_STR)+1 ;
00250         j=((rand())%KOEF_JEDNOG);
00251 
00252         if (i+j<MAXPOLJE) {
00253             for (k=1; k<=j; k++){
00254                 polje[i+k]=((polje[i+k-1])%BR_STR)+1;
00255             }
00256             i+=j ;
00257         }else{
00258             polje[i]= ((rand())%BR_STR)+1 ;
00259         }
00260     } 
00261   }
00263   else if (VRSTA_POLJA==3){
00264       for(i=0;i<MAXPOLJE;i++){
00265         polje[i]=i%BR_STR+1;
00266       }  
00267   }
00268         //kraj inicijalizacije slucajnog polja
00270       double zamjena=0  ;
00271       int pom ;
00272       
00273       bool flag ;
00274 
00275       for ( i=0 ; i<MAXPOLJE ; i++ ){
00276       
00277          ime_hrpe_varijabli.povecaj_brojac() ;
00278 
00279          if(ime_hrpe_varijabli.kajVecImaOvaj(polje[i])){
00280              continue ;
00281           }
00282          ime_hrpe_varijabli.promasaj() ;
00283 
00284          if (ime_hrpe_varijabli.kajImaPraznog()) {
00285              ime_hrpe_varijabli.dodajUPrazno(polje[i]);
00286              continue ;
00287          }
00288 
00289          
00290 
00291          // ubaci sve parametre u privremeno polje da lakse ubacivam parameter u stablo
00292 
00293          temp[0]=(double)ime_hrpe_varijabli.najmanji();
00294          temp[1]=(double)ime_hrpe_varijabli.najveci();
00295          temp[2]=(double)(rand()%VEL_CASHA);
00296          temp[3]=(double)VEL_CASHA;
00297          temp[4]=(double)((ime_hrpe_varijabli.vratiBrojac())%VEL_CASHA);
00298          temp[5]=(double)ime_hrpe_varijabli.najnoviji();
00299          temp[6]=(double)ime_hrpe_varijabli.najkasniji();
00300          temp[7]=(double)ime_hrpe_varijabli.najcesci();
00301          temp[8]=(double)ime_hrpe_varijabli.najrijedi();
00302 
00303 
00304          // pocabaj to u stabla
00305 
00306 
00307          tree->setTerminalValue("MIN", &temp[0]);
00308          tree->setTerminalValue("MAX", &temp[1]);
00309          tree->setTerminalValue("RANDOM", &temp[2]);
00310          tree->setTerminalValue("CASHSIZE", &temp[3]);
00311          tree->setTerminalValue("COUNTER", &temp[4]);
00312          tree->setTerminalValue("UPRAVO_IZBACEN", &temp[5]);
00313          tree->setTerminalValue("NAJDUZE_U_MEMORIJI", &temp[6]);
00314          tree->setTerminalValue("NAJCESCE", &temp[7]);
00315          tree->setTerminalValue("NAJRIJEDE", &temp[8]);
00316 
00317          tree->execute(&zamjena);
00318          zamjena=(fabs(zamjena)) ;
00319          pom= ((int)zamjena)%VEL_CASHA ;
00320 
00321          ime_hrpe_varijabli.ubaciNa(pom,polje[i]);
00322 
00323           
00324 
00325       }
00326 
00327 
00328       fitness->setValue(ime_hrpe_varijabli.kolkoSamPromasil());
00329 
00330       return fitness ;
00331 
00332 }

Generated on Fri Jul 13 2012 10:53:29 for ECF by  doxygen 1.7.1