Multithreading 蚁群算法中的数据并行性

Multithreading 蚁群算法中的数据并行性,multithreading,algorithm,ant,parallel-processing,Multithreading,Algorithm,Ant,Parallel Processing,我一直在试图理解如何通过数据并行实现ACO优化。在谷歌搜索后,我读了一些内容。我只需要用简单的方式来表达基本的想法。大多数报纸都在谈论其他的事情,而不是简单地谈论主要的事情 到目前为止,我所了解的是,我们将通过使用多任务(线程)使其并行工作。但我不确定每个线程会做什么,也不知道如何将其分割成线程而不引起麻烦 这是否意味着我们应该为每个蚂蚁创建单独的线程?但这会导致创建大量线程!如果有200只蚂蚁,那么有200条线 我仍然对ACO中的数据并行性主题感到困惑。我真的很想用简单的话来了解我们将如何并行

我一直在试图理解如何通过数据并行实现ACO优化。在谷歌搜索后,我读了一些内容。我只需要用简单的方式来表达基本的想法。大多数报纸都在谈论其他的事情,而不是简单地谈论主要的事情

到目前为止,我所了解的是,我们将通过使用多任务(线程)使其并行工作。但我不确定每个线程会做什么,也不知道如何将其分割成线程而不引起麻烦

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

我仍然对ACO中的数据并行性主题感到困惑。我真的很想用简单的话来了解我们将如何并行实现它。

一些并行运行ACO的简单想法 既然您已经阅读了ACO,下面是一些并行运行ACO的简单方法。与其纠缠于多线程和多任务,不如考虑一下您可以使用的“并行计算资源”

ACO是(ABS)的一个例子,ABS特别适合于parellization

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

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

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

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

上述两种选择有时被称为“尴尬地”平行。很容易实现(把它看作是一个实验设计),你可以得到一个完整的结果矩阵,你可以通过研究参数变化对解决方案的影响得出结论

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

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

经过一定数量的迭代后,解决方案被来回传递,而“坏”的解决方案被抛出。Map-Shuffle-Reduce范式的一些变体可以做到这一点。主节点评估当前最佳解决方案,并将其传输回每个“从属”节点(例如:所有从属节点都会获得最新的总体信息素水平)。下一轮解决继续进行

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


希望这些想法能有所帮助。

创建硬件处理的线程数(如果您有GPU,则会更多),并在其中分配蚂蚁数并并行运行。这意味着每个线程中的每个蚂蚁对吗?每个线程的蚂蚁数/线程数,线程数=处理器数*2,可以通过编程获得。如果有GPU,那么你可以安排更多的线程。谢谢。我想我需要读更多的书来获得更多的想法。我再读一遍后再给你回复。再次感谢您的详细解释。