/* n - zadana liczba zmiennych m - zadana liczba genów użyta do zakodowania jednej zmiennej lp - zadana liczność populacji, z założenia parzysta xmin[lp] - zadana jednowymiarowa tablica minimalnych wartości zmiennych projektowania xmax[lp] - zadana jednowymiarowa tablica maksymalnych wartości zmiennych projektowania f(x) - zadana funkcja przystosowania x[n] - jednowymiarowa tablica zmiennych projektowania fp[lp] - jednowymiarowa tablica funkcji przystosowania osobników populacji tchr[lp][n*m] - dwuwymiarowa tablica chromosomów osobników rodzicielskich tchp[lp][n*m] - dwuwymiarowa tablica chromosomów osobników potomnych */ #include<stdio.h> #include<stdlib.h> #include<time.h> #include<math.h> /*parametry algorytmu widoczne w kazdej funkcji programu, wartosci testowe*/ #define n 2 #define m 6 #define lp 2 /*zmienne globalne widoczne w kazdej funkcji programu, wartosci testowe*/ float xmin[n]={-2,3}; float xmax[n]={4.3,9.3}; float f(float x[n]) { int i; float s=0; for(i=0;i<n;i++) s=s+x[i]*(sin(x[i])*sin(x[i])); return s; } void drukuj_populacje(int tchr[lp][n*m]) { int i,j; for(i=0;i<lp;i++){ for(j=0;j<n*m;j++){ printf("%1d",tchr[i][j]); } printf("\n"); } printf("\n"); } void inicjalizacja_pierwszej_populacji(int tchr[lp][n*m]) { int i,j; for(i=0;i<lp;i++){ for(j=0;j<n*m;j++){ tchr[i][j]=rand()%2; } } } void ocena_osobnikow_populacji(int tchr[lp][n*m], float fp[lp]) { int k,i,j,ng=0,nfp=0,l; float x[n],nx[n],p2,wdi; for(j=0;j<lp;j++){ for(i=0;i<n;i++){ p2=1; wdi=0; for(k=0;k<m;k++){ ng=i*m+k; wdi=wdi+tchr[j][ng]*p2; p2=p2*2; } x[i]=xmin[i]+(xmax[i]-xmin[i])*wdi/(p2-1); } fp[j]=f(x); if(fp[j]>nfp) { nfp=fp[j]; for(i=0;i<n;i++) { nx[i]=x[i]; } } for(l=0;l<n*m;l++){ printf("%d", tchr[j][l]); if(l==m-1) printf(" "); } printf("\n"); for(i=0;i<n;i++) { printf("x[%d] = %f \n",i,x[i]); } printf("\n"); } printf("nfp = %d ", nfp); } int main() { int tchr[lp][n*m]; float fp[lp]; srand(time(NULL)); inicjalizacja_pierwszej_populacji(tchr); drukuj_populacje(tchr); ocena_osobnikow_populacji(tchr,fp); return 0; }