蚁群优化中的数据并行

时间:2014-06-11 09:18:10

标签: multithreading algorithm ant parallel-processing

我一直试图了解如何使用数据并行实现ACO优化。我在Google搜索后看过一些内容。我只需要简单的基本想法。大多数论文都用简单的语言谈论其他一切而不是主要的东西。

到目前为止我所理解的是,我们将通过使用多任务(线程)使其并行工作。但我不确定每个线程会做什么,或者我们如何将它分成线程而不会造成麻烦。

这是否意味着我们应该为每只蚂蚁创建单独的线程?但这会导致很多线程被创建!那么,如果有200个蚂蚁,那么200个线程?

我仍然对ACO中的数据并行主题感到困惑。我真的很想听听我们如何平行地实现它。

1 个答案:

答案 0 :(得分:0)

并行运行ACO的一些简单想法

由于您已经阅读了ACO,以下是一些关于并行运行ACO的简单方法。而不是陷入多线程和多任务处理中,考虑“并行计算资源”可能会有所帮助。

ACO是Agent-Based Simulation(ABS)的一个案例,ABS特别适合于parellization。

简单选项

选项1 。在每个并行资源中运行完整版本的ACO。

编写ACO算法代码,并行运行。 (由于算法存在随机因素,因此您可以为您的问题寻找“最佳”解决方案。)

选项2 。探讨不同ACO参数的影响

与任何模拟方法一样,任何ACO实现都有大量的运行时参数:顶点数,运行时间,蚂蚁数,信息素蒸发率,选择路径选项的概率函数等等。当您多次使用这些选项时,它们会累计运行大量案例。将您的并行计算资源之间的工作分开。

上面提到的两个选项有时被称为“令人尴尬”的并行。非常容易实现(将其视为实验设计)并且您可以获得整个结果矩阵,您可以通过研究参数变化对解决方案的影响来得出结论。

解决方案共享选项

选项3 :主从方法,部分解决方案共享

在复杂性上再提高一级,我们可以使用每个节点将其“知识/发现”贡献给整体问题解决方案。这有时被称为主从方法。 master试图解决整体问题(可能是TSP,或者一些类似的复杂问题),每个“奴隶”正在解决它的某些方面,但有一些相当简单的算法。我们的想法是,当组合时,它们会产生强大的结果。

经过一定次数的迭代后,解决方案会来回传递,并会抛出“坏”解决方案。 Map-Shuffle-Reduce范式的一些变体可以做到这一点。主设备评估当前的最佳解决方案,然后将其传输回每个“从属”节点(例如:将最新的整体信息素级别提供给所有从属节点)。下一轮解决简历。

选项3有很多微妙的变化,有些人一生都在改善它的各个方面。

希望其中一些想法有所帮助。