/* 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,nfp; 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); } printf("%d ", x); printf("%d \n", tchr[j]); fp[j]=f(x); if(fp[j]>nfp) { nfp=fp[j]; for(i=0;i<n;i++) { nx[i]=x[i]; } } } } 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; }