📄 nextactiontsp.cpp
字号:
// NextActionTsp.cpp: implementation of the NextActionTsp class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "NextActionTsp.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
NextActionTsp::NextActionTsp(Ant * * a,RouteInfo * r,UpdateInfo * u,int s,int d,double ed,double ep):NextAction(a,r,u,s,d,ed,ep)
{
}
void NextActionTsp::NewRoute(Rand * rand)
{
double * temp=new double[dimension];
int * s=new int[dimension];
double * prop=new double[dimension];
double p;
for(int i=0;i<scale;i++)
{
for(int j=0;j<dimension;j++)
s[j]=0;
temp[0]=rand->randint(dimension);
s[(int)temp[0]]=1;
for(j=1;j<dimension;j++)
{
// FILE * f;
// f=fopen("2.zn","w");
p=0;
for(int k=0;k<dimension;k++)
{
prop[k]=0;
if(s[k]!=1)
{
prop[k]=proportion[(int)temp[j-1]][k];
p=p+proportion[(int)temp[j-1]][k];
}
// fprintf(f,"%f \n",prop[k]);
}
double mm=rand->random(p);
// fprintf(f,"%f \n",mm);
k=0;
do
{
mm=mm-prop[k];
k++;
}while((mm>0)||(prop[k-1]==0));
// fprintf(f,"%d \n",k);
temp[j]=k-1;
s[k-1]=1;//fclose(f);
}
antcolony[i]->SetRoute(temp);
double temp=antcolony[i]->GetAdaptation();
if(gb<temp)
gb=temp;
}
delete[] temp;
delete[] s;
delete[] prop;
}
void NextActionTsp::InitProportion()
{
double a,b;
double c=rinfo->GetMaxDist();
// FILE * f;
// f=fopen("2.zn","w");
// fprintf(f,"%f \n",c);
for(int i=0;i<dimension;i++)
{
for(int j=0;j<dimension;j++)
{
if(i<j)
{
a=c/rinfo->GetDistance(i,j);
b=rinfo->GetPheromone(i,j);
a=pow(a,expd);
b=pow(b,expp);
proportion[i][j]=a*b;
}
if(i==j)
proportion[i][j]=0;
if(i>j)
proportion[i][j]=proportion[j][i];
// fprintf(f,"%f ",proportion[i][j]);
}
// fprintf(f,"\n");
}//fclose(f);
}
NextActionTsp::~NextActionTsp()
{
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -