prisma megan / Mbed 2 deprecated ga-mppt_sim_1gen

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include <math.h>
00003 
00004 AnalogIn analog_value(A1);
00005 
00006 DigitalOut led(LED1);
00007 
00008 const int nGen = 10;
00009 const double nGen1 = nGen;
00010 const int nIndividu = 8;
00011 const int nGenerasi = 10;
00012 const float kSil = 0.75;
00013 const float kMut = 0.5;
00014 
00015 int kromInduk[nIndividu][nGen];
00016 int kromKode[nIndividu][nGen];
00017 float indeksGen[nIndividu][1];
00018 float kromEval[nIndividu][nGen+2];
00019 float kromUrut[nIndividu][nGen+2];
00020 int r[nIndividu/2];
00021 bool kromSel[nIndividu/2][nGen];
00022 bool kromSilInduk[nIndividu/2][nGen];
00023 bool kromSilAnak[nIndividu/2][nGen];
00024 bool kromMut[nIndividu][nGen];
00025 int arrayku[nGen];
00026 const int nMut = kMut *nGen;
00027 int chGen[nMut];
00028 float kromUngGen[nGenerasi][nGen+1];
00029 
00030 int h,i,k,a,j,l,m,n,b,c,x;
00031 float d,e;
00032 const int bawah = pow(2,nGen1)- 1;
00033 
00034 int xmin = 0;
00035 float xmax = 22.1;
00036 
00037 void bangkitGen(){
00038     
00039     printf("\n1. Pembangkitan Kromosom Induk\n\r");
00040 
00041     for(m=0;m<nIndividu;m++){
00042         //Here I'd like to print each address field of each structure to the screen
00043         printf("Kromosom ke-%d : ", m);
00044         for (n=0;n<nGen;n++){
00045             bool s = rand() % 2;
00046             kromInduk[m][n] = s;
00047             printf("%i",kromInduk[m][n]);
00048         }
00049         printf(" \n\r");
00050     }
00051     printf(" \n\r");
00052 }
00053 
00054 void koding(){
00055   printf("\n2. Pengkodean kromosom\n\r");
00056   
00057   for (m=0; m<nIndividu; m++){
00058     printf("%d : ", m);
00059     float binerTotal = 0.00;
00060     for (n=0; n<nGen; n++){
00061       kromKode[m][n] = kromInduk[m][n];
00062       x = kromKode[m][n];
00063       binerTotal += x * pow(2,nGen1 - (n + 1));
00064       
00065       printf("%i",kromInduk[m][n]);
00066     }
00067     float c = binerTotal /bawah;
00068     indeksGen[m][1] = (xmin + (xmax - xmin)) * c;
00069     d = indeksGen[m][1];
00070     printf(", %.0f, %.2f", binerTotal, d);
00071     printf(" \n\r");
00072   }
00073   printf(" \n\r");
00074 }
00075 
00076 void evaluasi(){
00077   printf("\n3. Evaluasi\n\r");
00078   bool f;
00079   float h;
00080   for (m=0; m<nIndividu; m++){
00081     printf("%d : ", m);
00082     for (n=0; n<nGen; n++){
00083       kromEval[m][n] = kromKode[m][n];
00084       f = kromEval[m][n];
00085       printf("%i",f);
00086     }
00087     kromEval[m][nGen] = indeksGen[m][1];
00088     kromEval[m][nGen+1] = indeksGen[m][1] * 4.0;
00089     h = kromEval[m][nGen+1];
00090     printf(",%.2f", h);
00091     printf(" \n\r");
00092   }
00093   printf(" \n\r");
00094 }
00095 
00096 void maks(){
00097   int i;
00098   float maks = 0.00;
00099   int imaks = 0;
00100   float val;
00101   for (i=0; i<nIndividu; i++){
00102     val = kromUrut[i][nGen+1];
00103     if (val > maks){
00104       maks = val;
00105       imaks = i;
00106     }
00107     else{
00108       maks = maks;
00109       imaks = imaks;
00110     }
00111   }
00112   r[l] = imaks;
00113   printf("%i, %.2f: ", imaks, maks);
00114   for (n=0; n<nGen; n++){
00115     int ag = kromUrut[imaks][n];
00116     kromSel[l][n] = ag;
00117     kromUrut[imaks][nGen+1] = 0;
00118     printf("%i",ag);
00119   }
00120   printf(" \n\r");
00121 }
00122 
00123 void urut(){
00124   printf("\n4. Seleksi\n\r");
00125   for (m=0; m<nIndividu; m++){
00126     for (n=0; n<=(nGen+1); n++){
00127       kromUrut[m][n] = kromEval[m][n];
00128     }
00129   }
00130 
00131   for (l=0; l<(nIndividu/2); l++){
00132     maks();
00133   }
00134   printf(" \n\r");
00135 }
00136 
00137 void silang(){
00138   printf("\n5. Penyilangan\n\r");
00139   printf("\nInduk\n\r");
00140 
00141   for (m=0; m<nIndividu/2; m++){
00142     for (n=0; n<nGen; n++){
00143       int sx = kromSel[m][n];
00144       printf("%i",sx);
00145       kromSilInduk[m][n] = sx;
00146     }
00147     printf(" \n\r");
00148   }
00149   printf(" \n\r");
00150   printf("\nAnak\n\r");
00151   int pSil = kSil *nGen;
00152   for (m=0; m<nIndividu/4; m++){
00153     for (int ma=0; ma<pSil; ma++){
00154       int ms1 = kromSilInduk[m*2][ma];
00155       kromSilAnak[m*2][ma] = ms1;
00156       int ms2 = kromSilInduk[(m*2)+1][ma];
00157       kromSilAnak[(m*2)+1][ma] = ms2;
00158     }
00159     for (int mb=pSil; mb<=nGen; mb++){
00160       int mb1 = kromSilInduk[(m*2)+1][mb];
00161       kromSilAnak[m*2][mb] = mb1;
00162       int mb2 = kromSilInduk[m*2][mb];
00163       kromSilAnak[(m*2)+1][mb] = mb2;
00164     }
00165   }
00166   for (int ma=0; ma<pSil; ma++){
00167     int ms1 = kromSilInduk[0][ma];
00168     kromSilAnak[0][ma] = ms1;
00169     int ms2 = kromSilInduk[1][ma];
00170     kromSilAnak[1][ma] = ms2;
00171   }
00172   for (int mb=pSil; mb<=nGen; mb++){
00173     int mb1 = kromSilInduk[1][mb];
00174     kromSilAnak[0][mb] = mb1;
00175     int mb2 = kromSilInduk[0][mb];
00176     kromSilAnak[1][mb] = mb2;
00177   }
00178 
00179   for (m=0; m<nIndividu/2; m++){
00180     for (n=0; n<nGen; n++){
00181       int cb1 = kromSilAnak[m][n];
00182       printf("%i",cb1);
00183     }
00184     printf(" \n\r");
00185   }
00186   printf(" \n\r");
00187 }
00188 
00189 void genArray(){
00190   for (int r=0; r<nGen; r++){
00191     arrayku[r] = r;
00192   }
00193 }
00194 
00195 void pickRandom(){
00196   genArray();
00197   for (int i=0; i<(nGen-nMut); i++){
00198     int ame = (nGen-1)-i;
00199     int choosen = rand() % ame;
00200     arrayku[choosen] = 0;
00201 
00202     for (int l=choosen; l<nGen; l++){
00203       int m = arrayku[l+1];
00204       arrayku[l] = m;
00205     }
00206     
00207   }
00208   
00209   printf("Nomor gen termutasi: ");
00210   for (int q=0; q<nMut; q++){
00211     chGen[q] = arrayku[q];
00212     int p = chGen[q];
00213     printf("%i,",p);
00214   }
00215   printf(" \n\r");
00216 }
00217 
00218 void mutasi(){
00219   printf("\n6. Mutasi\n\r");
00220   pickRandom();
00221   
00222   for (m=0; m<nIndividu/2; m++){
00223     for (n=0; n<nGen; n++){
00224       int sy = kromSilInduk[m][n];
00225       kromMut[m][n] = sy;
00226     }
00227   }
00228   for (m=nIndividu/2; m<=nIndividu; m++){
00229     for (n=0; n<nGen; n++){
00230       int sh = kromSilAnak[m - (nIndividu/2)][n];
00231       kromMut[m][n] = sh;
00232     }
00233   }
00234   
00235   for (m=0; m<nIndividu; m++){
00236     for (n=0; n<nGen; n++){
00237     }
00238   }
00239 
00240   for (int s=0; s<nIndividu; s++){
00241     for (int t=0; t<nMut; t++){
00242       int u = chGen[t];
00243       if (kromMut[s][u]==1){
00244         kromMut[s][u] = 0;
00245       }
00246       else{
00247         kromMut[s][u] = 1;
00248       }
00249     }
00250   }
00251 
00252   printf(" \n\r");
00253 
00254   for (int v=0; v<nIndividu; v++){
00255     for (int x=0; x<nGen; x++){
00256       int wa = kromMut[v][x];
00257       printf("%i",wa);
00258     }
00259     printf(" \n\r");
00260   }
00261 }
00262 
00263 int main()
00264 {
00265   bangkitGen();
00266   printf("\nKromosom unggul setiap generasi :\n\r");
00267   for (i=0; i<1; i++){
00268     koding();
00269     evaluasi();
00270     urut();
00271     silang();
00272     mutasi();
00273   
00274     for (m=0; m<nIndividu; m++){
00275       for (n=0; n<nGen; n++){
00276         kromInduk[m][n] = kromMut[m][n];
00277       }
00278     }
00279     koding();
00280     evaluasi();
00281     urut();
00282     
00283     printf("Generasi ke-%d : ", i);
00284     for (m=0; m<nGen; m++){
00285       kromUngGen[i][m] = kromSel[0][m];
00286       printf("%.0f",kromUngGen[i][m]);
00287     }
00288     kromUngGen[i][nGen+1] = kromEval[r[0]][nGen+1];
00289     float kromUngVal = kromUngGen[i][nGen+1];
00290     printf(" : %.2f", kromUngVal);
00291     printf(" \n\r");
00292   }
00293 }