展會(huì)信息港展會(huì)大全

基于遺傳算法的蟻群優(yōu)化算法
來(lái)源:互聯(lián)網(wǎng)   發(fā)布日期:2011-10-01 11:45:11   瀏覽:125824次  

導(dǎo)讀:基于遺傳算法的蟻群優(yōu)化算法_奔跑_新浪博客,奔跑,...

基于遺傳算法的蟻群優(yōu)化算法 (2010-10-24 15:35:32)

標(biāo)簽: 遺傳算法 蟻群算法 qos web服務(wù)選擇 混合智能 雜談 分類(lèi): 技術(shù)

遺傳算法有一個(gè)最大的特點(diǎn)就是能狗進(jìn)行快速的全局搜索,所以遺傳算法收斂速度快,進(jìn)化時(shí)間段,但是遺傳算法沒(méi)有正反饋和負(fù)反饋機(jī)制,以至于遺傳算法在進(jìn)行金華市有很長(zhǎng)時(shí)間都只在做無(wú)用的進(jìn)化和驗(yàn)算。蟻群算法具有正反饋機(jī)制,能夠機(jī)制的將進(jìn)化的信息反饋到下一輪的進(jìn)化中,但是缺點(diǎn)就是收斂速度慢,而且全局搜索能力較差,如果將這兩種進(jìn)化算法結(jié)合寄來(lái)既能夠使用遺傳算法的全局搜索能力又能夠使用蟻群算法的正反饋機(jī)制,是否可惜呢?

答案是肯定的。

一般情況下,遺傳和蟻群的混合分為兩種情況,一種是以遺傳為主題的算法,另一種是以蟻群算法為主體的算法,博主正在做Web服務(wù)選擇的問(wèn)題,所以想到了使用這種混合的算法去解決打過(guò)摸得Web服務(wù)選擇問(wèn)題,因?yàn)橄伻核惴ㄖ械腶lpha、beta和rou直接影響到轉(zhuǎn)移galveston和下一步贏得進(jìn)化情況,所以這三個(gè)參數(shù)的選取顯得至關(guān)重要,在傳統(tǒng)的蟻群算法中,這三個(gè)參數(shù)的選區(qū)是依照經(jīng)驗(yàn)的,沒(méi)有什么精確地方法去確定這三個(gè)值,博主使用遺傳算法去優(yōu)化者三個(gè)參數(shù),取得了Web服務(wù)選擇問(wèn)題中的優(yōu)良效果,下面是博主的算法源程序和效果對(duì)比圖:

package gaaca;

import java.text.DecimalFormat;
import java.util.Random;

 


