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

Str*_*rnd 7 python genetic-programming traveling-salesman genetic-algorithm

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

突变率 - 运行时

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

突变率为8%(5%优于10%,25%表现最差(0%除外)),效果最佳.适应值越低越好.

结果 - 突变率

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

每个测试用例执行10次.

我在变异中的实现(在python中)看起来像这样:

def mutate(self,p):
    for i in self.inhabitants:
        r = random()
        if r <= p:
            i.mutate()
Run Code Online (Sandbox Code Playgroud)

p 是突变率

突变看起来像这样

def mutate(self):
    r1 = randint(0,self.locations.size()-1)
    r2 = randint(0,self.locations.size()-1)
    self.locations.swap(r1,r2)
Run Code Online (Sandbox Code Playgroud)

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

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

时间 -  pi的变异

che*_*ner 0

每个突变周期 i都有提供可接受解决方案的概率p i,评估一个周期所需的时间Tip iT i都随着突变率的增加而增加。因此,算法的预期运行时间是找到答案所需的预期周期数的总和Σ p i T i 。较高的突变率会增加每项的大小,但会减少要求和的项的数量。有一个最佳突变率可以最小化这个总和。

  • @chepner 你怎么知道突变会减少求和项的数量?我没有看到任何表明这一点的东西。 (2认同)