Kashub's Code Barn - "AGiSI_3"

podświetlone jako c (dodał(a) Shakira @ 2020-12-22 15:20:57)

Twoja wyszukiwarka
Podświetl ten kod w:
Ostatnio dodane:
Losowe wpisy:
/*
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
nfp - funkcja przystosowania najlepszego aktualnie osobnika
nx[n] - jednowymiarowa tablica najlepszych aktualnie rozwiązań
tiz[lp] - jednowymiarowa tablica indeksów zwycięzców turniejów (potencjalnych rozwiązań rodzicielskich)
pk - zadane prawdopodobieństwo krzyżowania (bliskie 1)
*/
 
#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 24
#define lp 10
#define pk 0.97
 
/*zmienne globalne widoczne w kazdej funkcji programu, wartosci testowe*/
float xmin[n]={0,0};
float xmax[n]={20,20};
float nx[n]; 			
float nfp;		
 
float f(float x[n])
{
	int i;
	float s=0.;
 
	for(i=0;i<n;i++) s+=x[i]*sin(x[i])*sin(x[i]);
	return s;	
}
 
void inicjalizacja_najlepszego_rozwiazania()
{
	int i;
	for(i=0;i<n;i++) nx[i]=xmin[i];
	nfp=f(nx);
}
 
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("%d",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 i,j,k,ng;
	float p2,wdi;
	float x[n];
 
	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+=tchr[j][ng]*p2;
				p2*=2;
			}
			x[i]=xmin[i]+(xmax[i]-xmin[i])*wdi/(p2-1);
		}
		//for(k=0;k<n;k++) printf("%f\t",x[k]); 
		//printf("\n");
		//for(k=0;k<n*m;k++) printf("%1d",tchr[j][k]); 
		//printf("\n");
		fp[j]=f(x);
		if(fp[j]>nfp){
			nfp=fp[j];
			for(k=0;k<n;k++) nx[k]=x[k];
		}
	}
} 
 
void selekcja(float fp[lp], int tiz[lp])
{
	int j;
 
	for (j = 0;j<lp;j++)
	{
		int i1 = rand() % lp;
		int i2 = rand() % lp;
 
		if(fp[i1] > fp[i2])
		{
			tiz[j] = i1;
		}
		else
		{
			tiz[j] = i2;
		}
	}
}
 
 
void krzyzowanie(int tiz[lp], int tchr[lp][n*m], int tchp[lp][n*m])
{
	int j,k,li=lp,i,i1,i2,r1,r2,p1,p2,n1,n2,pc; 
	for (j=0;j<lp/2;j++) 
	{
 
		i1=rand() % li; 
		r1=tiz[i1];
		tiz[i1]=tiz[li-1]; 
		li--;
 
		i2=rand() % li; 
		r2=tiz[i2];
		tiz[i2]=tiz[li-1];
		li--; 
 
		p1=2*j; 
		p2=p1+1;
 
		float krzyz = rand() %100;
		krzyz=(krzyz/100);										
		if(krzyz<=pk) 
		{
			n1=1;
			n2=n*m-1;
			pc=rand() % (n1+1)+(n2-n1); 
			for (k=0;k<pc;k++)
				{
					tchp[p1][k]=tchr[r1][k];
					tchp[p2][k]=tchr[r2][k];
 
				}
			for (k=pc;k<n*m;k++)
				{
					tchp[p1][k]=tchr[r2][k];
					tchp[p2][k]=tchr[r1][k];
				} 
 
		}
		else
		{
			//printf("Nie krzyzuje\n"); 
			for(k=0;k<n*m;k++)
			{
				tchp[p1][k]=tchr[r1][k];  
				tchp[p2][k]=tchr[r2][k];
			}
		}
 
	}
}	
 
int main()
{
	int tchr[lp][n*m];
	int tchp[lp][n*m];
	float fp[lp];
	int tiz[lp];
 
	srand(time(0));
 
	inicjalizacja_najlepszego_rozwiazania();
	inicjalizacja_pierwszej_populacji(tchr);
 
	ocena_osobnikow_populacji(tchr,fp);
	selekcja(fp,tiz);
	drukuj_populacje(tchr);
	krzyzowanie(tiz,tchr,tchp);
	drukuj_populacje(tchp);
 
	return 0;
}
| Sklepy internetowe | | Sklep z artykułami dla dzieci | | Opony zimowe | | Programista Trójmiasto | | Blog o książkach | | Blogi za darmo | | Skróć link | | Gnieżdżewo | | Pionowe opisy |