public class GAACASelect {

 
 public static int var_num=3;//帶求解的變量個(gè)數(shù)
 public static double alpha_Max=2.0;//蟻群算法中啟發(fā)因子alpha的最大值,值區(qū)間(1.0,4.0]
 public static double beta_Max=4.0;//蟻群算法中期望因子beta的最大值,值區(qū)間(1.0,4.0]
 public static double rou_Max=0.01;//蟻群算法中揮發(fā)rou的最大值,值區(qū)間(0.0,1.0)
 public static int popution=10;//遺傳算法中,種群大小
 public static String []pop=new String[popution];//存儲(chǔ)染色體的編碼
 public static double []var_value=new double[3];//在解碼時(shí)存儲(chǔ)變量的值
 public static double [][]initpop=new double[var_num][popution];//存儲(chǔ)種群的初始化值
 public static double [][]result=new double[var_num][popution];//種群代表的結(jié)果
 public static double []fitness=new double[popution];//用于存儲(chǔ)染色體的適應(yīng)度值
 public static double []best_var=new double[3];//存儲(chǔ)最優(yōu)組合
 public static double pc=0.35;//交叉概率
 public static double pm=0.08;//變異概率
 public static Random random=new Random();//程序中所有隨機(jī)數(shù)都由它產(chǎn)生
    public static double[]p=new double[popution];//輪盤(pán)賭方法個(gè)體適應(yīng)度概率(按比例的適應(yīng)度分配)選擇概率
    public static double[]q=new double[popution];//q[i]是前n項(xiàng)p之和(累積概率)
 public static int[][]class1={//服務(wù)類(lèi)1的決策矩陣
     {12 ,16 ,12 ,15 ,15 ,11 ,17 ,16 ,20 ,7 },
     {6 ,21 ,3 ,16 ,22 ,9 ,9 ,20 ,22 ,4 },
     {6 ,9 ,3 ,5 ,15 ,15 ,18 ,11 ,15 ,5 },
     {6 ,21 ,16 ,4 ,16 ,19 ,11 ,17 ,19 ,5 },
     {8 ,11 ,18 ,18 ,21 ,4 ,15 ,6 ,22 ,6 }
     };
 public static int[][]class2={//服務(wù)類(lèi)2的決策矩陣
     {9 ,9 ,17 ,12 ,21 ,12 ,22 ,9 ,21 ,9 ,7 ,20 ,3 ,14 ,6 ,5 ,21 ,14 ,16 ,19 },
     {3 ,21 ,9 ,4 ,3 ,8 ,5 ,6 ,4 ,7 ,8 ,11 ,18 ,8 ,15 ,19 ,17 ,4 ,3 ,7 },
     {17 ,6 ,12 ,6 ,19 ,20 ,18 ,19 ,19 ,11 ,4 ,16 ,22 ,3 ,19 ,18 ,6 ,3 ,17 ,11 },
     {8 ,15 ,12 ,7 ,5 ,7 ,17 ,16 ,19 ,5 ,18 ,16 ,4 ,8 ,13 ,8 ,17 ,3 ,14 ,21 },
     {9 ,21 ,17 ,19 ,12 ,3 ,12 ,11 ,3 ,9 ,20 ,19 ,5 ,6 ,20 ,6 ,8 ,22 ,14 ,6 }
     };
    public static int[][] class3={//服務(wù)類(lèi)3的決策矩陣
     {8 ,19 ,4 ,3 ,19 ,22 ,11 ,9 ,18 ,11 ,14 ,18 ,14 ,21 ,15 ,13 ,14 ,18 ,19 ,9 ,21 ,16 ,16 ,5 ,21 ,4 ,12 ,22 ,12 ,18 },
     {22 ,11 ,11 ,16 ,7 ,13 ,21 ,15 ,16 ,5 ,13 ,7 ,15 ,14 ,9 ,12 ,12 ,7 ,6 ,17 ,7 ,22 ,21 ,6 ,3 ,16 ,13 ,7 ,5 ,5 },
     {6 ,6 ,7 ,5 ,10 ,19 ,4 ,21 ,6 ,22 ,22 ,20 ,22 ,18 ,4 ,14 ,7 ,22 ,14 ,22 ,17 ,17 ,6 ,4 ,9 ,4 ,17 ,17 ,3 ,10 },
     {3 ,7 ,5 ,4 ,8 ,6 ,17 ,7 ,4 ,13 ,14 ,3 ,9 ,15 ,7 ,16 ,8 ,14 ,16 ,20 ,14 ,5 ,21 ,3 ,18 ,14 ,17 ,22 ,13 ,7 },
     {16 ,11 ,6 ,18 ,13 ,15 ,8 ,9 ,4 ,14 ,13 ,16 ,4 ,19 ,4 ,22 ,13 ,12 ,15 ,10 ,20 ,13 ,20 ,21 ,12 ,18 ,10 ,22 ,21 ,8 }
     };
    public static int[][]class4={//服務(wù)類(lèi)4的決策矩陣
     {14 ,20 ,20 ,18 ,17 ,14 ,8 ,3 ,15 ,12 ,20 ,5 ,18 ,10 ,7 ,3 ,22 ,7 ,12 ,22 ,11 ,15 ,22 ,4 ,7 ,12 ,7 ,7 ,18 ,14 ,19 ,17 ,14 ,10 ,22 ,9 ,10 ,22 ,3 ,16 },
     {15 ,7 ,6 ,18 ,14 ,20 ,13 ,16 ,6 ,7 ,3 ,11 ,6 ,18 ,17 ,18 ,3 ,8 ,5 ,4 ,19 ,5 ,22 ,13 ,3 ,16 ,10 ,21 ,15 ,17 ,12 ,4 ,15 ,4 ,9 ,5 ,7 ,13 ,14 ,8 },
     {20 ,21 ,20 ,22 ,22 ,9 ,9 ,13 ,13 ,14 ,3 ,21 ,20 ,14 ,9 ,15 ,11 ,3 ,3 ,5 ,4 ,22 ,3 ,11 ,17 ,22 ,3 ,17 ,20 ,6 ,5 ,5 ,19 ,17 ,9 ,19 ,13 ,17 ,3 ,9 },
     {11 ,4 ,21 ,21 ,8 ,12 ,5 ,4 ,18 ,18 ,20 ,17 ,14 ,18 ,15 ,17 ,11 ,13 ,6 ,22 ,12 ,11 ,7 ,6 ,8 ,3 ,9 ,7 ,10 ,14 ,21 ,5 ,7 ,13 ,11 ,21 ,8 ,4 ,22 ,14 },
     {14 ,20 ,11 ,13 ,4 ,4 ,20 ,5 ,18 ,21 ,4 ,17 ,4 ,11 ,15 ,22 ,11 ,20 ,16 ,10 ,18 ,7 ,11 ,11 ,10 ,21 ,13 ,12 ,22 ,22 ,3 ,17 ,5 ,19 ,3 ,19 ,6 ,17 ,7 ,21 }
     };
    public static int antcount=3;//螞蟻數(shù)量
    public static double initpheromone=0.1;//初始信息素濃度素
    public static int num[]={class1[0].length,class2[0].length,class3[0].length,class4[0].length};//用于簡(jiǎn)化記錄每個(gè)服務(wù)類(lèi)中原子服務(wù)的個(gè)數(shù)
    public static double [][]tao01=new double[1][num[0]];//開(kāi)始結(jié)點(diǎn)與1#服務(wù)類(lèi)之間的信息素矩陣
    public static double [][]tao12=new double[num[0]][num[1]];//1#服務(wù)類(lèi)與2#服務(wù)類(lèi)之間的信息素矩陣
    public static double [][]tao23=new double[num[1]][num[2]];//2#服務(wù)類(lèi)與3#服務(wù)類(lèi)之間的信息素矩陣
    public static double [][]tao34=new double[num[2]][num[3]];//3#服務(wù)類(lèi)與4#服務(wù)類(lèi)之間的信息素矩陣
    public static Ants []ants=new Ants[antcount];//螞蟻
    //public static double rou=0.001;//信息素?fù)]發(fā)因子
    public static double Q=0.1;//信息素強(qiáng)度
    public static double bestlength;//初始的最優(yōu)路徑長(zhǎng)度
    public static int []bestpath={0,0,0,0};//用于記錄最優(yōu)路徑
    public static int generation;//發(fā)現(xiàn)最優(yōu)解的迭代次數(shù)
    public static long time;//進(jìn)化耗時(shí)
    public static long endtime;
    public static DecimalFormat df=new DecimalFormat("0.00000");//double型數(shù)據(jù)的精度控制
 public static double[][] initpopution(){//遺傳算法初始化種群,產(chǎn)生隨機(jī)的alph beta和rou
  
  for(int i=0;i<popution;i++){
   initpop[0][i]=Double.parseDouble(df.format(Math.random()*alpha_Max));
   initpop[1][i]=Double.parseDouble(df.format(Math.random()*beta_Max));
   initpop[2][i]=Double.parseDouble(df.format(Math.random()*rou_Max));
  }
  return initpop;
 }
 public GAACASelect(double [][]initpop){
  for(int i=0;i<var_num;i++){
   for(int j=0;j<popution;j++){
    result[i][j]=initpop[i][j];
   }
  }
 }
 public static void init() {//蟻群算法,參數(shù)初始化
  // TODO Auto-generated method stub
  for(int i=0;i<num[0];i++){
   tao01[0][i]=initpheromone;
  }
  for(int i=0;i<num[0];i++){
   for(int j=0;j<num[1];j++){
    tao12[i][j]=initpheromone;
   }
  }
  for(int i=0;i<num[1];i++){
   for(int j=0;j<num[2];j++){
    tao23[i][j]=initpheromone;
   }
  }
  for(int i=0;i<num[2];i++){
   for(int j=0;j<num[3];j++){
    tao34[i][j]=initpheromone;
   }
  }
  for(int i=0;i<antcount;i++){
   ants[i]=new Ants();
   for(int j=0;j<5;j++){ 
    ants[i].path[j]=0;
   }
  }
   bestlength=Integer.MAX_VALUE;
   generation=0;
   time=0;
 }
 
