?? gaunite.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 + -