📄 speedtsplocation5.cpp
字号:
{
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 + -