我为TSP实现了两种算法,这两种算法使用了包含路由及其开销等的类。目前,它使用随机值,这很好,尽管我现在需要比较算法,所以为了公平起见,我需要使输入相同(这显然不太可能在使用随机输入时发生!)我的问题是我不知道如何改变它从随机值插入预先确定的值到二维数组,不仅如此,但我也不知道如何计算这些值的成本。
随机生成节点值:
Random rand = new Random();
for (int i=0; i<nodes; i++) {
for (int j=i; j<nodes; j++) {
if (i == j)
Matrix[i][j] = 0;
else {
Matrix[i][j] = rand.nextInt(max_distance);
Matrix[j][i] = Matrix[i][j];
}
}
}
我假设上面的a声明一个矩阵,说[4][4],然后int矩阵[][]= 插入值 ?
我不帮助这个类的一些其他部分,但我想我需要确保这部分是正确的再问!
提前感谢!
你可以这样初始化2D数组:
double matrix[][] = { { v1, v2, ..., vn }, { x1, x2, ..., xn }, ..., { y1, y2, ..., yn } };
其中每个inner{}表示最外层(第一个)索引,每个inner元素表示最外层(第二个)索引。
示例:要访问元素x1,您可以这样做:
matrix[1][0];
这是你问的答案,但我仍然认为这是更好的使用相同的随机值集的两种算法,Jon Taylor展示了一个很好的方法来做到这一点。设置种子的代码如下所示:
int seed = INTEGER_VALUE;
Random rand = new Random(seed);
这样你将得到相同的一组值
您可以为每个随机数生成器设置一个种子,从而保证对于您测试的每个实现,正在创建相同的伪随机数序列。
这将节省手动输入大量值的工作量。
编辑显示种子方法:
Random r = new Random(56);
每次用56的种子创建r时,它都会产生完全相同的随机数序列。如果没有种子,我相信种子默认为系统时间(给人一种真正随机数的错觉)。