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

📄 speedtsplocation5.cpp

📁 c++语言实现的遗传算法的例子,需要的快下啊
💻 CPP
📖 第 1 页 / 共 2 页
字号:
				{
					n_s_location[(int)i_optim[p1]][0]=(int)i_optim[(p1+1)%dimension];
					n_s_location[(int)i_optim[(p1+1)%dimension]][1]=(int)i_optim[p1];
					newspeed[newlength][1]=(int)i_optim[p1];
					newspeed[newlength][0]=(int)i_optim[(p1+1)%dimension];
					newlength++;
				}
				else
				{
					int m;
					if(fitness->GetDistance(n_s_location[(int)i_optim[(p1+1)%dimension]][0],(int)i_optim[(p1+1)%dimension])>fitness->GetDistance(n_s_location[(int)i_optim[(p1+1)%dimension]][1],(int)i_optim[(p1+1)%dimension]))
						m=0;
					else
						m=1;
					if(fitness->GetDistance(n_s_location[(int)i_optim[(p1+1)%dimension]][m],(int)i_optim[(p1+1)%dimension])>fitness->GetDistance((int)i_optim[(p1+1)%dimension],(int)i_optim[p1]))
					{
						for(int k=0;k<newlength;k++)
						{
							if((int)i_optim[(p1+1)%dimension]==newspeed[k][0])
								if(n_s_location[(int)i_optim[(p1+1)%dimension]][m]==newspeed[k][1])
								{
									newspeed[k][1]=(int)i_optim[p1];
									break;
								}
							if((int)i_optim[(p1+1)%dimension]==newspeed[k][1])
								if(n_s_location[(int)i_optim[(p1+1)%dimension]][m]==newspeed[k][0])
								{
									newspeed[k][0]=(int)i_optim[p1];
									break;
								}
						}
					}
					else
					{
						if(n_s_location[(int)i_optim[(p1-1+dimension)%dimension]][0]==-1)
						{
							n_s_location[(int)i_optim[p1]][0]=(int)i_optim[(p1-1+dimension)%dimension];
							n_s_location[(int)i_optim[(p1-1+dimension)%dimension]][0]=(int)i_optim[p1];
							newspeed[newlength][0]=(int)i_optim[p1];
							newspeed[newlength][1]=(int)i_optim[(p1-1+dimension)%dimension];
							newlength++;
						}
						else
							if(n_s_location[(int)i_optim[(p1-1+dimension)%dimension]][1]==-1)
							{
								n_s_location[(int)i_optim[p1]][0]=(int)i_optim[(p1-1+dimension)%dimension];
								n_s_location[(int)i_optim[(p1-1+dimension)%dimension]][1]=(int)i_optim[p1];
								newspeed[newlength][0]=(int)i_optim[p1];
								newspeed[newlength][1]=(int)i_optim[(p1-1+dimension)%dimension];
								newlength++;
							}
							else
							{
								int m;
								if(fitness->GetDistance(n_s_location[(int)i_optim[(p1-1+dimension)%dimension]][0],(int)i_optim[(p1-1+dimension)%dimension])>fitness->GetDistance(n_s_location[(int)i_optim[(p1-1+dimension)%dimension]][1],(int)i_optim[(p1-1+dimension)%dimension]))
									m=0;
								else
									m=1;
								if(fitness->GetDistance(n_s_location[(int)i_optim[(p1-1+dimension)%dimension]][m],(int)i_optim[(p1-1+dimension)%dimension])>fitness->GetDistance((int)i_optim[(p1-1+dimension)%dimension],(int)i_optim[p1]))
								{
									for(int k=0;k<newlength;k++)
									{
										if((int)i_optim[(p1-1+dimension)%dimension]==newspeed[k][0])
											if(n_s_location[(int)i_optim[(p1-1+dimension)%dimension]][m]==newspeed[k][1])
											{
												newspeed[k][1]=(int)i_optim[p1];
												break;
											}
										if((int)i_optim[(p1-1+dimension)%dimension]==newspeed[k][1])
											if(n_s_location[(int)i_optim[(p1-1+dimension)%dimension]][m]==newspeed[k][0])
											{
												newspeed[k][0]=(int)i_optim[p1];
												break;
											}
									}
								}
							}
					}
				}
			}
		}
	}
	//////////////