 public static void fitness(int evolutionnum) {//蟻群主體程序運(yùn)行
  
  System.out.println("第"+evolutionnum+"代--->");
  for(int i=0;i<popution;i++){
   double localbestpathlength=100000.0;
   for(int j=0;j<antcount;j++){
    //每一只螞蟻的移動(dòng)
    ants[j].path[0]=0;
    ants[j].path[1]=ants[j].selectNextService(1,tao01,0,result[0][i],result[1][i]);//從第1個(gè)服務(wù)類(lèi)中選擇選擇
    ants[j].path[2]=ants[j].selectNextService(2,tao12,ants[j].path[1],result[0][i],result[1][i]);//從第2個(gè)服務(wù)類(lèi)中選擇選擇
    ants[j].path[3]=ants[j].selectNextService(3,tao23,ants[j].path[2],result[0][i],result[1][i]);//從第3個(gè)服務(wù)類(lèi)中選擇選擇
    ants[j].path[4]=ants[j].selectNextService(4,tao34,ants[j].path[3],result[0][i],result[1][i]);//從第4個(gè)服務(wù)類(lèi)中選擇選擇
    //計(jì)算該螞蟻?zhàn)哌^(guò)的路徑長(zhǎng)度
    //System.out.println(ants[j].path[1]+"\t"+ants[j].path[2]+"\t"+ants[j].path[3]+"\t"+ants[j].path[4]+"\t");
    double pathlength=ants[j].caculatePathlength(ants[j].path);
    //System.out.println(pathlength);
    //和當(dāng)前最優(yōu)值比較
    if(pathlength<localbestpathlength){
     localbestpathlength=pathlength;
    }
    if(pathlength<bestlength){
     bestlength=pathlength;//用于記錄最短路徑長(zhǎng)度
     best_var[0]=result[0][i];//保存最優(yōu)的alpha、beta、rou組合
     best_var[1]=result[1][i];
     best_var[2]=result[2][i];
     if(evolutionnum>generation){
      generation=evolutionnum;
     }
     //System.out.println("第"+i+"代第" + j + "只螞蟻發(fā)現(xiàn)最優(yōu)解:"+bestlength);
     for(int k=0;k<bestpath.length;k++){
      bestpath[k]=ants[j].path[k+1];//用于記錄最優(yōu)路徑
     }
     endtime=System.currentTimeMillis();
    }
    //updatepheromone(j);
   }
   fitness[i]=localbestpathlength;
   //System.out.println(fitness[i]);
   updatepheromone(result[2][i]);
   
  }
 }

