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

📄 myga.cpp

📁 本程序基于matlab 遗传算法的源程序代码
💻 CPP
字号:
#include "MyGa.h"
#include "MyRan.h"
#include <cmath>
namespace ProeGa
{
	
	Ga1::Ga1()
	{
		Param.M=10;//10 个个体
		Param.T=500;//500次迭代
		Param.pc=0.4;//交叉
		Param.pm=0.2;//变异
		Param.Umax=100;
		Param.Umin=-100;
		Param.GussR=12;
		Param.val=2;
		//spand();
		for(int i=0;i<10;i++)
		{
			for(int j=0;j<Param.val;j++)
			{
				if(IntRandom0_1()) Parent[i].Gene[j]=DouRandom0_1()*100;
				else Parent[i].Gene[j]=DouRandom0_1() * (-100);
				
			}
			GetFit(Parent[i]);
			Parent[i].Pselect=0;
		}
	}
	Ga1::~Ga1()
	{
	}
	///////////
	double Ga1::GetGuss()
	{
		double b=0;
		for (int i=0 ;i<Param.GussR;i++)
			{
				 b=b+DouRandom0_1();		
			}
			return (b-6)*(Param.Umax-Param.Umin)/6+(Param.Umax+Param.Umin)/2;		
		/*
		if (IntRandom0_1()) return DouRandom0_1()*100;
						else  return DouRandom0_1()*(-100); */
		
		
		
	}
	/////////////
	int  Ga1::GetFit(Individual& a)//修改输入的函数
	{		
		double b= pow(a.Gene[0],2)+pow(a.Gene[1],2);
		double c=pow(1+0.001*b,2);
		b=pow(sin(pow(b,0.5)),2);
		a.Fitness=0.5+(b-0.5)/c;			
		return EXIT_SUCCESS;
	}
	///////////////////////////
	int   Ga1::IntersectInd(Individual& a,Individual& b)
	{		
		double temp;
		for (int i=0;i<Param.val;i++)
		{
			if(!IntRandom0_1()) 
			{
				temp=a.Gene[i];
				a.Gene[i]=b.Gene[i];
				b.Gene[i]=temp;

			}
				
		}
		return EXIT_SUCCESS;
	}
	/////////////////
	int    Ga1::Intersect()
	{
		int count=int(Param.pc*Param.M);
		for (int i=0 ; i<count/2;i++)
		{
			Individual a1=Parent[IntRandom0_val(Param.M)];
			Individual a2=Parent[IntRandom0_val(Param.M)];
			IntersectInd(a1,a2);
			GetFit(a1);GetFit(a2);
			Child.push_back(a1);
			Child.push_back(a2);
			
		}
		return EXIT_SUCCESS;
	}
	int Ga1::varia()
	{
		int VarGenCoun=int(Param.M*Param.val*Param.pm);
		for (int i=0 ; i<VarGenCoun;i++)
		{
			int x=IntRandom0_val(Param.M);
			Individual  a=Parent[x];
			double mm=GetGuss();
			a.Gene[IntRandom0_val(Param.val)]=mm;
			GetFit(a);
			Child.push_back(a);
		}
		
		return EXIT_SUCCESS;
	}
	int Ga1::Sort()
	{
		Individual  a;
		
		for (int i=0;i<Param.M;i++)		
		Child.push_back(Parent[i]);			
		for(int j=0;j<Param.M;j++)
		{	
			a=Child[0];int m=0;
			for(int k=0;k<Child.size();k++)
			{
				if (Child[k].Fitness<a.Fitness)
				{
					a=Child[k];
					m=k;
				}			
			}
			Parent[j]=a;
			Child.erase(Child.begin()+m);
		}	
		return EXIT_SUCCESS;
	}
}

⌨️ 快捷键说明

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