哪些个人应该在遗传算法中交叉和/或变异?

时间:2019-08-05 16:04:40

标签: artificial-intelligence genetic-algorithm mutation crossover

我目前正在使用Python实现遗传算法,并且是在Andries P. Engelbrecht撰写的“计算智能-简介,第二版”一书的基础上进行的。我的理解是您执行fitness calc, selection, crosover and mutation的每一代。

我目前的总体策略是:

while not stopping_criteria():
   next_population = []        

    # Step 1. Calculate Fitness
    for each individual in population:
        calculate_fitness()

    # Step 2. Grab some number of top performers to copy over
    top_performers = ellitism(population, 2) # Grab top 2 for instance
    next_population += top_performers

    # Step 3. Selection/Crossover/Mutation
    # While the next_population has fewer individuals than the current population
    while length(next_population) < length(population):
        # Step 3.1 tournament selection of tournament size 4, top 2
        parent1, parent2 = tournament_selection(population)

        # Step 3.2 Crossover using SBX
        child1, child2 = simulated_binary_crossover(parent1, parent2)

        # Step 3.3 Mutation of children?
        gaussian_mutation(child1, 0.05)
        gaussian_mutation(child2, 0.05)

        next_population += [child1, child2]

我相信我正在正确执行步骤1 - 3.1。我的问题确实是:

  1. 交叉是否正确?这是进行比赛选择的好方法吗?我想确保总体人口仍然具有一定的多样性,这样我就可以避免局部最优。这就是为什么我只想挑选表现最好的两位表演者,然后复制他们(尽管也许太多)了。

  2. 关于交叉,可以给每个孩子一个小的概率来突变每个基因吗?根据当前人群的适应性给出可变的突变率会更好吗?

我已经在许多方程式上测试了我的方法,但是发现有时我仍然陷入局部最大值。使用f(x,y) = -| 2x^2 - 1.05x^4 + ((x^6)/6) + xy + y^2 |(来自https://en.wikipedia.org/w/index.php?title=Test_functions_for_optimization&oldid=787014841的三驼峰骆驼函数),我大部分时间都发现(0, 0),但有时还是会卡在它附近。这主要是为什么我想知道我的交叉/变异方法是否关闭的原因。

0 个答案:

没有答案