Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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 }
Generated on Wed Sep 7 2022 15:19:03 by
1.7.2