【发布时间】:2012-06-12 16:09:44
【问题描述】:
问题背景
我目前正在开发一个蚁群系统算法的框架。我想我会先尝试他们应用到的第一个问题:旅行推销员问题(TSP)。我将使用 C# 来完成这项任务。
所有 TSP 实例都将包含一个完整的无向图,其中每个边有 2 个不同的权重。
问题
到目前为止,我只使用邻接列表表示,但我读过它们仅推荐用于稀疏图。由于我不是最了解数据结构的人,所以我想知道实现无向完整图的最有效方法是什么?
如果需要,我可以提供更多详细信息。
感谢您的宝贵时间。
更新
重量说明。每条边都有两个与之关联的值:
- 两个城市之间的距离(d(i,j) = d(j,i) 两个方向的距离相同)
- 蚂蚁在特定边缘沉积的信息素量
运营。我将在图表上进行的操作的小总结:
- 对于每个节点,该特定节点上的蚂蚁必须遍历与所有入射边关联的值
问题说明
蚁群优化算法可以“解决” TSP,因为这是它们首次应用于 .我说“求解”是因为它们属于称为元启发式优化的算法家族的一部分,因此它们从不保证返回最优解。
关于手头的问题:
- 蚂蚁会知道如何完成一次旅行,因为每只蚂蚁都有记忆。
- 每次蚂蚁访问一个城市时,它都会将该城市存储在它的内存中。
- 每次蚂蚁考虑访问一个新城市时,它都会在其记忆中搜索并选择一条出边,前提是该边不会将其引导至已访问过的城市。
- 当没有更多的边时蚂蚁可以选择它已经完成了一次旅行;此时,我们可以通过回溯它的记忆来回溯蚂蚁创建的旅程。
研究文章详情:Ant Colony System article
效率考虑
我更担心运行时间(速度)而不是内存。
【问题讨论】:
-
没有单一的“最有效”表示。效率很大程度上取决于您要提供的操作列表以及它们被调用的频率。
-
如果你有两个与边相关的权重,那么你就有一个有向图,而不是无向图(假设权重是针对不同方向的;否则它实际上只是一个(尽管很复杂)权重)
-
如果术语不正确,请致歉:一个值表示两个城市之间的距离,第二个值表示蚂蚁在特定边缘上沉积的信息素数量。这仍然是无向的。
-
@Morat:最好通过澄清来编辑您的问题,而不是发表评论。很多人认为SO上的大多数cmets都是浪费时间,所以不要阅读它们。他们大多是对的,尽管这条评论是一颗罕见的珍珠。
-
您的问题在某种程度上似乎自相矛盾。蚁群算法通常指的是演员直到到达那里才真正知道自己要去哪里的情况。没有办法让这种算法在算法上有效,因为你无法保证你的目的地。提出的问题是以最少的努力覆盖最多的区域。旅行推销员问题通常是指您有一个目的地系统并且问题是找到路线的情况。您能具体解释一下您要解决的问题吗?
标签: c# graph-theory heuristics ant-colony