资源简介
本代码为用Java实现的模拟退火求解旅行商问题,希望对大家有帮助

代码片段和文件信息
/**
* 实现Inter.java接口中的函数
* 不要添加 package语句
*/
import java.util.*;
import java.io.*;
public class Annealing implements Inter{
/**
* 不要定义static 的变量
*/
/*
初始参数的确定
康立山等人的方法:
初始温度t0=280;
在每个温度下采用固定的迭代次数,Lk=100n,n为城市数;
温度的衰减系数=0.92,即tk+1=0.92×tk;
算法的停止准则为:当相邻两个温度得到的解无任何变化时算法停止。*/
class city{
public String name;
public double x;
public double y;
public city(String s)
{
String[] tmp = s.split(“\\s+“);
name = tmp[0];
x = Double.parseDouble(tmp[1]);
y = Double.parseDouble(tmp[2]);
}
}
Vector vec = new Vector();
int n = 0;
int num = 0;
public void getStrategy(String inputFile){
try{
File f = new File(inputFile);
FileReader fr = new FileReader(f);
BufferedReader br = new BufferedReader(fr);
String line = br.readLine();
n = Integer.parseInt(line);
while((line = br.readLine()) != null)
{
vec.add(new city(line));
}
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
int route1[] = new int[n];
int route2[] = new int[n];
double t = 2;
double best;
int a[] = new int[n];
for(int i = 0;i < n;i++)
{
a[i] = i;
}
double f = getValue(a);
best = f;
while(t >= 0.001)
{
for(int i = 0;i < 10*n;i ++)
{
int aa[] = getPath(a);
double ff = getValue(aa);
if(ff < f)
{
num ++;
f = ff;
a = aa;
route1 = a;
if(best > f)
{
best = f;
route2 = a;
}
}
if(ff >= f )
{
double db = Math.exp(-1*(ff-f)/t);
if (db > Math.random())
{
num ++;
f = ff;
a = aa;
route1 = a;
}
}
}
t *= 0.95;
}
System.out.print(“(“);
for(int i = 0;i < n-1;i ++)
System.out.print(vec.get(route1[i]).name + ““);
System.out.println(vec.get(route1[n-1]).name + “) “+f);
System.out.print(“(“);
for(int i = 0;i < n-1;i ++)
System.out.print(vec.get(route2[i]).name + ““);
System.out.println(vec.get(route2[n-1]).name + “) “ + best);
System.out.println(num);
}
public int[] getPath(int a[])
{
int s = a.length;
int b[] = new int[s];
Random r = new Random();
int x = r.nextInt(10);
int y = r.nextInt(10);
while(y == x)
y = r.nextInt(10);
if(x < y){
int k = 0;
for(int i = 0;i < s;i++)
{
if(i < x)
b[i] = a[i];
else if(i > y)
b[i] = a[i];
else {
b[i] = a[y - k];
k++;
}
}
}
else {
int yy = yk = 1;
for(int i = 0;i < n;i ++)
{
if(i <= yy)
{
b[i] = a[y];
y -- ;
}
else if(i >= x)
{
b[i] = a[s-k];
k ++;
}
else
b[i] = a[i];
}
}
if(Arrays.equals(a b))
return getPath(a);
else
return b;
}
public double getValue(int a[])
{
double length = 0;
int k = a.length - 1;
for(int i = 0;i < k;i++)
{
double tmp
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3493 2009-12-15 10:49 模拟退火\Annealing.java
文件 152 2009-12-08 23:34 模拟退火\Inter.java
文件 287 2009-12-15 10:33 模拟退火\Test.java
文件 26112 2010-05-26 20:13 模拟退火\说明.doc
目录 0 2010-05-26 20:13 模拟退火
----------- --------- ---------- ----- ----
30044 5
相关资源
- java串口通信全套完整代码-导入eclip
- JNA所需要的jar包
- jsonarray所必需的6个jar包.rar
- 三角网构TIN生成算法,Java语言实现
- utgard用到的jar包
- java代码编写将excel数据导入到mysql数据
- Java写的cmm词法分析器源代码及javacc学
- JAVA JSP公司财务管理系统 源代码 论文
- JSP+MYSQL旅行社管理信息系统
- commons-beanutils-1.8.3.jar
- 推荐算法的JAVA实现
- 基于Java的酒店管理系统源码(毕业设
- java-图片识别 图片比较
- android毕业设计
- ehcache-core-2.5.1.jar
- android-support-v4.jar已打包进去源代码
- java23种设计模式+23个实例demo
- java Socket发送/接受报文
- JAVA828436
- java界面美化 提供多套皮肤直接使用
- 在线聊天系统(java代码)
- 基于Java的图书管理系统807185
- java中实现将页面数据导入Excel中
- java 企业销售管理系统
- java做的聊天系统(包括正规课程设计
- Java编写的qq聊天室
- 商店商品管理系统 JAVA写的 有界面
- JAVA开发聊天室程序
- 在linux系统下用java执行系统命令实例
- java期末考试试题两套(答案) 选择(
评论
共有 条评论