 public static void updatepheromone(double rou) {//跟新蟻群算法中的路徑上的信息素濃度
  
  for(int i=0;i<num[0];i++){//原有信息素的剩余部分
   tao01[0][i]*=(1-rou);
  }
  for(int i=0;i<num[0];i++){
   for(int j=0;j<num[1];j++){
    tao12[i][j]*=(1-rou);
   }
  }
  for(int i=0;i<num[1];i++){
   for(int j=0;j<num[2];j++){
    tao23[i][j]*=(1-rou);
   }
  }
  for(int i=0;i<num[2];i++){
   for(int j=0;j<num[3];j++){
    tao34[i][j]*=(1-rou);
   }
  }
  for(int k=0;k<antcount;k++){
   tao01[0][ants[k].path[1]]+=Q/ants[k].caculatePathlength(ants[k].path);//信息素增加
   tao12[ants[k].path[1]][ants[k].path[2]]+=Q/ants[k].caculatePathlength(ants[k].path);
   tao23[ants[k].path[2]][ants[k].path[3]]+=Q/ants[k].caculatePathlength(ants[k].path);
   tao34[ants[k].path[3]][ants[k].path[4]]+=Q/ants[k].caculatePathlength(ants[k].path);
  }
  
 }
 
 public static void printResult() {//打印程序結(jié)果
  //System.out.print("開(kāi)始結(jié)點(diǎn) --->");
  for(int i=0;i<bestpath.length;i++){
   System.out.print(bestpath[i]+" --->");
  }
  //System.out.println("結(jié)束結(jié)點(diǎn)");
  //System.out.println("最優(yōu)解為:"+bestlength);
  System.out.println(best_var[0]+"\t"+best_var[1]+"\t"+best_var[2]);
  System.out.println(bestlength+"\t"+generation+"\t"+(endtime-time));
  
 }
 public static String[] encode(){//十進(jìn)制轉(zhuǎn)化為二進(jìn)制,編碼過(guò)程
  
  for(int i=0;i<popution;i++){
   String result1="",result2="",result3="";
   int media_data1=(int)Math.floor((result[0][i]/alpha_Max)*((Math.pow(2, 20)-1)));
   result1=Integer.toBinaryString(media_data1);
   if(result1.length()<20){//補(bǔ)位操作,便于解碼
    int addition=20-result1.length();
    for(int j=0;j<addition;j++){
     result1="0"+result1;
    }
   }
   //System.out.print(result1);
   int media_data2=(int)Math.floor((result[1][i]/beta_Max)*((Math.pow(2, 20)-1)));
   result2=Integer.toBinaryString(media_data2);
   if(result2.length()<20){//補(bǔ)位操作,便于解碼
    int addition=20-result2.length();
    for(int j=0;j<addition;j++){
     result2="0"+result2;
    }
   }
   //System.out.print(result2);
   int media_data3=(int)Math.floor((result[2][i]/rou_Max)*((Math.pow(2, 10)-1)));
   result3=Integer.toBinaryString(media_data3);
   if(result3.length()<10){//補(bǔ)位操作,便于解碼
    int addition=10-result3.length();
    for(int j=0;j<addition;j++){
     result3="0"+result3;
    }
   }
   //System.out.println(result3);
   pop[i]=result1+result2+result3;
   //System.out.println(pop[i]+"\t"+pop[i].length());
  }
  return pop;
 }
 
