Genetic Algorithm
      Genetic Algorithm is a program for converging to a required point through a given set of data.This program is written to converge to a population consisting of fittest members.
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>



void initialize(int *a)
{

	int i;
	for(i=0;i<4;i++)
	{
		a[i] = rand()%64;
	}

	printf("\n\tThe present generation is:");


	for(i=0;i<4;i++)
	{

		printf(" %d ",a[i]);
	}


}



void encoding(int a[],int arr[][6])
{

	int k,l,i,j;

	for(i=0;i<4;i++)
	{
		k=a[i];

		for(j=5;j>=0;j--)
		{
			if(k<2)
			{
				arr[i][j]=k;

				while(j>0)

				{
					j--;
					arr[i][j]=0;

				}
				break;
			}

			arr[i][j]=k%2;

			l=k/2;
			k=l;


		}
	}

	printf("\n\n");

	for(i=0;i<4;i++)
	{
		printf("\n");
		printf("  %d\t:",a[i]);
		for(j=0;j<6;j++)
		{
			printf(" %d",arr[i][j]);
		}
	}
}

int selection(int a[], int approx[4], int sarr[][6],int arr[][6],int b[])
{

	int sum=0,i,j,k,sum1=0,l=0;
	double avg,array[4];

	for(i=0;i<4;i++)
	{
		sum=sum+a[i];
	}
	printf("\n\n\t SUM      :  %d",sum);
	avg=sum/4.0;
	printf("\n\n\t AVERAGE  :  %lf",avg);
		printf("\n\nnumber \texpected count \tapprox count");
		printf("\n");
	for(i=0;i<4;i++)
	{
		array[i]=a[i]/avg;
		approx[i]=array[i]+.5;

		sum1=sum1+approx[i];

		printf("\n%d \t%lf \t%d",a[i],array[i],approx[i]);

	}


	for(i=0;i<4;i++)
	{
		for(k=0;k<approx[i];k++)
		{
			for(j=0;j<6;j++)
			{
				sarr[l][j]=arr[i][j];
				b[l]=a[i];

			}
			l++;
		}
	}

	if(sum1!=4)
		return 0;
	else
		return 1;



}

void crossover(int sarr[][6],int a[],int b[],int arr[][6])
{
	randomize();
	printf("\n\n\n\tCROSSOVER\n");
	int i,j,num[4],c=0,x,y;

	for(i=0;i<4;i++)
	{
		printf("\n   %d  :  ",b[i]);
		for(j=0;j<6;j++)
		{
			printf(" %d",sarr[i][j]);
		}
	}


	for(i=0;i<4;i++)
	{
		num[i]=rand()%4;
		c=0;
		while(c==0)
		{
			c=1;
			for(j=i;j>0;j--)
			{
				if(num[i]==num[j-1])
					c=0;
			}
			if(c==0)
				num[i]=rand()%4;
		}
	}



	printf("\n\n\t THE COUPLES FOR CROSSOVER ARE");

	y=rand()%5;

	printf("\tcrossover point : %d",y);

	printf("\n\n\tBefore crossover\n");
       //	printf("\t%d\t:",b[num1]);


	for(i=0;i<4;i++)
	{
		if(i%2==0)
			printf("\n\n\tCOUPLE\n ");

		printf("\n\t%d\t:",b[num[i]]);
		for(j=0;j<6;j++)
		{
			printf(" %d",sarr[num[i]][j]);
		}

	}

	printf("\n\n\tAfter crossover");
	for(i=0;i<4;i++)
	{
		if(i%2==0)
		{

			for(j=(5-y);j<6;j++)
			{
				x=sarr[num[i]][j];
				sarr[num[i]][j]=sarr[num[i+1]][j];
				sarr[num[i+1]][j]=x;
			}
		}

	}

	for(i=0;i<4;i++)
	{
		if(i%2==0)
			printf("\n\n\tCOUPLE\n\t\t");
		for(j=0;j<6;j++)
		{
			printf(" %d",sarr[num[i]][j]);
		}
		printf("\n\t\t");

	}

	for(i=0;i<4;i++)
	{
		for(j=0;j<6;j++)
		{
			arr[i][j]=sarr[num[i]][j];
		}
	}





}

void evaluate(int arr[][6],int a[])
{

	printf("\n\t THE NEW GENERATION IS\n");
	int i,j,sum;
	for(i=0;i<4;i++)
	{
		sum=0;
		for(j=0;j<6;j++)
		{
			sum=sum+(arr[i][j]*pow(2,(5-j)));
		}
	       a[i]=sum;
	       printf("\n\n\t%d",a[i]);
	}
}

void mutation(int arr[][6])
{
	clrscr();
	int x,y,j;
	y=rand()%4;
	x=rand()%5;

	printf("\n\tMUTATION of element %d",y);
	printf("\n\n\t AT POSITION %d",x);

	printf("\n\n\tORIGINAL\n\n");
	for(j=0;j<6;j++)
		printf(" %d",arr[y][j]);

	if(arr[y][x]==0)
		arr[y][x]=1;
	else
		arr[y][x]=0;

	printf("\n\n\tAFTER MUTATION\n\n");

	for(j=0;j<6;j++)
		printf(" %d",arr[y][j]);
}






void main()
{
	clrscr();
	randomize();

	int a[4],approx[4],b[4],i=0;
	int arr[4][6],sarr[4][6];
	initialize(a);
	encoding(a,arr);
	while(i<5)
	{
		if(i==0)
		{
			while((selection(a,approx,sarr,arr,b))==0)
			{
				clrscr();
				initialize(a);
				encoding(a,arr);
			}
		}
		else
			selection(a,approx,sarr,arr,b);

		crossover(sarr,a,b,arr);
		if(getch()==13)
		mutation(arr);
		evaluate(arr,a);
		getch();
		i++;
	}

	getch();
}									

Download Program
Did You Know ?
IP address is a numerical label that is assigned to devices participating in a computer network. Read More