遗传算法:较高的突变率导致较低的运行时间

时间:2016-03-23 13:07:27

标签: python genetic-algorithm traveling-salesman genetic-programming

我实施了一种遗传算法来解决增强的旅行商问题(边缘的权重随着时间的推移而变化)。目前我正在评估我的模拟的不同参数,我偶然发现了一个我无法向自己解释的相关性:

mutation rate - runtime

更高的突变率可以缩短运行时间。就个人而言,我会假设相反,因为更高的突变率会产生更多的操作。 (25%的突变率比5%快12%)

最佳结果是突变率达到8%(5%优于10%,25%表现最差(0%除外))适应值越低越好。

result - mutation rate

迭代计数由生成参数设置,在所有测试用例中设置为10.000。

每个测试用例执行10次。

我在突变中的实现(在python中)如下所示:

def mutate(self,p):
    for i in self.inhabitants:
        r = random()
        if r <= p:
            i.mutate()

p是突变率

突变看起来像这样

def mutate(self):
    r1 = randint(0,self.locations.size()-1)
    r2 = randint(0,self.locations.size()-1)
    self.locations.swap(r1,r2)

为什么更高的突变率会导致更快的执行时间?

编辑:我实际上在我的Raspberry Pi上运行了相同的测试(速度慢了9倍)并且结果相同:

time - mutation on pi

2 个答案:

答案 0 :(得分:3)

如果没有看到完整的代码,就不可能知道,但以下似乎是合理的:

当突变率较低时,经过几代后,群体变得比突变率更高时更加均质。假设您正在使用轮盘赌样本的一些变化,一个更均匀的人口意味着轮盘赌的每个“旋转”平均花费的时间比您拥有更多变化的人口(相对较少的成员将主导分配在扫描较少的人口成员后,往往会选择适合度。

更确切地说,您可以使用cProfile之类的分析工具来查看这些CPU周期的确切位置。

答案 1 :(得分:0)

突变的每个周期 i 具有提供可接受解决方案的概率 p i ,并且评估周期所花费的时间是Ť<子> I 的。 p i T i 都随突变率而增加。因此,算法的预期运行时间是在找到答案所需的预期周期数之间的总和Σ p i T i 。较高的突变率会增加每个术语的大小,但会减少总和的术语数量。有一个最优的突变率可以最小化这个总和。