 public static double[][] dencode(){//二進(jìn)制字符串轉(zhuǎn)化為十進(jìn)制實(shí)數(shù),解碼過(guò)程
  
  for(int k=0;k<popution;k++){
   String src=pop[k];
   String alpha_subString=src.substring(0, 20);//截取染色體中alpha片段
   String beta_subString=src.substring(20, 40);//截取染色體中beta片段
   String rou_subString=src.substring(40, 50);//截取染色體中rou片段
   char []decode_alpha_temp=alpha_subString.toCharArray();//講染色體片段轉(zhuǎn)化為單個(gè)字符數(shù)組,便于求值
   char []decode_beta_temp=beta_subString.toCharArray();
   char []decode_rou_temp=rou_subString.toCharArray();
   int []decode_alpha=new int[decode_alpha_temp.length];//將上述字符值轉(zhuǎn)化為可以計(jì)算的整數(shù)值存儲(chǔ)
   int []decode_beta=new int[decode_beta_temp.length];
   int []decode_rou=new int[decode_rou_temp.length];
   int alpha_media=0;//解碼前的中間值
   int beta_media=0;
   int rou_media=0;
   for(int i=0;i<decode_alpha_temp.length;i++){
    decode_alpha[i]=Integer.parseInt(String.valueOf(decode_alpha_temp[i]));
    decode_beta[i]=Integer.parseInt(String.valueOf(decode_beta_temp[i]));
             alpha_media+=decode_alpha[i]*Math.pow(2, (decode_alpha.length-i-1));
             beta_media+=decode_beta[i]*Math.pow(2, (decode_beta.length-1-i));
   }
   for(int i=0;i<decode_rou_temp.length;i++){
    decode_rou[i]=Integer.parseInt(String.valueOf(decode_rou_temp[i]));
    rou_media+=decode_rou[i]*Math.pow(2, (decode_rou.length-1-i));
   }
   result[0][k]=Double.valueOf(df.format(((alpha_media/(Math.pow(2, alpha_subString.length())-1))*alpha_Max)));
   result[1][k]=Double.valueOf(df.format(((beta_media/(Math.pow(2, beta_subString.length())-1))*beta_Max)));
   result[2][k]=Double.valueOf(df.format(((rou_media/(Math.pow(2, rou_subString.length())-1))*rou_Max)));
  }
  return result;
 }
 
