Java中相同的代码片段在两个程序中的时间差异很大?

时间:2014-07-03 15:16:10

标签: java algorithm runtime genetic-algorithm execution-time

基本上我有两种基于启发式的算法。我在两个代码中都使用了一段代码。代码接收激励向量并基于该向量给出成本函数的值。代码的一部分产生激励向量。这部分对于两种算法是不同的。代码的另一部分基于激励向量计算成本函数。这部分对于两种算法都是逐字逐句的。但是,在一种算法(基于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);

0 个答案:

没有答案