基本上我有两种基于启发式的算法。我在两个代码中都使用了一段代码。代码接收激励向量并基于该向量给出成本函数的值。代码的一部分产生激励向量。这部分对于两种算法是不同的。代码的另一部分基于激励向量计算成本函数。这部分对于两种算法都是逐字逐句的。但是,在一种算法(基于GA)中,执行该代码需要5到10秒,而在另一种算法中,相同的代码需要5分钟以上。我不明白这种巨大的差异是如何可能的。下面是具有不同执行时间的代码部分。很明显,这部分包括基本的for循环和简单的数学。所有其他数组的值都是已知的,目的是计算" CurrentInv"。
long start6 = System.currentTimeMillis();
for(int a=0;a<_invIndex;a++){
CurrentInv[a]=Invs[a];
for (int i=0; i<no1;i++){
for(int j=0;j<no1;j++){
if(i!=j){
for(int b=0; b<_destNe; b++){
if(countOD[i][j]>0){
if(i==b){
if(j==a){
CurrentInv[a]=CurrentInv[a]+onlyBike[i][j][0][(int)nSizeO[i][j]+1]*countOD[i][j]*x[i][j][0][(int)nSizeO[i][j]+1];
}
}}
if(countOD[i][j]>0){
if(nSizeO[i][j]!=0){
for(int k=1; k<(int)nSizeO[i][j]+1; k++){
if( jaggedO[i][j][k-1]==b){
if( j==a){
CurrentInv[a]=CurrentInv[a]+onlyBike[i][j][k][(int)nSizeO[i][j]+1]*countOD[i][j]*x[i][j][k][(int)nSizeO[i][j]+1];
}
}
}
}
if(nSizeD[i][j]!=0){
for(int d=(int)nSizeO[i][j]+2; d<(int)nSizeD[i][j]+(int)nSizeO[i][j]+2; d++){
if( jaggedD[i][j][d-(int)nSizeO[i][j]-2]==b){
if( j==a){
CurrentInv[a]=CurrentInv[a]+onlyBike[i][j][d][(int)nSizeO[i][j]+1]*countOD[i][j]*x[i][j][d][(int)nSizeO[i][j]+1];
}
}
}
}
if( i==b){
if(nSizeD[i][j]!=0){
for(int d=(int)nSizeO[i][j]+2; d<(int)nSizeD[i][j]+(int)nSizeO[i][j]+2; d++){
if( jaggedD[i][j][d-(int)nSizeO[i][j]-2]==a){
CurrentInv[a]=CurrentInv[a]+onlyBike[i][j][0][d]*countOD[i][j]*x[i][j][0][d];
}}
}}
if(nSizeO[i][j]!=0){
for(int k=1; k<(int)nSizeO[i][j]+1; k++){
if( jaggedO[i][j][k-1]==b){
if(nSizeD[i][j]!=0){
for(int d=(int)nSizeO[i][j]+2; d<(int)nSizeD[i][j]+(int)nSizeO[i][j]+2; d++){
if( jaggedD[i][j][d-(int)nSizeO[i][j]-2]==a){
CurrentInv[a]=CurrentInv[a]+onlyBike[i][j][k][d]*countOD[i][j]*x[i][j][k][d];
}}}
}
}
}
//countOD2[a][b]=countOD[i][j];
if(i==a){
if(j==b){
CurrentInv[a]=CurrentInv[a]-onlyBike[i][j][0][(int)nSizeO[i][j]+1]*countOD[i][j]*x[i][j][0][(int)nSizeO[i][j]+1];
}
}
if( i==a){
if(nSizeO[i][j]!=0){
for(int k=1; k<(int)nSizeO[i][j]+1; k++){
if( jaggedO[i][j][k-1]==b){
CurrentInv[a]=CurrentInv[a]-onlyBike[i][j][0][k]*countOD[i][j]*x[i][j][0][k];
}}}}
if( i==a){
if(nSizeD[i][j]!=0){
for(int d=(int)nSizeO[i][j]+2; d<(int)nSizeD[i][j]+(int)nSizeO[i][j]+2; d++){
if( jaggedD[i][j][d-(int)nSizeO[i][j]-2]==b){
CurrentInv[a]=CurrentInv[a]-onlyBike[i][j][0][d]*countOD[i][j]*x[i][j][0][d];
}}}}
//countOD2[a][b]=countOD[i][j];
if(nSizeO[i][j]!=0){
for(int k=1; k<(int)nSizeO[i][j]+1; k++){
if( jaggedO[i][j][k-1]==a){
if(nSizeD[i][j]!=0){
for(int d=(int)nSizeO[i][j]+2; d<(int)nSizeD[i][j]+(int)nSizeO[i][j]+2; d++){
if( jaggedD[i][j][d-(int)nSizeO[i][j]-2]==b){
CurrentInv[a]=CurrentInv[a]-onlyBike[i][j][k][d]*countOD[i][j]*x[i][j][k][d];
}}}
}
}
}
//countOD2[a][b]=countOD[i][j];
if(nSizeO[i][j]!=0){
for(int k=1; k<(int)nSizeO[i][j]+1; k++){
if( jaggedO[i][j][k-1]==a){
if( j==b){
CurrentInv[a]=CurrentInv[a]-onlyBike[i][j][k][(int)nSizeO[i][j]+1]*countOD[i][j]*x[i][j][k][(int)nSizeO[i][j]+1];
}
}
}
}
}
}
}
}
}
}
long end6 = System.currentTimeMillis();
_solutiontime = (end6 - start6);
System.out.println(" currentinvtime: "+_solutiontime);