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

📄 speedtsplocation4.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][0]=(int)i_optim[p1];
					newspeed[newlength][1]=(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][0]=(int)i_optim[(p1+1)%dimension];
									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+1)%dimension];
									newspeed[k][1]=(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][0]=(int)i_optim[(p1-1+dimension)%dimension];
												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-1+dimension)%dimension];
												newspeed[k][1]=(int)i_optim[p1];
												break;
											}
									}
								}
							}
					}
				}
			}
		}
	}

	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][0]=speed[j][0];
						newspeed[newlength][1]=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][0]=speed[j][0];
							newspeed[newlength][1]=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][0]=speed[j][0];
												newspeed[k][1]=speed[j][1];
												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];
											newspeed[k][1]=speed[j][1];
											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][0]=speed[j][0];
									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][0];
								newspeed[k][1]=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][0]=speed[j][0];
				newspeed[newlength][1]=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][0]=speed[j][0];
					newspeed[newlength][1]=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][0]=speed[j][0];
									newspeed[k][1]=speed[j][1];
									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];
									newspeed[k][1]=speed[j][1];
									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;
	delete[] iProportion;
}

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

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

		fprintf(ftemp,"个体最优位置:");
		for(j=0;j<dimension;j++)
		{
			fprintf(ftemp,"%f    ",i_optim[j]);
		}
		fprintf(ftemp,"\n");

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

}

int SpeedTSPLocation4::SelCity(double * p,Rand * r)
{
	int i;
	double ptemp=r->random(1.0);
	ptemp=ptemp*(1+dimension)*dimension/2;
	i=r->randint(dimension);
	while(ptemp>0)
	{
		ptemp=ptemp-p[i];
		i=(i+1)%dimension;
	}
/*	for(i=0;i<dimension;i++)
		if((ptemp=ptemp-p[i]*p[i])<0)
			break;*/
	return(i);
}

SpeedTSPLocation4::~SpeedTSPLocation4()
{
	delete[] gProportion;
}

⌨️ 快捷键说明

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