我是一名学生,正在为课程项目开发蚁群模拟器。它的算法(显然)是蚁群算法。我知道算法的形式多种多样,但是所有这些对于我们来说在数学上都过于详细,因此我们采用了一种方法:
- 一只蚂蚁出生在一个殖民地,必须从源头收集食物以维持这个殖民地。
- 所有的蚂蚁都是相似的。
- 蚂蚁移动的区域是1000x1000的网格,因此每个网格点都可作为蚂蚁占据的有效点。现在,我遇到的所有算法都涉及分别处理顶点和边缘,但是由于我们将蚂蚁的移动限制在四个方向(上,下,左,右),所以我认为将信息素放在何处都没有关系。
- 上述网格点存储信息素。
- 蚂蚁仅在携带食物时才会滴下信息素。
- 对于处于位置(i,j)的蚂蚁,它通过简单的概率公式考虑到其四个相邻节点上的信息素量来决定下一步移动的位置,即,通过(特定相邻节点的信息素数量)/(4个相邻节点的信息素数量之和)。
- 一只蚂蚁不能回到原来的位置。它只有在有食物的地方或在其殖民地时才能这样做。
现在,我担心的是(以及程序中实际发生的事情)是,当一只蚂蚁FIRST到达有食物并捡起它的位置时,通过我们的算法起作用,它可以移动到任何地方!这是因为它只会留下一条信息素踪迹,一旦它有了食物而不是之前,并且因为它是第一只蚂蚁,就不存在信息踪迹了。
如果蚂蚁可以移动到任何地方,到达食物源后的蚂蚁也往往会跟随它前进。即使它没有移回殖民地,也是如此。这违反了整个算法的目的。
所以我的问题是
- 上述关注有效吗?如果没有,那为什么呢?如果是,那该如何处理呢?
- 我们是否需要对算法的基本理解进行一些更改才能使其真正起作用?
- 在这种情况下,像我这样的新手可能还会错过其他一些微妙但重要的事情吗?