/* 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; }