1

我正在做蚁群优化算法。我有几个问题。我试图搜索 throw ,但一无所获。

1 — 算法的结果是什么?

我有一些图表,我需要找到从起点到目标点的最佳路径,对吗?该算法不像 dijkstra 算法(找到一条最短路径)那样工作。其中有一个概率因素。在 10 个循环和 5000 只蚂蚁之后,可以选择最差路径,尽管如此,更好路径上的信息素将增加 1000 倍。我的意思是第 5000 个可以选择路径1 -> 3 -> 5(平均概率为 1%),尽管有 4999 只蚂蚁选择了路径(概率为1 -> 2 -> 599%)。这只是一个例子。所以问题是如何检测最优化(最好,在某些参数上最好?)路径,我应该检测它还是1 -> 2 -> 5在我的例子中是正确的结果(发生......)并且我必须输出最后选择的路径?

2 - 如何输出结果

那么这个答案可能取决于第一个答案。怎么样?我假设,我必须输出每个周期的工作算法和协议的总摘要。

汇总数据将是:

Path found: Yes/no
Path: path/message, that best path is not found
Iteration: N

协议将是:

Start data for iteration 3
    Pheromone level for this iteration
    Path found on this level or not (?)
    Path on this iteration (?)
End data for iteration 3

Start data for iteration 2
    Pheromone level for this iteration
    Path found on this level or not (?)
    Path on this iteration (?)
End data for iteration 2


Start data for iteration 1
    Pheromone level for this iteration
    Path found on this level or not (?)
    Path on this iteration (?)
End data for iteration 1

有什么建议么?请帮我处理每次迭代的输出数据。

3 — 信息素水平达到一定值时停止增长

为什么会这样?例如(500 只蚂蚁),最佳路径上的信息素水平增长到大约 10 步搜索(循环),之后变得稳定。这是良好的行为还是意味着我的算法中有一些错误?如果没有错误,为什么会出现这种行为?

4 — 我的程序架构

我认为好的方法是创建onclick处理程序,它调用算法的 NEXT STEP(下一个循环)。我看到了一些例子,它有一段时间循环了(不记得链接,不能给你看:'(现在)。我的方法是可以接受的还是完全错误的?

4

1 回答 1

2

1)您通常会存储所有迭代的最佳路径(如在 Elitist Ant System 等中),这也是最终结果。

2)循环是指迭代?无论如何,至于“是否在此级别上找到路径”,我只会首先允许成功(完整)路径,或者让所有蚂蚁运行直到每个蚂蚁都找到一个并切断循环。否则,我认为在这里放置信息素并记录路径将没有多大意义。所以我建议记录每次迭代的最佳路径长度(以及要放置的信息素)和该路径的顶点,当然。

3)如果信息素停滞不前并且在一定次数的迭代中没有找到更好的解决方案,通常你会破坏算法。

4)当然没有错。我也在某处看到了一个在线实现,有点失望你不能一步一步地看蚂蚁......

于 2014-04-17T20:26:58.090 回答