问题标签 [ant-colony]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
242 浏览

python - 一种简单蚁群算法的实现

本文中,描述了一个非常简单的模型来说明蚁群算法的工作原理。简而言之,它假设两个节点通过两条链路连接,其中一条链路较短。然后,给定信息素增量和信息素蒸发动力学,人们预计所有蚂蚁最终都会选择较短的路径。

现在,我正在尝试复制与上述场景相对应的本文的模拟,其结果应该(或多或少)如下所示。

在此处输入图像描述

这是我的一个实现(采用与上述测试相同的规范)。

但是,我得到的结果很奇怪,如下所示。

在此处输入图像描述

看来我对信息素应该如何更新的理解是有缺陷的。

那么,可以解决我在此实现中缺少的内容吗?

0 投票
1 回答
67 浏览

webgl - Webgl - 您可以在片段着色器中写入纹理的任意位置吗?

我正在考虑使用 webgl重新创建这个蚁群模拟。

我计划使用它的 rgba 通道将所有蚂蚁代理的状态(x,y,方向)存储在单个纹理中。在绘制调用期间,将读取此纹理的每个像素,并根据像素的值,将写入另一个纹理中的某些位置。

这是使用 webgl 的任何方法吗?最好我不想使用 gl.readPixel 并让所有东西都在 gpu 上运行模拟。

0 投票
1 回答
154 浏览

python - 在 python 中使用 ACO 从文本文件中读取 TSP 问题的数据集

我需要弄清楚如何修改此代码,以便我可以在名为“TSP_6.txt”的文本文件中读取此数据。这是使用蚁群优化的 TSP 问题 这是我正在使用的格式:TSP_6.txt。

而这是我目前的代码,代码三类,主:“main.py”

还有蚁群优化类:“aco.py”

最后是情节类:“plot.py”

0 投票
3 回答
124 浏览

python - 如何调用模块对象?

我尝试ant_colony.py在 Python 中运行这个 Ant Colony 算法代码 ( ):

我的模块测试文件是:

但是当它运行时,会出现这个错误:

我尝试了很多方法,但它们根本不起作用。我尝试测试两个坐标而不是distance,我尝试使用参数等进行测试,但它们不起作用。我该如何解决?

0 投票
0 回答
14 浏览

class - python - 如何将我的函数从不同的类调用到python中的另一个类?

我目前正在为我的蚁群优化算法制作ACO课程。我试图从我的Ant类中调用我的visit_attraction函数到我在for循环中的ACO类中。我不断收到 TypeError 并说它不可调用。这是我的ACO类中的代码:

0 投票
1 回答
99 浏览

python - Python 和 C++ 中最近字符串问题的蚁群优化的异常行为

这可能是一个很长的问题,我提前道歉。

我正在开展一个项目,目标是研究最接近字符串问题的不同解决方案。

s_1, ... s_n为长度为m的字符串。找到一个长度为m的字符串s,使其最小化max{d(s, s_i) | i = 1, ..., n},其中d是汉明距离。

一种已经尝试过的解决方案是使用蚁群优化的解决方案,如此所述。

论文本身并没有涉及到实现细节,所以我在效率上已经尽力了。然而,效率并不是唯一不寻常的行为。

我不确定这样做是否是常见的做法,但我将通过 pastebin 展示我的代码,因为我相信如果我应该将它直接放在这里它会压倒线程。如果结果证明这是一个问题,我不介意编辑线程以将其直接放在这里。正如我之前尝试过的所有算法一样,我最初是用 python 编写的。这是代码:

utils.problem_metric函数如下所示:

我已经看到您可以向 ACO 添加更多的调整和其他参数,但我现在保持简单。我使用的配置是 250 次迭代,菌落大小 od 10 ant 和rho=0.1。我正在对其进行测试的问题来自这里:http ://tcs.informatik.uos.de/research/csp_cssp ,称为2-10-250-1-0.csp(第一个)。字母表仅由'0'和'1'组成,字符串长度为250,总共有10个字符串。

对于我提到的ACO配置,这个问题,使用python求解器,平均在5秒内得到解决,平均目标函数值为108.55(模拟20次)。正确的目标函数值为 96。具有讽刺意味的是,与我第一次尝试实施此解决方案时的平均值相比,5 秒的平均值很好。然而,它仍然出奇的慢。

在做了各种优化之后,我决定尝试在 C++ 中实现完全相同的解决方案,看看运行时间之间是否会有显着差异。这是 C++ 解决方案:

现在的平均运行时间仅为 530.4 毫秒。但平均目标函数值为122.75,明显高于python方案。

如果平均函数值相同,并且时间不变,我会简单地将其写为“C++ 比 python 快”(尽管速度上的差异也很可疑)。但是,由于 C++ 产生了更糟糕的解决方案,它让我相信我在 C++ 中做错了什么。我怀疑的是我使用权重生成字母索引的方式。在python中,我使用random.choices如下方式完成了它:

至于 C++,我有一段时间没做过了,所以我对阅读 cppreference (这是它自己的一项技能)有点生疏,std::discrete_distribution解决方案是我从参考资料中简单复制的内容:

这里的可疑之处在于我在全局声明std::random_deviceandstd::mt19937对象并且每次都使用相同的对象。我还没有找到答案,这是否是它们的使用方式。但是,如果我把它们放在函数中:

平均运行时间明显变差,为 8.84 秒。然而,更令人惊讶的是,平均函数值也变得更糟,为 130。同样,如果两件事中只有一件发生了变化(比如时间增加了),我本来可以得出一些结论。这样只会变得更加混乱。

那么,有人知道为什么会这样吗?

提前致谢。

主要编辑:问了这么大的问题,而实际上问题出在一个简单的错字上,我感到很尴尬。即在 C++ 版本的蒸发步骤中,我放了一个 + 而不是 *。现在,算法在平均解决方案质量方面表现相同。但是,我仍然可以使用一些技巧来优化 python 版本。

0 投票
1 回答
225 浏览

algorithm - ACO和PSO与遗传算法的异同

大家好,我想知道蚁群优化算法粒子群优化遗传算法之间的主要异同点是什么。

0 投票
0 回答
15 浏览

traveling-salesman - 如何通过ACO(蚁群优化)算法解决MTSP(多旅行商问题)?

我尝试通过 ACO 解决 MTSP(多旅行商问题),我通过 ACO 编写了 TSP 并且很清楚它是如何工作的,但是当我尝试解决 MTSP 时有很多事情不清楚,如何选择城市数量对于每个 Ant,如何表示路线,如何更新信息素矩阵,