TS.java, change:2008-10-18,size:2190bpublic class TS {
final static int TS_SIZE = 10;
final static int TS_ITERATIONS = 100000;
Methord mthd_f;
double targetFun; // 最优目标函数值
double targetX[]; // 目标解
String tsList[]; // 禁忌表
int listPoint;
// 初始化
TS() {
mthd_f = new TSP();
if (mthd_f.getLen() == 0)// 初始化
mthd_f.init();
targetX = new double[mthd_f.getLen()];
tsList = new String[TS_SIZE];
listPoint = 0;
}
/**
* 初始化
*
* @param nMthd
* 计算的目标
*/
TS(Methord nMthd) {
mthd_f = nMthd;
if (mthd_f.getLen() == 0)// 初始化
mthd_f.init();
targetX = new double[mthd_f.getLen()];
tsList = new String[TS_SIZE];
listPoint = 0;
}
/**
* 更新禁忌表
*/
void change() {
tsList[listPoint] = mthd_f.getChange();
listPoint = (listPoint + 1) % TS_SIZE;
}
/**
* 查找禁忌表
*
* @param strChange
* 需要查找的操作
* @return 如果是禁忌,则返回true,否则返回false
*/
Boolean findTaboo(String strChange) {
Boolean rslt = false;
for (int i = 0; i TS_SIZE; i++) {
if (strChange.equalsIgnoreCase(tsList[i]) == true) {
rslt = true;
break;
}
}
return rslt;
}
// 打印输出结果
public String toString() {
String result = "\n==TS==> FBEST:" + targetFun + "\nAnd the BEST X is: ";
for (int i = 0; i mthd_f.getLen(); i++) {
result += (" [" + i + "]=" + targetX[i]);
}
return result;
}
/**
* 主TS算法函数
*/
public void ts() {
targetFun = mthd_f.f();
mthd_f.getCopyX(targetX);
double lastX[] = new double[mthd_f.getLen()];
mthd_f.getCopyX(lastX);
double lastFun = mthd_f.f();
for (int i = 0; i TS_ITERATIONS; i++) {
mthd_f.getNextX();
double tmpFun = mthd_f.f();
if ( (tmpFun lastFun && (findTaboo(mthd_f.getChange()) == false)) // 不在禁忌表内
|| (tmpFun targetFun)) { // 可以破禁
if (tmpFun targetFun) { // 更新最好解
targetFun = tmpFun;
mthd_f.getCopyX(targetX);
}
change();
mthd_f.getCopyX(lastX);
lastFun = tmpFun;
} else { // 禁忌生效
mthd_f.setX(lastX);
// System.out.println("禁忌生效");
}
}
}
}
TSP.java, change:2008-11-28,size:3816bpublic class TSP implements Methord {
final static int LEN = 2000;
final static int MAX_ROAD = 15;
final static int MIN_ROAD = 1;
final static int CHANGE_LEN = 3;
final static int CHANGE_I = 1;
final static int CHANGE_J = 2;
int tspX[];
double distance[][];
int s_i;
int s_j;
/**
* 交换下标为s_j的s_i的变量tspX的值产生新变量
*/
private void swap() {
int tmp = tspX[s_i];
tspX[s_i] = tspX[s_j];
tspX[s_j] = tmp;
}
// private int toInt(String str){
// str.trim();
// int len = str.length();
// char ch[] = new char[len];
// ch = str.toCharArray();
// int result = 0;
// for(int i=0;i<len;i++){
// if(ch[i]>'9'||ch[i]<'0'){
// result = 0;
// break;
// }
// result = (result*10 + ch[i]-'0');
// }
// return result;
// }
/**
* 生成一个介于minRand和maxRand之间的随机整数 >=minRand but <maxRand
* @param minRand 随机整数下界,可相等
* @param maxRand 随机整数上界,不等于
* @return 介于minRand和maxRand之间的随机整数
*/
private int rand(int minRand, int maxRand) {
return (int) (Math.random() * (maxRand - minRand) + minRand);
}
@Override
public double f() {
// TODO Auto-generated method stub
double result = 0;
for (int i = 0; i LEN; i++) {
result += (tspX[i] tspX[(i + 1) % LEN] ? distance[tspX[i]][tspX[(i + 1)
% LEN]]
: distance[tspX[(i + 1) % LEN]][tspX[i]]);
}
return result;
}
@Override
public String getChange() {
return (s_i>s_j) ? ("swap " + s_i + " and " + s_j):
("swap " + s_j + " and " + s_i);
}
@Override
public void getCopyX(double[] x) {
// TODO Auto-generated method stub
for (int i = 0; i LEN; i++) {
x[i] = tspX[i];
}
}
@Override
public int getLen() {
// TODO Auto-generated method stub
return LEN;
}
@Override
public void getNextX() {
// TODO Auto-generated method stub
s_i = rand(0, LEN);
s_j = rand(0, LEN);
while (s_j == s_i) {
s_j = rand(0, LEN);
}
swap();
}
@Override
public void init() {
// TODO Auto-generated method stub
/*
* tspX = new int[LEN]; distance = new double[LEN][LEN]; int
* p[]={7,3,4,8,2,1,5,6}; int q[][]={{0,2,4,6,10,8,2,1},
* {0,0,2,5,9,4,8,7}, {0,0,0,1,2,7,12,11}, {0,0,0,0,1,7,14,5},
* {0,0,0,0,0,2,4,14}, {0,0,0,0,0,0,2,7}, {0,0,0,0,0,0,0,1},
* {0,0,0,0,0,0,0,0}}; for(int i=0;i<LEN;i++){ tspX[i]=p[i]-1; for(int
* j=0;j<LEN;j++){ distance[i][j]=q[i][j]; } }
*/
tspX = new int[LEN];
int flagX[] = new int[LEN];
distance = new double[LEN][LEN];
for (int i = 0; i LEN; i++) {
flagX[i] = 0;
}
for (int i = 0; i LEN; i++) {
int t = rand(0, LEN);
while (flagX[t] != 0) {
t = rand(0, LEN);
}
tspX[i] = t;
flagX[t] = 1;
}
for (int i = 0; i LEN; i++) {
for (int j = i + 1; j LEN; j++) {
distance[i][j] = rand(MIN_ROAD, MAX_ROAD);
}
}
}
@Override
public void setX(double[] x) {
// TODO Auto-generated method stub
for (int i = 0; i LEN; i++) {
tspX[i] = (int) x[i];
}
}
// @Override
// public void setChange(String strChange) {
// // TODO Auto-generated method stub
// String strChanges[] = new String[CHANGE_LEN];
// strChanges = strChange.split(strChange,3);
// s_i = toInt(strChanges[CHANGE_I]);
// s_j = toInt(strChanges[CHANGE_J]);
// }
@Override
public String toString() {
String result;
result = "X:";
for (int i = 0; i LEN; i++) {
result += (" [" + i + "]:" + tspX[i]);
}
result += "\nDistance:\n";
for (int i = 0; i LEN; i++) {
result += ("[" + i + "]");
for (int j = 0; j LEN; j++) {
result += (" " + distance[i][j]);
}
result += "\n";
}
result += " and F:";
result += f();
return result;
}
} 代码比较长,问题有两个,
1,红色字体部分的Methord接口的定义在哪?没有定义它怎么能@override?
2,这两个.java怎么编译在一块?我用的是NetBeans IDE 7.2,直接放在源包里就行了吗?有了解的说下,或者说下在其他平台或环境下怎么编译也行。
final static int TS_SIZE = 10;
final static int TS_ITERATIONS = 100000;
Methord mthd_f;
double targetFun; // 最优目标函数值
double targetX[]; // 目标解
String tsList[]; // 禁忌表
int listPoint;
// 初始化
TS() {
mthd_f = new TSP();
if (mthd_f.getLen() == 0)// 初始化
mthd_f.init();
targetX = new double[mthd_f.getLen()];
tsList = new String[TS_SIZE];
listPoint = 0;
}
/**
* 初始化
*
* @param nMthd
* 计算的目标
*/
TS(Methord nMthd) {
mthd_f = nMthd;
if (mthd_f.getLen() == 0)// 初始化
mthd_f.init();
targetX = new double[mthd_f.getLen()];
tsList = new String[TS_SIZE];
listPoint = 0;
}
/**
* 更新禁忌表
*/
void change() {
tsList[listPoint] = mthd_f.getChange();
listPoint = (listPoint + 1) % TS_SIZE;
}
/**
* 查找禁忌表
*
* @param strChange
* 需要查找的操作
* @return 如果是禁忌,则返回true,否则返回false
*/
Boolean findTaboo(String strChange) {
Boolean rslt = false;
for (int i = 0; i TS_SIZE; i++) {
if (strChange.equalsIgnoreCase(tsList[i]) == true) {
rslt = true;
break;
}
}
return rslt;
}
// 打印输出结果
public String toString() {
String result = "\n==TS==> FBEST:" + targetFun + "\nAnd the BEST X is: ";
for (int i = 0; i mthd_f.getLen(); i++) {
result += (" [" + i + "]=" + targetX[i]);
}
return result;
}
/**
* 主TS算法函数
*/
public void ts() {
targetFun = mthd_f.f();
mthd_f.getCopyX(targetX);
double lastX[] = new double[mthd_f.getLen()];
mthd_f.getCopyX(lastX);
double lastFun = mthd_f.f();
for (int i = 0; i TS_ITERATIONS; i++) {
mthd_f.getNextX();
double tmpFun = mthd_f.f();
if ( (tmpFun lastFun && (findTaboo(mthd_f.getChange()) == false)) // 不在禁忌表内
|| (tmpFun targetFun)) { // 可以破禁
if (tmpFun targetFun) { // 更新最好解
targetFun = tmpFun;
mthd_f.getCopyX(targetX);
}
change();
mthd_f.getCopyX(lastX);
lastFun = tmpFun;
} else { // 禁忌生效
mthd_f.setX(lastX);
// System.out.println("禁忌生效");
}
}
}
}
TSP.java, change:2008-11-28,size:3816bpublic class TSP implements Methord {
final static int LEN = 2000;
final static int MAX_ROAD = 15;
final static int MIN_ROAD = 1;
final static int CHANGE_LEN = 3;
final static int CHANGE_I = 1;
final static int CHANGE_J = 2;
int tspX[];
double distance[][];
int s_i;
int s_j;
/**
* 交换下标为s_j的s_i的变量tspX的值产生新变量
*/
private void swap() {
int tmp = tspX[s_i];
tspX[s_i] = tspX[s_j];
tspX[s_j] = tmp;
}
// private int toInt(String str){
// str.trim();
// int len = str.length();
// char ch[] = new char[len];
// ch = str.toCharArray();
// int result = 0;
// for(int i=0;i<len;i++){
// if(ch[i]>'9'||ch[i]<'0'){
// result = 0;
// break;
// }
// result = (result*10 + ch[i]-'0');
// }
// return result;
// }
/**
* 生成一个介于minRand和maxRand之间的随机整数 >=minRand but <maxRand
* @param minRand 随机整数下界,可相等
* @param maxRand 随机整数上界,不等于
* @return 介于minRand和maxRand之间的随机整数
*/
private int rand(int minRand, int maxRand) {
return (int) (Math.random() * (maxRand - minRand) + minRand);
}
@Override
public double f() {
// TODO Auto-generated method stub
double result = 0;
for (int i = 0; i LEN; i++) {
result += (tspX[i] tspX[(i + 1) % LEN] ? distance[tspX[i]][tspX[(i + 1)
% LEN]]
: distance[tspX[(i + 1) % LEN]][tspX[i]]);
}
return result;
}
@Override
public String getChange() {
return (s_i>s_j) ? ("swap " + s_i + " and " + s_j):
("swap " + s_j + " and " + s_i);
}
@Override
public void getCopyX(double[] x) {
// TODO Auto-generated method stub
for (int i = 0; i LEN; i++) {
x[i] = tspX[i];
}
}
@Override
public int getLen() {
// TODO Auto-generated method stub
return LEN;
}
@Override
public void getNextX() {
// TODO Auto-generated method stub
s_i = rand(0, LEN);
s_j = rand(0, LEN);
while (s_j == s_i) {
s_j = rand(0, LEN);
}
swap();
}
@Override
public void init() {
// TODO Auto-generated method stub
/*
* tspX = new int[LEN]; distance = new double[LEN][LEN]; int
* p[]={7,3,4,8,2,1,5,6}; int q[][]={{0,2,4,6,10,8,2,1},
* {0,0,2,5,9,4,8,7}, {0,0,0,1,2,7,12,11}, {0,0,0,0,1,7,14,5},
* {0,0,0,0,0,2,4,14}, {0,0,0,0,0,0,2,7}, {0,0,0,0,0,0,0,1},
* {0,0,0,0,0,0,0,0}}; for(int i=0;i<LEN;i++){ tspX[i]=p[i]-1; for(int
* j=0;j<LEN;j++){ distance[i][j]=q[i][j]; } }
*/
tspX = new int[LEN];
int flagX[] = new int[LEN];
distance = new double[LEN][LEN];
for (int i = 0; i LEN; i++) {
flagX[i] = 0;
}
for (int i = 0; i LEN; i++) {
int t = rand(0, LEN);
while (flagX[t] != 0) {
t = rand(0, LEN);
}
tspX[i] = t;
flagX[t] = 1;
}
for (int i = 0; i LEN; i++) {
for (int j = i + 1; j LEN; j++) {
distance[i][j] = rand(MIN_ROAD, MAX_ROAD);
}
}
}
@Override
public void setX(double[] x) {
// TODO Auto-generated method stub
for (int i = 0; i LEN; i++) {
tspX[i] = (int) x[i];
}
}
// @Override
// public void setChange(String strChange) {
// // TODO Auto-generated method stub
// String strChanges[] = new String[CHANGE_LEN];
// strChanges = strChange.split(strChange,3);
// s_i = toInt(strChanges[CHANGE_I]);
// s_j = toInt(strChanges[CHANGE_J]);
// }
@Override
public String toString() {
String result;
result = "X:";
for (int i = 0; i LEN; i++) {
result += (" [" + i + "]:" + tspX[i]);
}
result += "\nDistance:\n";
for (int i = 0; i LEN; i++) {
result += ("[" + i + "]");
for (int j = 0; j LEN; j++) {
result += (" " + distance[i][j]);
}
result += "\n";
}
result += " and F:";
result += f();
return result;
}
} 代码比较长,问题有两个,
1,红色字体部分的Methord接口的定义在哪?没有定义它怎么能@override?
2,这两个.java怎么编译在一块?我用的是NetBeans IDE 7.2,直接放在源包里就行了吗?有了解的说下,或者说下在其他平台或环境下怎么编译也行。
解决方案 »
- GUI设计,如何更改鼠标样式
- 如何打开1433端口?
- 想写个会场排序的小程序,遇到个问题,请教一下。我在点击button1后,名字不能在窗口上显示,必须最小化一下,再恢复窗口就看到了,这是怎么回事?求解决办法。
- [请教] 为什么java中,有的方法类直接可以调出来,有的却必须new对象才能调出来!
- 谁可以举例说明类变量和实例变量的区别
- 为什么abort.setEnable(false); 是错误的,编译不过去??
- 在JAVA中怎么判断你输入的字符是一个中文???
- java.io 莱鸟问题:程序运行时用到的文件应该放在哪个目录下?在线等待。。。
- 关于停止线程的问题
- Java中Comparator接口的方法compare()为什么不能返回一个差值呢?
- 一道面试题(请大家帮忙看一下这道题目如何作答)
- 匿名内部类问题求助
我发现没标明红色,抱歉
第2个问题:类代码前加一句 package aa;
aa是文件的路径,程序所在目录有aa这个文件夹即可
escape("http://www.baidu.com/?1234556");
得到
http%3A//www.baidu.com/%3F1234556求教,怎么在用PHP中把http://www.baidu.com/?1234556变成http%3A//www.baidu.com/%3F1234556
result += (" [" + i + "]:" + tspX[i]);
这行代码的数学表达式上的含义是什么?" [" + i + "]:"表示字符串“[i]”吗? 不是应该算出个数值吗?
Class Method
我搜索java Methord 发现了上述类,您所说的“所用jar包里是否有”是什么意思?小弟刚刚接触java对各种术语都还不是很了解,勿怪问题问得太傻瓜。您是否是说“package”“import”,我确实奇怪源代码里为什么没有这种东西,貌似一般的都有