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

📄 gaunite.cpp

📁 遗传算法(图像处理)
💻 CPP
字号:
// GAUnite.cpp: implementation of the CGAUnite class.
//
//////////////////////////////////////////////////////////////////////

#include "GAUnite.h"
#include "ProjectHead.h"


//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
/********************************************************/
/*                POPULATION INITIAL                    */
/*                个体初始化                            */
/*********************************************************/
CGAUnite::CGAUnite()
{
}

void CGAUnite::Initial()
{
	int i;
	unsigned int k;
    for(i=0;i<GEN_LENGTH;i++)
	 {  
	    if((rand()*2/RAND_MAX)>=1) k=1;
		else k=0; 
	    m_uGenChainA[i]=k;	
	 }
    for(i=0;i<GEN_LENGTH;i++)
	 {  
	    if((rand()*2/RAND_MAX)>=1) k=1;
		else k=0; 
		m_uGenChainB[i]=k;
	 }
	return;	
}
/********************************************************/
/*                  GENE DECODE                         */
/*                  基因译码函数                        */
/*********************************************************/
void CGAUnite::Decode()
{ long sum1,sum2,sum_all;
  int i,j,begin_l,end_l; 
 
 for(j=0;j<N_PARAMETER;j++) 
 {  
	sum2=1;sum1=0;sum_all=0;
    begin_l=j*CODE_LENGTH;end_l=(j+1)*CODE_LENGTH;
	for(i=begin_l;i<end_l;i++)
	{
		 if(m_uGenChainA[i]==m_uGenChainB[i]) 
		 { 
			 m_uDecodeChain[i]=0;
			 sum1=sum1;
		 }
		if(m_uGenChainA[i]!=m_uGenChainB[i])
		{
			m_uDecodeChain[i]=1;
			sum1=sum1+sum2;
		}
		sum_all=sum_all+sum2;
		sum2=sum2*2;
	}
  m_dDecValue[j]=(double)((double)sum1/(double)sum_all);
 }
 
 return;
}

/********************************************************/
/*                FITNESS FUNCATION                     */
/*                    适应度函数                        */
/*********************************************************/
void CGAUnite::FitnessFunction()
{
	double x,y;
    Decode();
	
	x=20.0*m_dDecValue[0]-10.0;
	y=20.0*m_dDecValue[1]-10.0;
	m_x=x;
	m_y=y;
	m_dFitness=0.5-(sin(sqrt(x*x+y*y))*sin(sqrt(x*x+y*y))-0.5)/(1+0.001*(x*x+y*y)*(x*x+y*y));

/*	x=6.0*m_dDecValue[0]-3.0;
	y=6.0*m_dDecValue[1]-3.0;
	m_dFitness=3.0*(1.0-x)*(1.0-x)*exp(-x*x-(y+1.0)*(y+1.0))
		-10.0*(x/5.0-x*x*x-y*y*y*y*y)*exp(-x*x-y*y)
		-1.0/3.0*exp(-(x+1.0)*(x+1.0)-y*y);*/
//	x=2.0*m_dDecValue[0]-1.0;
//	y=2.0*m_dDecValue[1]-1.0;
//	x=m_dDecValue[0];
//	y=m_dDecValue[1];
//	m_dFitness=(x*x+y*y)/2;
//	m_dFitness=2.0+x*sin(4.0*3.14159*x)-y*sin(4.0*3.14159*y+3.14159)
//		        +sin(6.0*sqrt(x*x+y*y))/(6.0*sqrt(x*x+y*y));

	return;
}

CGAUnite::~CGAUnite()
{

}

⌨️ 快捷键说明

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