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

📄 speedtspinsert.cpp

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

#include "stdafx.h"
#include "SpeedTSPInsert.h"

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

SpeedTSPInsert::SpeedTSPInsert(int d,double e1,double e2,double e3,int g,int s):SpeedTSP(d,e1,e2,e3)
{
	maxgen=g;
	scale=s;
}

void SpeedTSPInsert::NewSpeed(ParticleTSP * * sworm,int i,int pmax,Rand * rand,int gen)
{
	int * * speed=sworm[i]->GetSpeed();
	int length=sworm[i]->GetSL();
	double * location=sworm[i]->GetLocation();
	double * location1=sworm[i]->GetLocation();
	double * i_optim=sworm[i]->GetIOL();
	double * g_optim;
	struct twain
	{
		double dui[2];
		struct twain * next;
	};
	if(rand->random(1)<gen/maxgen)
		g_optim=sworm[pmax]->GetIOL();
	else
	{
		int temp=rand->randint(scale);
		while(temp==i||temp==pmax)
			temp=rand->randint(scale);
		g_optim=sworm[temp]->GetIOL();
	}
	struct twain * newspeed=new struct twain;
	struct twain * point=newspeed;
//	for(int j=0;j<3*dimension;j++)
//		newspeed[j]=new int[2];
	int newlength=0;
	double p;
//	FILE * file ;
//	file=fopen("2.zn","w");
	for(int j=0;j<length;j++)
	{
		p=rand->random(1);
		if(p<E1)
		{
			point->dui[0]=speed[j][0];
			point->dui[1]=speed[j][1];
//		fprintf(file,"%d    %d    %d\n",newlength,point->dui[0],point->dui[1]);
			point->next=new struct twain;
			point=point->next;
			newlength++;
		}
	}
	double p1=rand->random(1);
	double p2=rand->random(1);
	for(j=0;j<dimension;j++)
	{
		if(i_optim[j]!=location[j])
		{
			int i=j+1;
			while((int)i_optim[j]!=(int)location[i])
				i++;
			for(int k=i;k>j;k--)
			{
				double temp=location[k];
				location[k]=location[k-1];
				location[k-1]=temp;
			}
			p=rand->random(1);
			if(p<p1)
			{
				point->dui[0]=i;
				point->dui[1]=j;
//		fprintf(file,"%d    %d    %d\n",newlength,point->dui[0],point->dui[1]);
				point->next=new struct twain;
				point=point->next;
				newlength++;
			}
		}
	}
	for(j=0;j<dimension;j++)
	{
		if(g_optim[j]!=location1[j])
		{
			int i=j+1;
			while((int)g_optim[j]!=(int)location1[i])
				i++;
			for(int k=i;k>j;k--)
			{
				double temp=location1[k];
				location1[k]=location1[k-1];
				location1[k-1]=temp;
			}
			p=rand->random(1);
			if(p<p2)
			{
				point->dui[0]=i;
				point->dui[1]=j;
//		fprintf(file,"%d    %d    %d\n",newlength,point->dui[0],point->dui[1]);
				point->next=new struct twain;
				point=point->next;
				newlength++;
			}
		}
	}
	point=newspeed;
	int * * newspeed2=new int *[newlength];
	for(j=0;j<newlength;j++)
	{
		newspeed2[j]=new int[2];
		newspeed2[j][0]=point->dui[0];
		newspeed2[j][1]=point->dui[1];
		point=point->next;
	}
//	fclose(file);
	sworm[i]->SetSpeed(newspeed2,newlength);
	for(j=0;j<length;j++)
	{
		delete[] speed[j];
	}
	for(j=0;j<=newlength;j++)
	{
		point=newspeed->next;
		delete[] newspeed;
		newspeed=point;
	}
	for(j=0;j<newlength;j++)
	{
		delete[] newspeed2[j];
	}
	delete[] speed;
	delete[] newspeed2;
	delete[] location;
	delete[] location1;
	delete[] i_optim;
	delete[] g_optim;
}

SpeedTSPInsert::~SpeedTSPInsert()
{

}

⌨️ 快捷键说明

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