资源简介
爬山算法和禁忌搜索对比代码+数据,可运行
代码片段和文件信息
package tabu;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Random;
public class HillClimbing {
private int MAX_GEN;// 迭代次数
private int cityNum; // 城市数量编码长度
private int[][] distance; // 距离矩阵
private int bestT;// 最佳出现代数
private int[] bestGh;// 最好的路径编码
private int bestEvaluation;
private Random random;
public HillClimbing() {
}
/**
* constructor of GA
*
* @param n
* 城市数量
* @param g
* 运行代数
*
**/
public HillClimbing(int n int g) {
cityNum = n;
MAX_GEN = g;
}
// 给编译器一条指令,告诉它对被批注的代码元素内部的某些警告保持静默
@SuppressWarnings(“resource“)
/**
* 初始化HillClimbing算法类
* @param filename 数据文件名,该文件存储所有城市节点坐标数据
* @throws IOException
*/
private void init(String filename) throws IOException {
// 读取数据
int[] x;
int[] y;
String strbuff;
BufferedReader data = new BufferedReader(new InputStreamReader(
new FileInputStream(filename)));
distance = new int[cityNum][cityNum];
x = new int[cityNum];
y = new int[cityNum];
for (int i = 0; i < cityNum; i++) {
// 读取一行数据,数据格式1 6734 1453
strbuff = data.readLine();
// 字符分割
String[] strcol = strbuff.split(“ “);
x[i] = Integer.valueOf(strcol[1]);// x坐标
y[i] = Integer.valueOf(strcol[2]);// y坐标
}
// 计算距离矩阵
// 针对具体问题,距离计算方法也不一样,
// 此处用的是att48作为案例,它有48个城市,距离计算方法为伪欧氏距离,最优值为10628
for (int i = 0; i < cityNum - 1; i++) {
distance[i][i] = 0; // 对角线为0
for (int j = i + 1; j < cityNum; j++) {
double rij = Math
.sqrt(((x[i] - x[j]) * (x[i] - x[j]) + (y[i] - y[j])
* (y[i] - y[j])) / 10.0);
// 四舍五入,取整
int tij = (int) Math.round(rij);
if (tij < rij) {
distance[i][j] = tij + 1;
distance[j][i] = distance[i][j];
} else {
distance[i][j] = tij;
distance[j][i] = distance[i][j];
}
}
}
distance[cityNum - 1][cityNum - 1] = 0;
bestGh = new int[cityNum];
bestEvaluation = Integer.MAX_VALUE;
bestT = 0;
random = new Random(System.currentTimeMillis());
}
// 初始化编码Ghh
void initGroup() {
int i j;
bestGh[0] = random.nextInt(65535) % cityNum;
for (i = 1; i < cityNum;)// 编码长度
{
bestGh[i] = random.nextInt(65535) % cityNum;
for (j = 0; j < i; j++) { //排除第i个和前面有重合
if (bestGh[i] == bestGh[j]) {
break;
}
}
if (j == i) {
i++;
}
}
}
public int evaluate(int[] chr) {
int len = 0;
// 染色体,起始城市城市1城市2...城市n
for (int i = 1; i < cityNum; i++) {
len += distance[chr[i - 1]][chr[i]];
}
// 城市n起始城市
len += distance[chr[cityNum - 1]][chr[0]];
return len;
}
// 爬山算法
public void pashan(int[] Gh int T) {
int i temp tt = 0;
int ran1 ran2;
int e;// 评价新值
int[] tempGh = new int[cityNum];
bestEvaluation = evaluate(Gh);
// 爬山代数T
for (tt = 0; tt < T; tt++) {
for (i = 0; i < cityNum; i++)
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 602 2017-07-11 17:19 att48.txt
文件 9173 2017-07-12 17:35 Tabu.java
文件 4461 2017-07-11 20:27 HillClimbing.java
- 上一篇:dnw_ubuntu
- 下一篇:listview 实现多按钮操作
相关资源
- 马的Hamilton周游路线问题国际象棋
- RANSAC算法剔除匹配误配点原理
- 遗传算法数据预测源码35540
- 基于ALPHA-BETA算法的五子棋程序
- 遗传算法解决车辆的CVRP问题
- LZ77数据无损压缩算法,可以直接运行
- 编译原理优先算法代码,及详细实验
- 连环夺宝游戏逻辑的生成,消除,下
- 读取STC单片机ID号,用CRC-ITU算法加密
- 多尺度的KCF算法代码
- 多目标pareto最优解搜索算法
- 算法竞赛入门经典(第二版)pdf+源码
- 遗传算法goat工具箱
- BP_Pso算法
- SIFT算法实现及代码详解
- 五子棋源码+算法详解
- 几种车牌字符识别算法的比较
- 马周游实验
- 基于DFT-SVD域抗几何攻击图像水印算法
- 基于OpenMP矩阵相乘并行算法的设计
- Ray Casting 光线跟踪算法程序 实现了
- 多目标整数编码的遗传算法求解集装
- zw_sbshi007-2506262-贪心算法算法-代码.
- 通过对微电网系统进行建模,利用智
- 算法课程.txt
- 基于粒子群算法的PID参数寻优MATLA程序
- 改进遗传算法的移动机器人动态路径
- 遗传算法GA优化BP神经网络代码
- 布谷鸟算法应用与函数优化详细解析
- 包含多种粒子群算法
评论
共有 条评论