进化tsp

来源:互联网 发布:网页游戏发布站源码 编辑:程序博客网 时间:2024/04/29 02:04
import java.awt.*;import java.awt.event.*;import java.io.IOException;import java.net.*;import java.util.Random;import javax.swing.*;public class Hello {static int table[][]={{0,3,5,99,99,99,3},{3,0,3,7,99,99,11},{5,3,0,3,99,99,99},{99,7,3,0,3,9,11},{99,99,99,3,0,3,99},{99,99,99,9,3,0,3},{3,11,99,11,99,3,0}};static int path[][]={{2,4,5,7,3,6},{2,7,6,3,5,4},{6,5,3,2,4,7},{5,3,2,6,4,7},{2,4,7,5,6,3},{2,4,3,5,6,7},{3,5,7,6,4,2},{4,2,5,6,3,7},{5,4,2,7,6,3},{7,6,4,5,3,2},};static int distance[]=new int[10];public static void init(){for(int i=0;i<10;i++){for(int j=0;j<5;j++){distance[i]=distance[i]+table[path[i][j]-1][path[i][j+1]-1];}distance[i]=distance[i]+table[path[i][0]-1][0]+table[path[i][5]-1][0];}sort();}public static void sort(){for(int i=0;i<10;i++){distance[i]=0;for(int j=0;j<5;j++){distance[i]=distance[i]+table[path[i][j]-1][path[i][j+1]-1];}distance[i]=distance[i]+table[path[i][0]-1][0]+table[path[i][5]-1][0];}for(int i=0;i<9;i++)for(int j=0;j<10-i-1;j++)if(distance[j]>distance[j+1]){int temp;temp=distance[j];distance[j]=distance[j+1];distance[j+1]=temp;for(int k=0;k<6;k++){temp=path[j][k];path[j][k]=path[j+1][k];path[j+1][k]=temp;}}/*System.out.println("_________________________");for(int i=0;i<10;i++){System.out.println(distance[i]);for(int j=0;j<6;j++){System.out.print(path[i][j]+"  ");}System.out.println();}System.out.println("_________________________");*/}public static void recombination(int row){Random rand = new Random();int p,q; //int范围类的随机数p = rand.nextInt(5); q = rand.nextInt(5); int i,j,k,n,m;boolean accu[];accu=new boolean[6];for( n=2;n<=7;n++){for( i=0;i<6;i++)if(path[p][i]==n)break;for( j=0;j<6;j++)if(path[q][j]==n)break;m=(i+j)/2;while(accu[m]==true)m=(m+1)%6;path[row][m]=n;accu[m]=true;}}public static void motation(){Random rand = new Random();int i,j,k,temp; //int范围类的随机数i = rand.nextInt(5); j = rand.nextInt(6); k = rand.nextInt(6); for(int p=0;p<6;p++){path[5][p]=path[i][p];}temp=path[5][j];path[5][j]=path[5][k];path[5][k]=temp;i = rand.nextInt(5); j = rand.nextInt(6); k = rand.nextInt(6); for(int p=0;p<6;p++){path[6][p]=path[i][p];}temp=path[6][j];path[6][j]=path[6][k];path[6][k]=temp;/*i = rand.nextInt(5); j = rand.nextInt(6); k = rand.nextInt(6); for(int p=0;p<6;p++){path[7][p]=path[i][p];}temp=path[7][j];path[7][j]=path[7][k];path[7][k]=temp;i = rand.nextInt(5); j = rand.nextInt(6); k = rand.nextInt(6); for(int p=0;p<6;p++){path[8][p]=path[i][p];}temp=path[8][j];path[8][j]=path[8][k];path[8][k]=temp;i = rand.nextInt(5); j = rand.nextInt(6); k = rand.nextInt(6); for(int p=0;p<6;p++){path[9][p]=path[i][p];}temp=path[9][j];path[9][j]=path[9][k];path[9][k]=temp;/*System.out.println("______motation___________________");System.out.println("i="+i+"  j="+j+"  k="+k);for(i=0;i<10;i++){for(j=0;j<6;j++){System.out.print(path[i][j]+"  ");}System.out.println();}System.out.println("______motation  over___________________");*/}public static void main(String arg[]){sort();while(true){motation();recombination(7);recombination(8);recombination(9);sort();if(distance[0]==distance[3]&&distance[0]<=100)break;}sort();for(int i=0;i<10;i++){System.out.println(distance[i]);for(int j=0;j<6;j++){System.out.print(path[i][j]+"  ");}System.out.println();}}}

0 0
原创粉丝点击