//		fprintf(ftemp2,"\n");
//		fclose(ftemp2);
///////////////

	for(j=0;j<length;j++)							//从原有速度中选取
	{
		if(newlength>=dimension*E3)
			break;
		if((n_s_location[speed[j][0]][0]>=0))
		{
			if(n_s_location[speed[j][0]][1]<0)
			{
				if(n_s_location[speed[j][0]][0]!=speed[j][1])
				{
					if(n_s_location[speed[j][1]][0]==-1)
					{
						n_s_location[speed[j][0]][1]=speed[j][1];
						n_s_location[speed[j][1]][0]=speed[j][0];
						newspeed[newlength][1]=speed[j][0];
						newspeed[newlength][0]=speed[j][1];
						newlength++;
					}
					else
						if(n_s_location[speed[j][1]][1]==-1)
						{
							n_s_location[speed[j][0]][1]=speed[j][1];
							n_s_location[speed[j][1]][1]=speed[j][0];
							newspeed[newlength][1]=speed[j][0];
							newspeed[newlength][0]=speed[j][1];
							newlength++;
						}
						else
						{
							int m;
							if(fitness->GetDistance(n_s_location[speed[j][1]][0],speed[j][1])>fitness->GetDistance(n_s_location[speed[j][1]][1],speed[j][1]))
								m=0;
							else
								m=1;
							if(fitness->GetDistance(n_s_location[speed[j][1]][m],speed[j][1])>fitness->GetDistance(speed[j][1],speed[j][0]))
							{
								for(int k=0;k<newlength;k++)
								{
									if(speed[j][1]==newspeed[k][0])
										if(n_s_location[speed[j][1]][m]==newspeed[k][1])
											{
												newspeed[k][1]=speed[j][0];
												break;
											}
									if(speed[j][1]==newspeed[k][1])
										if(n_s_location[speed[j][1]][m]==newspeed[k][0])
										{
											newspeed[k][0]=speed[j][0];
											break;
										}
								}
							}
						}
				}
			}
			else
			{
				int m;
				if(fitness->GetDistance(n_s_location[speed[j][0]][0],speed[j][0])>fitness->GetDistance(n_s_location[speed[j][0]][1],speed[j][0]))
					m=0;
				else
					m=1;
				if(fitness->GetDistance(n_s_location[speed[j][0]][m],speed[j][0])>fitness->GetDistance(speed[j][0],speed[j][1]))
				{
					for(int k=0;k<newlength;k++)
					{
						if(speed[j][0]==newspeed[k][0])
							if(n_s_location[speed[j][0]][m]==newspeed[k][1])
							{
								newspeed[k][1]=speed[j][1];
								break;
							}
						if(speed[j][0]==newspeed[k][1])
							if(n_s_location[speed[j][0]][m]==newspeed[k][0])
							{
								newspeed[k][0]=speed[j][1];
								break;
							}
					}
				}
			}
		}
		else
		{
			if(n_s_location[speed[j][1]][0]==-1)
			{
				n_s_location[speed[j][0]][0]=speed[j][1];
				n_s_location[speed[j][1]][0]=speed[j][0];
				newspeed[newlength][1]=speed[j][0];
				newspeed[newlength][0]=speed[j][1];
				newlength++;
			}
			else
				if(n_s_location[speed[j][1]][1]==-1)
				{
					n_s_location[speed[j][0]][0]=speed[j][1];
					n_s_location[speed[j][1]][1]=speed[j][0];
					newspeed[newlength][1]=speed[j][0];
					newspeed[newlength][0]=speed[j][1];
					newlength++;
				}
				else
				{
					int m;
					if(fitness->GetDistance(n_s_location[speed[j][1]][0],speed[j][1])>fitness->GetDistance(n_s_location[speed[j][1]][1],speed[j][1]))
						m=0;
					else
						m=1;
					if(fitness->GetDistance(n_s_location[speed[j][1]][m],speed[j][1])>fitness->GetDistance(speed[j][1],speed[j][0]))
					{
						for(int k=0;k<newlength;k++)
						{
							if(speed[j][1]==newspeed[k][0])
								if(n_s_location[speed[j][1]][m]==newspeed[k][1])
								{
									newspeed[k][1]=speed[j][0];
									break;
										}
							if(speed[j][1]==newspeed[k][1])
								if(n_s_location[speed[j][1]][m]==newspeed[k][0])
								{
									newspeed[k][0]=speed[j][0];
									break;
								}
						}
					}
				}
		}
	}

	sworm[i]->SetSpeed(newspeed,newlength);

	for(j=0;j<dimension;j++)
		delete[] n_s_location[j];
	delete[] n_s_location;
	for(j=0;j<length;j++)
	{
		delete[] speed[j];
	}
	for(j=0;j<dimension;j++)
	{
		delete[] newspeed[j];
	}
	delete[] speed;
	delete[] newspeed;
