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@0:862d3839389c, 2021-08-02 (annotated)
- Committer:
- PrismaMegan
- Date:
- Mon Aug 02 04:53:52 2021 +0000
- Revision:
- 0:862d3839389c
MPPT with GA, simulation full gen
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
PrismaMegan | 0:862d3839389c | 1 | #include "mbed.h" |
PrismaMegan | 0:862d3839389c | 2 | #include <math.h> |
PrismaMegan | 0:862d3839389c | 3 | #include "stdio.h" |
PrismaMegan | 0:862d3839389c | 4 | |
PrismaMegan | 0:862d3839389c | 5 | AnalogIn arusIn(A0); |
PrismaMegan | 0:862d3839389c | 6 | AnalogIn tegIn(A1); |
PrismaMegan | 0:862d3839389c | 7 | AnalogIn arusOut(A2); |
PrismaMegan | 0:862d3839389c | 8 | AnalogIn tegOut(A3); |
PrismaMegan | 0:862d3839389c | 9 | AnalogIn suhuPv(A4); |
PrismaMegan | 0:862d3839389c | 10 | AnalogIn suhuCore(A5); |
PrismaMegan | 0:862d3839389c | 11 | |
PrismaMegan | 0:862d3839389c | 12 | DigitalOut led(LED1); |
PrismaMegan | 0:862d3839389c | 13 | |
PrismaMegan | 0:862d3839389c | 14 | const int nGen = 24; |
PrismaMegan | 0:862d3839389c | 15 | const double nGen1 = nGen; |
PrismaMegan | 0:862d3839389c | 16 | const int nIndividu = 50; |
PrismaMegan | 0:862d3839389c | 17 | const int nGenerasi = 40; |
PrismaMegan | 0:862d3839389c | 18 | const float kSil = 0.75; |
PrismaMegan | 0:862d3839389c | 19 | const float kMut = 0.5; |
PrismaMegan | 0:862d3839389c | 20 | |
PrismaMegan | 0:862d3839389c | 21 | int kromInduk[nIndividu][nGen]; |
PrismaMegan | 0:862d3839389c | 22 | int kromKode[nIndividu][nGen]; |
PrismaMegan | 0:862d3839389c | 23 | float indeksGen[nIndividu][1]; |
PrismaMegan | 0:862d3839389c | 24 | float kromEval[nIndividu][nGen+2]; |
PrismaMegan | 0:862d3839389c | 25 | float kromUrut[nIndividu][nGen+2]; |
PrismaMegan | 0:862d3839389c | 26 | int r[nIndividu/2]; |
PrismaMegan | 0:862d3839389c | 27 | bool kromSel[nIndividu/2][nGen]; |
PrismaMegan | 0:862d3839389c | 28 | bool kromSilInduk[nIndividu/2][nGen]; |
PrismaMegan | 0:862d3839389c | 29 | bool kromSilAnak[nIndividu/2][nGen]; |
PrismaMegan | 0:862d3839389c | 30 | bool kromMut[nIndividu][nGen]; |
PrismaMegan | 0:862d3839389c | 31 | int arrayku[nGen]; |
PrismaMegan | 0:862d3839389c | 32 | const int nMut = kMut *nGen; |
PrismaMegan | 0:862d3839389c | 33 | int chGen[nMut]; |
PrismaMegan | 0:862d3839389c | 34 | float kromUngGen[nGenerasi][nGen+1]; |
PrismaMegan | 0:862d3839389c | 35 | int kromUng[nGen]; |
PrismaMegan | 0:862d3839389c | 36 | float kromUngVal2; |
PrismaMegan | 0:862d3839389c | 37 | |
PrismaMegan | 0:862d3839389c | 38 | int h,i,k,a,j,l,m,n,b,c,x; |
PrismaMegan | 0:862d3839389c | 39 | float d,e; |
PrismaMegan | 0:862d3839389c | 40 | const int bawah = pow(2,nGen1)- 1; |
PrismaMegan | 0:862d3839389c | 41 | |
PrismaMegan | 0:862d3839389c | 42 | int xmin = 0; |
PrismaMegan | 0:862d3839389c | 43 | float xmax = 22.1; |
PrismaMegan | 0:862d3839389c | 44 | |
PrismaMegan | 0:862d3839389c | 45 | void bangkitGen(){ |
PrismaMegan | 0:862d3839389c | 46 | |
PrismaMegan | 0:862d3839389c | 47 | //printf("\n1. Pembangkitan Kromosom Induk\n\r"); |
PrismaMegan | 0:862d3839389c | 48 | |
PrismaMegan | 0:862d3839389c | 49 | for(m=0;m<nIndividu;m++){ |
PrismaMegan | 0:862d3839389c | 50 | //Here I'd like to print each address field of each structure to the screen |
PrismaMegan | 0:862d3839389c | 51 | //printf("Kromosom ke-%d : ", m); |
PrismaMegan | 0:862d3839389c | 52 | for (n=0;n<nGen;n++){ |
PrismaMegan | 0:862d3839389c | 53 | bool s = rand() % 2; |
PrismaMegan | 0:862d3839389c | 54 | kromInduk[m][n] = s; |
PrismaMegan | 0:862d3839389c | 55 | //printf("%i",kromInduk[m][n]); |
PrismaMegan | 0:862d3839389c | 56 | } |
PrismaMegan | 0:862d3839389c | 57 | //printf(" \n\r"); |
PrismaMegan | 0:862d3839389c | 58 | } |
PrismaMegan | 0:862d3839389c | 59 | //printf(" \n\r"); |
PrismaMegan | 0:862d3839389c | 60 | } |
PrismaMegan | 0:862d3839389c | 61 | |
PrismaMegan | 0:862d3839389c | 62 | void koding(){ |
PrismaMegan | 0:862d3839389c | 63 | //printf("\n2. Pengkodean kromosom\n\r"); |
PrismaMegan | 0:862d3839389c | 64 | |
PrismaMegan | 0:862d3839389c | 65 | for (m=0; m<nIndividu; m++){ |
PrismaMegan | 0:862d3839389c | 66 | //printf("%d : ", m); |
PrismaMegan | 0:862d3839389c | 67 | float binerTotal = 0.00; |
PrismaMegan | 0:862d3839389c | 68 | for (n=0; n<nGen; n++){ |
PrismaMegan | 0:862d3839389c | 69 | kromKode[m][n] = kromInduk[m][n]; |
PrismaMegan | 0:862d3839389c | 70 | x = kromKode[m][n]; |
PrismaMegan | 0:862d3839389c | 71 | binerTotal += x * pow(2,nGen1 - (n + 1)); |
PrismaMegan | 0:862d3839389c | 72 | |
PrismaMegan | 0:862d3839389c | 73 | //printf("%i",kromInduk[m][n]); |
PrismaMegan | 0:862d3839389c | 74 | } |
PrismaMegan | 0:862d3839389c | 75 | float c = binerTotal /bawah; |
PrismaMegan | 0:862d3839389c | 76 | indeksGen[m][1] = (xmin + (xmax - xmin)) * c; |
PrismaMegan | 0:862d3839389c | 77 | d = indeksGen[m][1]; |
PrismaMegan | 0:862d3839389c | 78 | //printf(", %.0f, %.2f", binerTotal, d); |
PrismaMegan | 0:862d3839389c | 79 | //printf(" \n\r"); |
PrismaMegan | 0:862d3839389c | 80 | } |
PrismaMegan | 0:862d3839389c | 81 | //printf(" \n\r"); |
PrismaMegan | 0:862d3839389c | 82 | } |
PrismaMegan | 0:862d3839389c | 83 | |
PrismaMegan | 0:862d3839389c | 84 | void evaluasi(){ |
PrismaMegan | 0:862d3839389c | 85 | //printf("\n3. Evaluasi\n\r"); |
PrismaMegan | 0:862d3839389c | 86 | bool f; |
PrismaMegan | 0:862d3839389c | 87 | float h; |
PrismaMegan | 0:862d3839389c | 88 | for (m=0; m<nIndividu; m++){ |
PrismaMegan | 0:862d3839389c | 89 | //printf("%d : ", m); |
PrismaMegan | 0:862d3839389c | 90 | for (n=0; n<nGen; n++){ |
PrismaMegan | 0:862d3839389c | 91 | kromEval[m][n] = kromKode[m][n]; |
PrismaMegan | 0:862d3839389c | 92 | f = kromEval[m][n]; |
PrismaMegan | 0:862d3839389c | 93 | //printf("%i",f); |
PrismaMegan | 0:862d3839389c | 94 | } |
PrismaMegan | 0:862d3839389c | 95 | |
PrismaMegan | 0:862d3839389c | 96 | float arusOut1; |
PrismaMegan | 0:862d3839389c | 97 | arusOut1 = arusOut.read() *10; |
PrismaMegan | 0:862d3839389c | 98 | float tegOut1; |
PrismaMegan | 0:862d3839389c | 99 | tegOut1 = tegOut.read() *12; |
PrismaMegan | 0:862d3839389c | 100 | float pOut; |
PrismaMegan | 0:862d3839389c | 101 | pOut = arusOut1 *tegOut1; |
PrismaMegan | 0:862d3839389c | 102 | kromEval[m][nGen] = indeksGen[m][1]; |
PrismaMegan | 0:862d3839389c | 103 | kromEval[m][nGen+1] = pOut; |
PrismaMegan | 0:862d3839389c | 104 | h = kromEval[m][nGen+1]; |
PrismaMegan | 0:862d3839389c | 105 | //printf(",%.2f", h); |
PrismaMegan | 0:862d3839389c | 106 | //printf(" \n\r"); |
PrismaMegan | 0:862d3839389c | 107 | } |
PrismaMegan | 0:862d3839389c | 108 | //printf(" \n\r"); |
PrismaMegan | 0:862d3839389c | 109 | } |
PrismaMegan | 0:862d3839389c | 110 | |
PrismaMegan | 0:862d3839389c | 111 | void maks(){ |
PrismaMegan | 0:862d3839389c | 112 | int i; |
PrismaMegan | 0:862d3839389c | 113 | float maks = 0.00; |
PrismaMegan | 0:862d3839389c | 114 | int imaks = 0; |
PrismaMegan | 0:862d3839389c | 115 | float val; |
PrismaMegan | 0:862d3839389c | 116 | for (i=0; i<nIndividu; i++){ |
PrismaMegan | 0:862d3839389c | 117 | val = kromUrut[i][nGen+1]; |
PrismaMegan | 0:862d3839389c | 118 | if (val > maks){ |
PrismaMegan | 0:862d3839389c | 119 | maks = val; |
PrismaMegan | 0:862d3839389c | 120 | imaks = i; |
PrismaMegan | 0:862d3839389c | 121 | } |
PrismaMegan | 0:862d3839389c | 122 | else{ |
PrismaMegan | 0:862d3839389c | 123 | maks = maks; |
PrismaMegan | 0:862d3839389c | 124 | imaks = imaks; |
PrismaMegan | 0:862d3839389c | 125 | } |
PrismaMegan | 0:862d3839389c | 126 | } |
PrismaMegan | 0:862d3839389c | 127 | r[l] = imaks; |
PrismaMegan | 0:862d3839389c | 128 | //printf("%i, %.2f: ", imaks, maks); |
PrismaMegan | 0:862d3839389c | 129 | for (n=0; n<nGen; n++){ |
PrismaMegan | 0:862d3839389c | 130 | int ag = kromUrut[imaks][n]; |
PrismaMegan | 0:862d3839389c | 131 | kromSel[l][n] = ag; |
PrismaMegan | 0:862d3839389c | 132 | kromUrut[imaks][nGen+1] = 0; |
PrismaMegan | 0:862d3839389c | 133 | //printf("%i",ag); |
PrismaMegan | 0:862d3839389c | 134 | } |
PrismaMegan | 0:862d3839389c | 135 | //printf(" \n\r"); |
PrismaMegan | 0:862d3839389c | 136 | } |
PrismaMegan | 0:862d3839389c | 137 | |
PrismaMegan | 0:862d3839389c | 138 | void urut(){ |
PrismaMegan | 0:862d3839389c | 139 | //printf("\n4. Seleksi\n\r"); |
PrismaMegan | 0:862d3839389c | 140 | for (m=0; m<nIndividu; m++){ |
PrismaMegan | 0:862d3839389c | 141 | for (n=0; n<=(nGen+1); n++){ |
PrismaMegan | 0:862d3839389c | 142 | kromUrut[m][n] = kromEval[m][n]; |
PrismaMegan | 0:862d3839389c | 143 | } |
PrismaMegan | 0:862d3839389c | 144 | } |
PrismaMegan | 0:862d3839389c | 145 | |
PrismaMegan | 0:862d3839389c | 146 | for (l=0; l<(nIndividu/2); l++){ |
PrismaMegan | 0:862d3839389c | 147 | maks(); |
PrismaMegan | 0:862d3839389c | 148 | } |
PrismaMegan | 0:862d3839389c | 149 | //printf(" \n\r"); |
PrismaMegan | 0:862d3839389c | 150 | } |
PrismaMegan | 0:862d3839389c | 151 | |
PrismaMegan | 0:862d3839389c | 152 | void silang(){ |
PrismaMegan | 0:862d3839389c | 153 | //printf("\n5. Penyilangan\n\r"); |
PrismaMegan | 0:862d3839389c | 154 | //printf("\nInduk\n\r"); |
PrismaMegan | 0:862d3839389c | 155 | |
PrismaMegan | 0:862d3839389c | 156 | for (m=0; m<nIndividu/2; m++){ |
PrismaMegan | 0:862d3839389c | 157 | for (n=0; n<nGen; n++){ |
PrismaMegan | 0:862d3839389c | 158 | int sx = kromSel[m][n]; |
PrismaMegan | 0:862d3839389c | 159 | //printf("%i",sx); |
PrismaMegan | 0:862d3839389c | 160 | kromSilInduk[m][n] = sx; |
PrismaMegan | 0:862d3839389c | 161 | } |
PrismaMegan | 0:862d3839389c | 162 | //printf(" \n\r"); |
PrismaMegan | 0:862d3839389c | 163 | } |
PrismaMegan | 0:862d3839389c | 164 | //printf(" \n\r"); |
PrismaMegan | 0:862d3839389c | 165 | //printf("\nAnak\n\r"); |
PrismaMegan | 0:862d3839389c | 166 | int pSil = kSil *nGen; |
PrismaMegan | 0:862d3839389c | 167 | for (m=0; m<nIndividu/4; m++){ |
PrismaMegan | 0:862d3839389c | 168 | for (int ma=0; ma<pSil; ma++){ |
PrismaMegan | 0:862d3839389c | 169 | int ms1 = kromSilInduk[m*2][ma]; |
PrismaMegan | 0:862d3839389c | 170 | kromSilAnak[m*2][ma] = ms1; |
PrismaMegan | 0:862d3839389c | 171 | int ms2 = kromSilInduk[(m*2)+1][ma]; |
PrismaMegan | 0:862d3839389c | 172 | kromSilAnak[(m*2)+1][ma] = ms2; |
PrismaMegan | 0:862d3839389c | 173 | } |
PrismaMegan | 0:862d3839389c | 174 | for (int mb=pSil; mb<=nGen; mb++){ |
PrismaMegan | 0:862d3839389c | 175 | int mb1 = kromSilInduk[(m*2)+1][mb]; |
PrismaMegan | 0:862d3839389c | 176 | kromSilAnak[m*2][mb] = mb1; |
PrismaMegan | 0:862d3839389c | 177 | int mb2 = kromSilInduk[m*2][mb]; |
PrismaMegan | 0:862d3839389c | 178 | kromSilAnak[(m*2)+1][mb] = mb2; |
PrismaMegan | 0:862d3839389c | 179 | } |
PrismaMegan | 0:862d3839389c | 180 | } |
PrismaMegan | 0:862d3839389c | 181 | for (int ma=0; ma<pSil; ma++){ |
PrismaMegan | 0:862d3839389c | 182 | int ms1 = kromSilInduk[0][ma]; |
PrismaMegan | 0:862d3839389c | 183 | kromSilAnak[0][ma] = ms1; |
PrismaMegan | 0:862d3839389c | 184 | int ms2 = kromSilInduk[1][ma]; |
PrismaMegan | 0:862d3839389c | 185 | kromSilAnak[1][ma] = ms2; |
PrismaMegan | 0:862d3839389c | 186 | } |
PrismaMegan | 0:862d3839389c | 187 | for (int mb=pSil; mb<=nGen; mb++){ |
PrismaMegan | 0:862d3839389c | 188 | int mb1 = kromSilInduk[1][mb]; |
PrismaMegan | 0:862d3839389c | 189 | kromSilAnak[0][mb] = mb1; |
PrismaMegan | 0:862d3839389c | 190 | int mb2 = kromSilInduk[0][mb]; |
PrismaMegan | 0:862d3839389c | 191 | kromSilAnak[1][mb] = mb2; |
PrismaMegan | 0:862d3839389c | 192 | } |
PrismaMegan | 0:862d3839389c | 193 | |
PrismaMegan | 0:862d3839389c | 194 | for (m=0; m<nIndividu/2; m++){ |
PrismaMegan | 0:862d3839389c | 195 | for (n=0; n<nGen; n++){ |
PrismaMegan | 0:862d3839389c | 196 | int cb1 = kromSilAnak[m][n]; |
PrismaMegan | 0:862d3839389c | 197 | //printf("%i",cb1); |
PrismaMegan | 0:862d3839389c | 198 | } |
PrismaMegan | 0:862d3839389c | 199 | //printf(" \n\r"); |
PrismaMegan | 0:862d3839389c | 200 | } |
PrismaMegan | 0:862d3839389c | 201 | //printf(" \n\r"); |
PrismaMegan | 0:862d3839389c | 202 | } |
PrismaMegan | 0:862d3839389c | 203 | |
PrismaMegan | 0:862d3839389c | 204 | void genArray(){ |
PrismaMegan | 0:862d3839389c | 205 | for (int r=0; r<nGen; r++){ |
PrismaMegan | 0:862d3839389c | 206 | arrayku[r] = r; |
PrismaMegan | 0:862d3839389c | 207 | } |
PrismaMegan | 0:862d3839389c | 208 | } |
PrismaMegan | 0:862d3839389c | 209 | |
PrismaMegan | 0:862d3839389c | 210 | void pickRandom(){ |
PrismaMegan | 0:862d3839389c | 211 | genArray(); |
PrismaMegan | 0:862d3839389c | 212 | for (int i=0; i<(nGen-nMut); i++){ |
PrismaMegan | 0:862d3839389c | 213 | int ame = (nGen-1)-i; |
PrismaMegan | 0:862d3839389c | 214 | int choosen = rand() % ame; |
PrismaMegan | 0:862d3839389c | 215 | arrayku[choosen] = 0; |
PrismaMegan | 0:862d3839389c | 216 | |
PrismaMegan | 0:862d3839389c | 217 | for (int l=choosen; l<nGen; l++){ |
PrismaMegan | 0:862d3839389c | 218 | int m = arrayku[l+1]; |
PrismaMegan | 0:862d3839389c | 219 | arrayku[l] = m; |
PrismaMegan | 0:862d3839389c | 220 | } |
PrismaMegan | 0:862d3839389c | 221 | |
PrismaMegan | 0:862d3839389c | 222 | } |
PrismaMegan | 0:862d3839389c | 223 | |
PrismaMegan | 0:862d3839389c | 224 | //printf("Nomor gen termutasi: "); |
PrismaMegan | 0:862d3839389c | 225 | for (int q=0; q<nMut; q++){ |
PrismaMegan | 0:862d3839389c | 226 | chGen[q] = arrayku[q]; |
PrismaMegan | 0:862d3839389c | 227 | int p = chGen[q]; |
PrismaMegan | 0:862d3839389c | 228 | //printf("%i,",p); |
PrismaMegan | 0:862d3839389c | 229 | } |
PrismaMegan | 0:862d3839389c | 230 | //printf(" \n\r"); |
PrismaMegan | 0:862d3839389c | 231 | } |
PrismaMegan | 0:862d3839389c | 232 | |
PrismaMegan | 0:862d3839389c | 233 | void mutasi(){ |
PrismaMegan | 0:862d3839389c | 234 | //printf("\n6. Mutasi\n\r"); |
PrismaMegan | 0:862d3839389c | 235 | pickRandom(); |
PrismaMegan | 0:862d3839389c | 236 | |
PrismaMegan | 0:862d3839389c | 237 | for (m=0; m<nIndividu/2; m++){ |
PrismaMegan | 0:862d3839389c | 238 | for (n=0; n<nGen; n++){ |
PrismaMegan | 0:862d3839389c | 239 | int sy = kromSilInduk[m][n]; |
PrismaMegan | 0:862d3839389c | 240 | kromMut[m][n] = sy; |
PrismaMegan | 0:862d3839389c | 241 | } |
PrismaMegan | 0:862d3839389c | 242 | } |
PrismaMegan | 0:862d3839389c | 243 | for (m=nIndividu/2; m<=nIndividu; m++){ |
PrismaMegan | 0:862d3839389c | 244 | for (n=0; n<nGen; n++){ |
PrismaMegan | 0:862d3839389c | 245 | int sh = kromSilAnak[m - (nIndividu/2)][n]; |
PrismaMegan | 0:862d3839389c | 246 | kromMut[m][n] = sh; |
PrismaMegan | 0:862d3839389c | 247 | } |
PrismaMegan | 0:862d3839389c | 248 | } |
PrismaMegan | 0:862d3839389c | 249 | |
PrismaMegan | 0:862d3839389c | 250 | for (m=0; m<nIndividu; m++){ |
PrismaMegan | 0:862d3839389c | 251 | for (n=0; n<nGen; n++){ |
PrismaMegan | 0:862d3839389c | 252 | } |
PrismaMegan | 0:862d3839389c | 253 | } |
PrismaMegan | 0:862d3839389c | 254 | |
PrismaMegan | 0:862d3839389c | 255 | for (int s=0; s<nIndividu; s++){ |
PrismaMegan | 0:862d3839389c | 256 | for (int t=0; t<nMut; t++){ |
PrismaMegan | 0:862d3839389c | 257 | int u = chGen[t]; |
PrismaMegan | 0:862d3839389c | 258 | if (kromMut[s][u]==1){ |
PrismaMegan | 0:862d3839389c | 259 | kromMut[s][u] = 0; |
PrismaMegan | 0:862d3839389c | 260 | } |
PrismaMegan | 0:862d3839389c | 261 | else{ |
PrismaMegan | 0:862d3839389c | 262 | kromMut[s][u] = 1; |
PrismaMegan | 0:862d3839389c | 263 | } |
PrismaMegan | 0:862d3839389c | 264 | } |
PrismaMegan | 0:862d3839389c | 265 | } |
PrismaMegan | 0:862d3839389c | 266 | |
PrismaMegan | 0:862d3839389c | 267 | printf(" \n\r"); |
PrismaMegan | 0:862d3839389c | 268 | |
PrismaMegan | 0:862d3839389c | 269 | for (int v=0; v<nIndividu; v++){ |
PrismaMegan | 0:862d3839389c | 270 | for (int x=0; x<nGen; x++){ |
PrismaMegan | 0:862d3839389c | 271 | int wa = kromMut[v][x]; |
PrismaMegan | 0:862d3839389c | 272 | //printf("%i",wa); |
PrismaMegan | 0:862d3839389c | 273 | } |
PrismaMegan | 0:862d3839389c | 274 | //printf(" \n\r"); |
PrismaMegan | 0:862d3839389c | 275 | } |
PrismaMegan | 0:862d3839389c | 276 | } |
PrismaMegan | 0:862d3839389c | 277 | |
PrismaMegan | 0:862d3839389c | 278 | void maksGen(){ |
PrismaMegan | 0:862d3839389c | 279 | float maks = 0.00; |
PrismaMegan | 0:862d3839389c | 280 | int imaks = 0; |
PrismaMegan | 0:862d3839389c | 281 | float val; |
PrismaMegan | 0:862d3839389c | 282 | for (i=0; i<nGenerasi; i++){ |
PrismaMegan | 0:862d3839389c | 283 | val = kromUngGen[i][nGen]; |
PrismaMegan | 0:862d3839389c | 284 | if (val > maks){ |
PrismaMegan | 0:862d3839389c | 285 | maks = val; |
PrismaMegan | 0:862d3839389c | 286 | imaks = i; |
PrismaMegan | 0:862d3839389c | 287 | } |
PrismaMegan | 0:862d3839389c | 288 | else{ |
PrismaMegan | 0:862d3839389c | 289 | maks = maks; |
PrismaMegan | 0:862d3839389c | 290 | imaks = imaks; |
PrismaMegan | 0:862d3839389c | 291 | } |
PrismaMegan | 0:862d3839389c | 292 | } |
PrismaMegan | 0:862d3839389c | 293 | printf("Generasi ke- %i\n\r", imaks); |
PrismaMegan | 0:862d3839389c | 294 | printf("Nilai fitness : %.2f\n\r", maks); |
PrismaMegan | 0:862d3839389c | 295 | printf("Kromosom : "); |
PrismaMegan | 0:862d3839389c | 296 | for (n=0; n<nGen; n++){ |
PrismaMegan | 0:862d3839389c | 297 | int ag = kromUngGen[imaks][n]; |
PrismaMegan | 0:862d3839389c | 298 | kromUng[n] = ag; |
PrismaMegan | 0:862d3839389c | 299 | kromUrut[imaks][nGen] = 0; |
PrismaMegan | 0:862d3839389c | 300 | printf("%i", ag); |
PrismaMegan | 0:862d3839389c | 301 | } |
PrismaMegan | 0:862d3839389c | 302 | printf(" \n\r"); |
PrismaMegan | 0:862d3839389c | 303 | float binerTotal = 0.00; |
PrismaMegan | 0:862d3839389c | 304 | for (n=0; n<nGen; n++){ |
PrismaMegan | 0:862d3839389c | 305 | x = kromUng[n]; |
PrismaMegan | 0:862d3839389c | 306 | binerTotal += x * pow(2,nGen1 - (n + 1)); |
PrismaMegan | 0:862d3839389c | 307 | } |
PrismaMegan | 0:862d3839389c | 308 | float c = binerTotal /bawah; |
PrismaMegan | 0:862d3839389c | 309 | float vRep = (xmin + (xmax - xmin)) * c; |
PrismaMegan | 0:862d3839389c | 310 | printf("Nilai representasi : %.2f\n\r", vRep); |
PrismaMegan | 0:862d3839389c | 311 | } |
PrismaMegan | 0:862d3839389c | 312 | |
PrismaMegan | 0:862d3839389c | 313 | void urutGen(){ |
PrismaMegan | 0:862d3839389c | 314 | printf(" \n\r"); |
PrismaMegan | 0:862d3839389c | 315 | printf("\nKromosom unggul tercapai pada : \n\r"); |
PrismaMegan | 0:862d3839389c | 316 | for (m=0; m<nGenerasi; m++){ |
PrismaMegan | 0:862d3839389c | 317 | for (n=0; n<=(nGen); n++){ |
PrismaMegan | 0:862d3839389c | 318 | kromUrut[m][n] = kromUngGen[m][n]; |
PrismaMegan | 0:862d3839389c | 319 | } |
PrismaMegan | 0:862d3839389c | 320 | } |
PrismaMegan | 0:862d3839389c | 321 | maksGen(); |
PrismaMegan | 0:862d3839389c | 322 | } |
PrismaMegan | 0:862d3839389c | 323 | |
PrismaMegan | 0:862d3839389c | 324 | int main() |
PrismaMegan | 0:862d3839389c | 325 | { |
PrismaMegan | 0:862d3839389c | 326 | printf("\n----------ALGORITMA GENETIKA - MPPT----------\n\r"); |
PrismaMegan | 0:862d3839389c | 327 | float kromUngVal; |
PrismaMegan | 0:862d3839389c | 328 | |
PrismaMegan | 0:862d3839389c | 329 | float suhuPv1; |
PrismaMegan | 0:862d3839389c | 330 | suhuPv1 = suhuPv.read(); |
PrismaMegan | 0:862d3839389c | 331 | float suhuCore1; |
PrismaMegan | 0:862d3839389c | 332 | suhuCore1 = suhuCore.read(); |
PrismaMegan | 0:862d3839389c | 333 | printf("\nSuhu PV : %.2f\n\r", suhuPv1); |
PrismaMegan | 0:862d3839389c | 334 | printf("Suhu Core : %.2f\n\r", suhuCore1); |
PrismaMegan | 0:862d3839389c | 335 | |
PrismaMegan | 0:862d3839389c | 336 | bangkitGen(); |
PrismaMegan | 0:862d3839389c | 337 | printf("\nKromosom unggul setiap generasi :\n\r"); |
PrismaMegan | 0:862d3839389c | 338 | for (i=0; i<nGenerasi; i++){ |
PrismaMegan | 0:862d3839389c | 339 | led = 1; |
PrismaMegan | 0:862d3839389c | 340 | koding(); |
PrismaMegan | 0:862d3839389c | 341 | evaluasi(); |
PrismaMegan | 0:862d3839389c | 342 | urut(); |
PrismaMegan | 0:862d3839389c | 343 | silang(); |
PrismaMegan | 0:862d3839389c | 344 | mutasi(); |
PrismaMegan | 0:862d3839389c | 345 | led = 0; |
PrismaMegan | 0:862d3839389c | 346 | |
PrismaMegan | 0:862d3839389c | 347 | for (m=0; m<nIndividu; m++){ |
PrismaMegan | 0:862d3839389c | 348 | for (n=0; n<nGen; n++){ |
PrismaMegan | 0:862d3839389c | 349 | kromInduk[m][n] = kromMut[m][n]; |
PrismaMegan | 0:862d3839389c | 350 | } |
PrismaMegan | 0:862d3839389c | 351 | } |
PrismaMegan | 0:862d3839389c | 352 | koding(); |
PrismaMegan | 0:862d3839389c | 353 | evaluasi(); |
PrismaMegan | 0:862d3839389c | 354 | urut(); |
PrismaMegan | 0:862d3839389c | 355 | |
PrismaMegan | 0:862d3839389c | 356 | printf(" Generasi ke-%d : ", i); |
PrismaMegan | 0:862d3839389c | 357 | for (m=0; m<nGen; m++){ |
PrismaMegan | 0:862d3839389c | 358 | kromUngGen[i][m] = kromSel[0][m]; |
PrismaMegan | 0:862d3839389c | 359 | printf("%.0f",kromUngGen[i][m]); |
PrismaMegan | 0:862d3839389c | 360 | } |
PrismaMegan | 0:862d3839389c | 361 | kromUngVal = kromEval[r[0]][nGen+1]; |
PrismaMegan | 0:862d3839389c | 362 | kromUngGen[i][nGen] = kromUngVal; |
PrismaMegan | 0:862d3839389c | 363 | |
PrismaMegan | 0:862d3839389c | 364 | kromUngVal2 = kromUngGen[i][nGen]; |
PrismaMegan | 0:862d3839389c | 365 | printf(" : %.2f", kromUngVal2); |
PrismaMegan | 0:862d3839389c | 366 | printf(" \r"); |
PrismaMegan | 0:862d3839389c | 367 | |
PrismaMegan | 0:862d3839389c | 368 | } |
PrismaMegan | 0:862d3839389c | 369 | urutGen(); |
PrismaMegan | 0:862d3839389c | 370 | } |