 public static void crossover(){//交叉操作,多點(diǎn)交叉
  for(int i=0;i<popution;i++){
   double d=random.nextDouble();
   if(d<pc){
    int k1=random.nextInt(popution);//選擇要交叉的兩條染色體
    int k2=random.nextInt(popution);
       int position1=random.nextInt(20);//第一個(gè)交叉點(diǎn),alpha的交叉
    int position2=random.nextInt(20);//第二個(gè)交叉點(diǎn),beta的交叉
    int position3=random.nextInt(10);//第三個(gè)交叉點(diǎn),rou的交叉
    String alpha1=pop[k1].substring(0, 20);//獲取需要交叉的alpha字符串
    String alpha2=pop[k2].substring(0, 20);
    String beta1=pop[k1].substring(20, 40);//獲取需要交叉的beta字符串
    String beta2=pop[k2].substring(20, 40);
    String rou1=pop[k1].substring(40, 50);//獲取需要交叉的rou字符串
    String rou2=pop[k2].substring(40, 50);
    pop[k1]=alpha1.substring(0, position1)+alpha2.substring(position1, 20)+beta1.substring(0, position2)+beta2.substring(position2, 20)+rou1.substring(0, position3)+rou2.substring(position3, 10);
          pop[k2]=alpha2.substring(0, position1)+alpha1.substring(position1, 20)+beta2.substring(0, position2)+beta1.substring(position2, 20)+rou2.substring(0, position3)+rou1.substring(position3, 10);
   }
  }
 }
 
 public static void mutation(){
  for(int i=0;i<popution;i++){
   int mutation_alpha=random.nextInt(20);//alpha變異位置
   int mutation_beta=random.nextInt(20)+20;//beta變異位置
   int mutation_rou=random.nextInt(10)+40;//rou變異位置
   mutation(i,mutation_alpha,mutation_beta,mutation_rou);
  }
 }
 
 
 public static void mutation(int popnum,int position1,int position2,int position3){//按照alpha、beta、rou進(jìn)行多點(diǎn)變異
  String temp=pop[popnum];
  StringBuffer sb=new StringBuffer(temp);
  if(sb.charAt(position1)=='0'){
   sb.setCharAt(position1, '1');
  }else{
   sb.setCharAt(position1, '0');
  }
  if(sb.charAt(position2)=='0'){
   sb.setCharAt(position2, '1');
  }else{
   sb.setCharAt(position2, '0');
  }
  if(sb.charAt(position3)=='0'){
   sb.setCharAt(position3, '1');
  }else{
   sb.setCharAt(position3, '0');
  }
  pop[popnum]=sb.toString();
 }
 