//	delete[] location;
//	delete[] location1;
	delete[] i_optim;
	delete[] g_optim;
}

void SpeedTSPLocation5::GetProportion(double * * g_p)
{
	double * * temp=new double *[dimension];
	for(int i=0;i<dimension;i++)
	{
		temp[i]=new double[dimension];
		for(int j=0;j<dimension;j++)
			temp[i][j]=0;
	}
	for(i=0;i<dimension;i++)
	{
		for(int j=0;j<dimension;j++)
		{
			if(i!=j)
			{
				temp[i][j]=fitness->GetDistance(i,j);
				for(int k=0;k<j;k++)
					if(i!=k)
						if(temp[i][k]<temp[i][j])
						{
							g_p[i][k]++;
						}
						else
							if(temp[i][k]>temp[i][j])
							{
								g_p[i][j]++;
							}
							else
							{
								g_p[i][j]+=0.5;
								g_p[i][k]+=0.5;
							}
				g_p[i][j]++;
			}
		}
	}
/////////////////////////////////////////////////////////////////////////
/*	FILE * ftemp=fopen("2.zn","w");

		fprintf(ftemp,"paixu:\n");
		for(i=0;i<dimension;i++)
		{
			for(int j=0;j<dimension;j++)
			{
				fprintf(ftemp,"%2.f    ",g_p[i][j]);
			}
			fprintf(ftemp,"\n");
		}
//		fprintf(ftemp,"\n");

//		fprintf(ftemp,"个体最优位置:");
//		fprintf(ftemp,"\n");

		fclose(ftemp);*/
/////////////////////////////////////////////////////////////////////////////

}

void SpeedTSPLocation5::GetMaxProportion(double * l,double * m)
{
	*m=0;
	for(int i=0;i<dimension-1;i++)
		*m+=gProportion[(int)l[i]][(int)l[i+1]];
	*m+=gProportion[(int)l[dimension-1]][(int)l[0]];
}

int SpeedTSPLocation5::SelCity(double * l,double mp,Rand * r)
{
	int i;
	double ptemp=r->random(1);
	ptemp*=mp;
	i=r->randint(dimension);
	while(ptemp>0)
	{
		ptemp=ptemp-gProportion[(int)l[i]][(int)l[i+1]];
		i=(i+1)%dimension;
	}
	return((i-1+dimension)%dimension);
}

SpeedTSPLocation5::~SpeedTSPLocation5()
{

}

⌨️ 快捷键说明

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