遗传算法-父代选择与交叉概率

时间:2018-12-28 16:02:54

标签: genetic-algorithm

我阅读了TutorialsPointthis question and answer on StackOverflow上的教程。但是,在遗传算法的“父代选择和交叉”过程中,我仍然不了解交叉概率的含义。

说我的人口为100,交叉概率为0.9。这是什么意思?我可以吗?

  • 精确选择10个父母(因为90%的后代将通过分娩而获得),或
  • 运行RNG 100次,每次出现0.9概率失败时,我都选择一个父级?

然后,父母不知何故越过了,有些人变异了。此时人口是否需要正好有100名成员,或者还有哪些人可以加入下一代?

2 个答案:

答案 0 :(得分:2)

如致癌物所提到的,实现方式可能会有所不同。 0.90的交叉率表示将通过对父解决方案的交叉操作来创建90%的后代(即子代)种群。可以实现这一点,以使每一代人通过交叉产生正好90%的孩子,或者可以概率地实现(如AI_Learning的示例中所做的那样)。交叉产生的孩子可能也可能不会突变。

如何选择父解决方案也可能有所不同。可能更可能选择更适合的父母解决方案来产生后代,并且无论产生什么后代都将构成下一代的父母群体。或者,可以随机选择母体溶液以产生后代。然后对合并的父母和后代种群进行选择,以创建下一代的父母种群。

通常,父母人口将始终等于规定的人口规模。但是,有可能产生更多的后代,然后仅选择一个子集。或者每一代只能创建几个后代,每个后代都可能替代父代解决方案。一些实施方案还可能会随着时间的推移改变人口规模,也许首先使用大量的人口来促进勘探,然后随着时间的推移减小人口的规模来促进剥削。

答案 1 :(得分:1)

它不完全是10个父母,平均10个父母。 以下是我遵循的伪代码。

current_population <- comes from previous generation
new_population <- []

for i upto number of chromosomes in current_population :
    parent1, parent2 <- pick 2 parents from current population based on fitness function

    if random_number is less than cross_over_ratio :
        offspring <- crossover (parent1, parent2)
    else:
        if random_number is 0.5:
            offspring <- parent1
        else:
            offspring <- parent2

    append the offspring to new_population

for i upto number of chromosomes in new_population :

    if random_number is less than mutation_ratio :
        i_th chromosome in new_population <- mutation (i_th chromosome in new_population)