我正在做一个旅行推销员求解器,我希望能够随机生成表示城市之间距离的矩阵。以下是我目前使用的一个例子:
distances = [[0, 3, 7, 1, 6, 2],
[3, 0, 9, 2, 8, 7],
[7, 9, 0, 5, 4, 8],
[1, 2, 5, 0, 4, 9],
[6, 8, 4, 4, 0, 4],
[2, 7, 8, 9, 4, 0]]
我可以用什么来写一个函数来创建一个x
* y
随机整数矩阵,其中distances[x][y]
= distances[y][x]
?(如果x
= y
时元素= 0,则奖励)
9条答案
按热度按时间14ifxucb1#
你可以用python来解决这个问题,就像这样:
或者你也可以使用numpy来解决它,如下所示:
kq4fsx7k2#
这里有一个简单但有效的解决方案:
nwnhqdif3#
从一系列城市“伪位置”来看,简单地广播绝对值的差异应该可以做到这一点:
如果你想避免加法模式,你可以合并(添加)随机距离的转置三角矩阵。每个值将被添加到转置副本中的相应零:
如果您只想生成精确数量的随机距离,并且计划在同一矩阵中生成多个测试用例,则可以设置一次索引和计数,并在需要时在一行中执行随机距离生成:
设置:
随机矩阵生成:
30byixjq4#
我建议看看
tril
或triu
函数,你可以得到下三角形或上三角形,并合并换位,例如。可能给予输出
说明:我生成6x6随机数组,然后得到上三角形,三角形之外的所有东西都是零,所以我使用
where
从转置的上三角形中得到值,那里是零。免责声明:此解决方案仅提供
distances[x][y] == distances[y][x]
,不尝试使distances[x][x] == 0
7fyelxc55#
也可以根据需要生成足够的随机数:
结果
tp5buhyn6#
这称为对称矩阵。可以通过以下方式生成对称矩阵:
最后,如果你想填充对角线的元素为0然后:
h43kikqp7#
可以使用Python中的
random
模块为距离矩阵生成随机整数。为了确保距离[x][y]等于距离[y][x],可以生成一个下三角矩阵,然后将其反映在对角线上。示例
00jrzges8#
另一种方法是将
random matrix
乘以它的转置:这里的值将大得多,因为我们将元素乘以它们的转置。
5us2dqdw9#
一种方法是对下面的三角形及其调整后的转置求和。
将对角线转换为
0