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

📄 maintainsequence.cpp

📁 c++语言实现的遗传算法的例子,需要的快下啊
💻 CPP
字号:
// MaintainSequence.cpp: implementation of the MaintainSequence class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "MaintainSequence.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

MaintainSequence::MaintainSequence(int d,int l,AdaptabilityTSP * a,Rand * rand)
{
	dimension=d;
	length=l;
	adapt=a;
	r=rand;
}

void MaintainSequence::Maintain(Popular * p)
{
	double * seq=p->GetPop();
	int t=r->randint((int)(dimension-length));
	for(int i=t;i<t+length;i++)
	{
		for(int j=0;j<i;j++)
			if(adapt->GetDistance((int)seq[j],(int)seq[j+1])+adapt->GetDistance((int)seq[i],(int)seq[(i+1)%dimension])>adapt->GetDistance((int)seq[j],(int)seq[i])+adapt->GetDistance((int)seq[j+1],(int)seq[(i+1)%dimension]))
				for(int k=0;k<(i-j)/2;k++)
				{
					double temp=seq[i-k];
					seq[i-k]=seq[j+k+1];
					seq[j+k+1]=temp;
				}
		for(j=j+1;j<dimension;j++)
			if(adapt->GetDistance((int)seq[j],(int)seq[(j+1)%dimension])+adapt->GetDistance((int)seq[i],(int)seq[(i+1)%dimension])>adapt->GetDistance((int)seq[j],(int)seq[i])+adapt->GetDistance((int)seq[(j+1)%dimension],(int)seq[(i+1)%dimension]))
				for(int k=0;k<(j-i)/2;k++)
				{
					double temp=seq[j-k];
					seq[j-k]=seq[i+k+1];
					seq[i+k+1]=temp;
				}
	}
	p->SetPop(seq);
	delete[] seq;
}

void MaintainSequence::Maintain(double * seq)
{
	int t=r->randint((int)(dimension-length));
	for(int i=t;i<t+length;i++)
	{
		for(int j=0;j<i;j++)
			if(adapt->GetDistance((int)seq[j],(int)seq[j+1])+adapt->GetDistance((int)seq[i],(int)seq[(i+1)%dimension])>adapt->GetDistance((int)seq[j],(int)seq[i])+adapt->GetDistance((int)seq[j+1],(int)seq[(i+1)%dimension]))
				for(int k=0;k<(i-j)/2;k++)
				{
					double temp=seq[i-k];
					seq[i-k]=seq[j+k+1];
					seq[j+k+1]=temp;
				}
		for(j=j+1;j<dimension;j++)
			if(adapt->GetDistance((int)seq[j],(int)seq[(j+1)%dimension])+adapt->GetDistance((int)seq[i],(int)seq[(i+1)%dimension])>adapt->GetDistance((int)seq[j],(int)seq[i])+adapt->GetDistance((int)seq[(j+1)%dimension],(int)seq[(i+1)%dimension]))
				for(int k=0;k<(j-i)/2;k++)
				{
					double temp=seq[j-k];
					seq[j-k]=seq[i+k+1];
					seq[i+k+1]=temp;
				}
	}
}
			
MaintainSequence::~MaintainSequence()
{

}

⌨️ 快捷键说明

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