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

📄 chromosome.cpp

📁 用遗传算法求物流配送中心解选址问题.有运行结果
💻 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 + -