📄 speedtspinsert.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 + -