我为TSP实现了两种算法,它使用的是一个包含路由,它们的成本等的类。此时它使用的随机值很好,虽然我现在需要比较算法以便使这个公平我需要使输入相同(这在使用随机输入时显然不太可能发生!)我遇到的问题是我不知道如何将它从随机值更改为将预定值插入到2D数组中,而不仅仅是也不知道如何计算这些价值的成本。
随机生成节点值:
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];
}
}
}
我假设上面声明了一个说[4] [4]的矩阵,然后是int matrix [] [] = 插入值?
我对本课程的其他部分没有帮助,但我认为在问之前我需要确保这部分是正确的!
提前多多感谢!
答案 0 :(得分:2)
您可以为每个随机数生成器设置种子,因此保证对于您测试的每个实现,都会创建相同的伪随机数序列。
这将节省手动输入大量值的工作量。
编辑以显示种子方法:
Random r = new Random(56);
每次使用56的种子创建r时,它将产生完全相同的随机数序列。没有种子我相信种子默认为系统时间(给出真正随机数字的错觉)。
答案 1 :(得分:2)
你可以像这样初始化2D数组:
double matrix[][] = { { v1, v2, ..., vn }, { x1, x2, ..., xn }, ..., { y1, y2, ..., yn } };
其中每个内部{}表示outter(第一个)索引,每个内部元素表示最内部(第二个)intex。
示例:对于访问元素x1,您执行此操作:
matrix[1][0];
这是你要求的答案,但我仍然认为最好对两种算法使用相同的随机值集合,Jon Taylor表明了这样做的好方法。设置种子的代码如下所示:
int seed = INTEGER_VALUE;
Random rand = new Random(seed);
通过这种方式,您将获得相同的值集。