 public static void roulettwheel(){//使用輪盤(pán)賭進(jìn)行染色體選擇
  double sum=0.0;
  for(int i=0;i<popution;i++){
   sum+=fitness[i];
  }
  for(int i=0;i<popution;i++){
   p[i]=fitness[i]/sum;
   q[i]=0.0;
  }
  for(int i=0;i<popution;i++){
   for(int j=0;j<=i;j++){
    q[i]+=p[j];
   }
  }
  
  double []ran=new double[popution];
  String[] tempPop=new String[popution];
  for (int i = 0; i < ran.length; i++) {
      ran[i]=random.nextDouble();
     }
  for (int i = 0; i < ran.length; i++) {
      int k = 0;
      for (int j = 0; j < q.length; j++) {
       if(ran[i]<=q[j])
       {
        k=j;
        break;
       }
       else continue;
      }
      tempPop[i]=pop[k];
     }
     for (int i = 0; i < tempPop.length; i++) {
      pop[i]=tempPop[i];
     }
 }
 public static void run(int totalevolutiongeneration){
  for(int i=0;i< totalevolutiongeneration;i++){
   //System.out.println("第"+i+"代--->");
   evolution(i);
  }
 }
 public static void evolution(int generation){
  encode();
  crossover();
  mutation();
  dencode();
  fitness(generation);
  roulettwheel();
 }
 
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  
  System.out.println("程序開(kāi)始運(yùn)行...");
  System.out.println("遺傳算法開(kāi)始初始化...");
  initpopution();
  GAACASelect gaaca=new GAACASelect(initpop);
  System.out.println("遺傳算法初始化完成!");
  System.out.println("蟻群算法開(kāi)始初始化...");
  init();
  time=System.currentTimeMillis();
  System.out.println("蟻群算法初始化完成!");
  System.out.println("程序進(jìn)化中...");
  run(100);
  System.out.println("程序進(jìn)化完成!");
  GAACASelect.printResult();
  System.out.println("程序運(yùn)行耗時(shí):"+(System.currentTimeMillis()-time));
  System.out.println(gaaca.getClass());
 }
}


分享

閱讀┊ ┊ ┊┊ ┊打印┊

已投稿到:

排行榜 圈子

加載中,請(qǐng)稍候......

前一篇:java中double型數(shù)據(jù)精度控制

后一篇:用java實(shí)現(xiàn)excel數(shù)據(jù)批量導(dǎo)入數(shù)據(jù)庫(kù)

評(píng)論 重要提示:警惕虛假中獎(jiǎng)信息       在插畫(huà)中找尋曾經(jīng)的美好       關(guān)注每日最熱門(mén)博客 

  • 評(píng)論加載中,請(qǐng)稍候...
  • 發(fā)評(píng)論 旅游行攝,輕品日本       是誰(shuí)改變了你的博客?       關(guān)注每日最熱門(mén)博客

    登錄名: 密碼: 找回密碼 注冊(cè)

    昵   稱:

       

    驗(yàn)證碼: 請(qǐng)點(diǎn)擊后輸入驗(yàn)證碼

    以上網(wǎng)友發(fā)言只代表其個(gè)人觀點(diǎn),不代表新浪網(wǎng)的觀點(diǎn)或立場(chǎng)。

    < 前一篇java中double型數(shù)據(jù)精度控制

    后一篇 >用java實(shí)現(xiàn)excel數(shù)據(jù)批量導(dǎo)入數(shù)據(jù)庫(kù)

    贊助本站

    相關(guān)內(nèi)容
    AiLab云推薦
    展開(kāi)

    熱門(mén)欄目HotCates

    Copyright © 2010-2024 AiLab Team. 人工智能實(shí)驗(yàn)室 版權(quán)所有    關(guān)于我們 | 聯(lián)系我們 | 廣告服務(wù) | 公司動(dòng)態(tài) | 免責(zé)聲明 | 隱私條款 | 工作機(jī)會(huì) | 展會(huì)港