资源简介

使用遗传算法实现的旅行者问题,采用java语言实现

资源截图

代码片段和文件信息

import java.util.*;
public class TSP{
public static final int snumber = 100;
public int [][]value = new int[snumber][snumber];//存放城市之间路径的权值
public static final int number = snumber ;//城市数目
public static final int time = 20;//遗传次数
public static final int unitNumber = 4;//种群个体数
public int[] code = new int[snumber] ; //编码数组

public int[][] unit = new int[4][snumber];//个体
public int[][] cunit = new int[4][snumber];//编码后的个体
//映射关系如下(034251):0 1 2 3 4 5
//unit   0 3 4 2 5 1
//cunit  1 3 3 2 2 1 

public int[] adaptValue = new int[4];//各个个体的适应值

//构造函数
public TSP(){
for(int i = 0 ; i < number ; i++)code[i] = 1;
for(int i = 0 ; i < number ; i++){
value[i][i] = 0;
for(int j = i + 1 ; j < number ; j++)value[i][j] = (int)(Math.random()*200);
}
for(int j = 0 ; j < number ; j++){
for(int i = 0 ; i < j ; i++)value[j][i] = value[i][j];
}
}

//编码函数
public void fcode(int pos){
int count = 0;
for(int i = 0 ; i < number ; i++){
for(int j = 0 ; j<= unit[pos][i] ; j++)count += code[j];
code[unit[pos][i]] =  0;
cunit[pos][i] = count ;
count = 0;
}
for(int i = 0 ; i < number ; i++)code[i] = 1;
}

//反编码函数
public void frcode(int pos){
int count = 0;
for(int i = 0 ; i < number ; i++){
int j;
for(j = 0 ; j < number ; j++){
count += code[j];
if(count == cunit[pos][i])break;
}
unit[pos][i] = j - 1;
code[j] = 0;
count = 0;
}
for(int i = 0 ; i < number ; i++)code[i] = 1 ;
}

//检查函数
public boolean check(int xpos  int val  int pos){
for(int i = 0 ; i < pos ; i++){
if(unit[xpos][i] == val)return false ;
}
return true ;
}

//初始化种群
public boolean initCrop(){
for(int i = 0 ; i < unitNumber ; i++){
for(int j = 0 ; j < number ; j++){
int rvalue ;
while(true){
rvalue = (int)(Math.random()*number);
//System.out.println(rvalue);
if(check(irvaluej))break;
}
unit[i][j] = rvalue;
}
//初始化完成后进行编码
fcode(i); 
}
return true ;
}

//适应函数
public void fAdaptation(){
for(int pos = 0 ; pos < unitNumber ; pos++){
int sum = 0;
for(int i = 0 ; i < number - 1 ; i++){
sum += value[unit[pos][i]][unit[pos][i+1]];
}
sum += value[un

评论

共有 条评论