⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ga.cpp

📁 人工智能GA问题的C语言实现
💻 CPP
字号:
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#include <iostream.h>
#define Max_num 50
double Buffer[Max_num];//存储样本个体
double func_yc(double x) 
{ //构造被遗传函数
     double i,j,k;
     i=5*3.1415926*x;
     j=sin(i);
	 k=pow(j,6);
	 return k;
	 //while (x<=1 && x>=0);
}

double Random_float() 
{//类型转换隐藏在运算中//产生一个0到1之间的数
	double d=(rand() * 1.0)/RAND_MAX; 
	return d;
}
void yc_func(int maxID) 
{    //后代生成函数,实际为最优良染色体变异而来生成新的个体群
	Buffer[0]=Buffer[maxID];
	for(int i=1; i<=Max_num/2; i++)
	{	
		Buffer[i]=Buffer[0]+(Random_float()/30);
		if (Buffer[i]>1)
			Buffer[i]=1;
	}
	for(i=Max_num/2;i<=Max_num;i++)
	{
		Buffer[i]=Buffer[0]-(Random_float()/30);
		if (Buffer[i]<0)
			Buffer[i]=0;
	}
}
int GetMax() 
{//寻找最大个体元
	int maxID=0;//取得最大值的x的下标
	double maxvaule=func_yc(Buffer[0]);//函数最大值

	for (int i=1;i<=Max_num;i++)
	{//求解最大值
		if (func_yc(Buffer[i])>maxvaule)
		{
			maxvaule=func_yc(Buffer[i]);
			maxID=i;
		}
	}
	return maxID;//返回最大值自变量下标
}


///主函数入口
int main(void)
{	int n;//遗传的代数	
	double maxvalue=0;//保存函数最大值
	char ch=' ';//执行控制标志  继续—退出?a
	do{cout<<"初始化种群中含有的个体数("<<Max_num<<"个)"<<endl<<endl;
	for (int i=0;i<Max_num; i++) // 随机初始化群体
	{
		Buffer[i]=Random_float();//保存至缓冲数组
	}	
	    cout<<"提示:输入代数n值应适中,太大影响效率"<<endl;
		cout<<"======太小结果不精确,推荐值为30======"<<endl<<endl;
		cout<<"请输入要产生的代数n: "<<endl;//过大影响效率,过小结果不精确		
		scanf("%d",&n);//请求输入后代数 
		cout<<endl;
		cout<<"============下面是各代函数值的情况============="<<endl;
		cout<<"通过遗传算法的优胜劣汰准则将越来越接近全局极大值"<<endl<<endl;
		for(i=0;i<n;i++) 
		{
			int maxID=GetMax();				
			if (func_yc(Buffer[maxID])>maxvalue)
			maxvalue=func_yc(Buffer[maxID]);
			yc_func(maxID);

			cout<<"第"<<i+1<<"代取值情况为:"<<endl;
			cout<<"当x取"<<Buffer[0]<<"时"<<"函数sin^6(5*pi*x)值= "<<maxvalue<<endl<<endl;

		}//选取优良后代
		cout<<"-----------------------------------------------------"<<endl;
		cout<<"当x取"<<Buffer[0]<<"时"<<"函数sin^6(5*pi*x)有最大值=: "<<maxvalue<<endl;
		cout<<"-----------------------------------------------------"<<endl;
		cout<<"选择操作"<<endl;
		cout<<"a---重新进行计算\t"<<" 其他字符---退出程序"<<endl;
		cout<<"-----------------------------------------------------"<<endl;
		cin>>ch;//结果输出
		}while(ch=='a');
		return 0;	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -