问题背景
我目前正在开发一个蚁群系统算法框架。我想我会先尝试他们应用到的第一个问题:旅行推销员问题(TSP)。我将使用 C# 来完成这项任务。
所有 TSP 实例将由一个完整的无向图组成,每个边有 2 个不同的权重。
问题
到目前为止,我只使用了邻接列表表示,但我读过它们只推荐用于稀疏图。由于我不是最了解数据结构的人,所以我想知道实现无向完整图的最有效方法是什么?
如果需要,我可以提供更多详细信息。
感谢您的时间。
更新
重量澄清。每条边都会有两个与之关联的值:
- 两个城市之间的距离( d(i,j) = d(j,i) 两个方向的距离相同)
- 蚂蚁在特定边缘沉积的信息素量
操作。我将在图表上执行的操作的小总结:
- 对于每个节点,该特定节点上的蚂蚁将必须遍历与所有入射边关联的值
问题说明
蚁群优化算法可以“解决” TSP,因为这是它们首次应用于 . 我说“解决”是因为它们是称为元启发式优化的算法家族的一部分,因此它们从不保证返回最优解。
关于手头的问题:
- 蚂蚁会知道如何完成一次旅行,因为每只蚂蚁都会有记忆。
- 每次蚂蚁访问一个城市时,它都会将该城市存储在它的记忆中。
- 每次蚂蚁考虑访问一个新城市时,它都会在其记忆中搜索并选择一条出边,前提是该边不会将其引导至已访问过的城市。
- 当没有更多的边时,蚂蚁可以选择它已经完成了一次旅行;在这一点上,我们可以通过回溯它的记忆来回溯蚂蚁创建的旅程。
研究文章详情:蚁群系统文章
效率考虑
我更担心运行时间(速度)而不是内存。