📄 speedtsplocation6.cpp
字号:
}
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;
delete[] iProportion;
delete[] lProportion;
delete[] sProportion;
}
void SpeedTSPLocation6::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 SpeedTSPLocation6::GetIProportion(double * l,double * ip)
{
for(int i=0;i<dimension-1;i++)
ip[(int)l[i]]=Proportion[(int)l[i]][(int)l[i+1]];
ip[(int)l[dimension-1]]=Proportion[(int)l[dimension-1]][(int)l[0]];
}
void SpeedTSPLocation6::GetMaxProportion(double * op,double * lp,double * p,double * m)
{
*m=0;
double temp=0;
for(int i=0;i<dimension;i++)
{
p[i]=op[i]-lp[i];
*m+=p[i];
if(p[i]<temp)
temp=p[i];
}
*m+=(-1)*temp*dimension;
for(i=0;i<dimension;i++)
p[i]-=temp;
}
int SpeedTSPLocation6::SelCity(double * p,double mp,Rand * r)
{
int i;
double ptemp=r->random(1);
ptemp*=mp;
i=r->randint(dimension);
while(ptemp>0)
{
ptemp=ptemp-p[i];
i=(i+1)%dimension;
}
return((i-1+dimension)%dimension);
}
SpeedTSPLocation6::~SpeedTSPLocation6()
{
for(int i=0;i<dimension;i++)
delete[] Proportion[i];
delete[] Proportion;
delete[] gProportion;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -