📄 chromosome.cpp
字号:
// Chromosome.cpp: implementation of the CChromosome class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Chromosome.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
//static int CChromosome::ChromLength=12;
int CChromosome::NumOfCenter=2;
int CChromosome::H=10;
CChromosome::CChromosome()
{
}
CChromosome::CChromosome(const CChromosome & source)
{
m_gene=source.m_gene;
m_center=source.m_center;
m_objectValue=source.m_objectValue;
m_fitness=source.m_fitness;
}
CChromosome & CChromosome::operator =(const CChromosome & source)
{
if(this==&source)
return *this;
m_gene=source.m_gene;
m_center=source.m_center;
m_objectValue=source.m_objectValue;
m_fitness=source.m_fitness;
return *this;
}
bool CChromosome::operator >(const CChromosome & s) const
{
return this->m_objectValue>s.m_objectValue;
}
bool CChromosome::operator <(const CChromosome & s) const
{
return this->m_objectValue<s.m_objectValue;
}
void CChromosome::InitializePop()
{
vector<int> vTemp;
int i,n;
for(i=0;i<ChromLength;i++)
vTemp.push_back(i+1);
for(i=0;i<ChromLength;i++)
{
n=rand()%vTemp.size();
m_gene.push_back(vTemp[n]);
vTemp.erase(vTemp.begin()+n);
}
}
void CChromosome::CaculateObjectValue(double D[ChromLength][ChromLength],double F[ChromLength],double Q[ChromLength])
{
int Z[ChromLength],A[ChromLength][ChromLength];
int i,j,n;
m_center.clear();
for(i=0;i<NumOfCenter;i++)
{
m_center.push_back(m_gene[i]);
}
for(i=0;i<m_gene.size();i++)
{
if(i<NumOfCenter)
Z[m_gene[i]-1]=1;
else
Z[m_gene[i]-1]=0;
}
for(i=0;i<ChromLength;i++)
{
for(j=0;j<ChromLength;j++)
A[i][j]=0;
}
for(i=NumOfCenter;i<ChromLength;i++)
{
n=m_gene[0];
for(j=1;j<NumOfCenter;j++)
{
if(D[n-1][m_gene[i]-1]>D[m_gene[j]-1][m_gene[i]-1])
n=m_gene[j];
}
A[m_gene[i]-1][n-1]=1;
m_center.push_back(n);
}
m_objectValue=0;
for(j=0;j<ChromLength;j++)
{
m_objectValue+=F[j]*Z[j];
for(i=0;i<ChromLength;i++)
m_objectValue+=Q[i]*H*D[i][j]*A[i][j];
}
m_fitness=1000.0/m_objectValue;
}
CChromosome::~CChromosome()
{
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -