2017-06-22 4 views
1

私はDEAPを使い始めています。以前は、MATLABをベースにしたGAを使用しました。これは、クロスオーバと突然変異の後に、指定されたサイズのより良い個体を選択し、その後、個体群を更新することです。DEAPでの無効なフィットネスの重要性は何ですか?

invalid_ind = [ind for ind in offspring if not ind.fitness.valid] 
fitnesses = map(toolbox.evaluate, invalid_ind) 
for ind, fit in zip(invalid_ind, fitnesses): 
    ind.fitness.values = fit 

私はこれらのコードを削除することを試みたが、それは、アルゴリズムがするようだ:私はなぜDEAPでインクルードが無効フィットネスが交叉と突然変異の手順の後に必要とされているとの個人を評価することを理解するしかし、それは非常に困難です収束しない。そして、私は人口/子孫を更新することができる人たちを見ていませんでした。前もって感謝します!!!

答えて

1

いくつかのテストの後、有効な適応性を有する個体の評価は、交叉および突然変異手順後の個体の適合度を評価するためのものである。我々は、このコードから見ることができます:

# Apply crossover and mutation on the offspring 
for child1, child2 in zip(offspring[::2], offspring[1::2]): 
    if random.random() < CXPB: 
     toolbox.mate(child1, child2) 
     del child1.fitness.values 
     del child2.fitness.values 

for mutant in offspring: 
    if random.random() < MUTPB: 
     toolbox.mutate(mutant) 
     del mutant.fitness.values 

delを使用して削除されたクロスオーバー-EDおよび変異それらの個人の適応度。したがって、invalid_ind = [ind for ind in offspring if not ind.fitness.valid]を使用して再評価する個人を選択すると、計算量が大幅に削減されます。また、子孫全体を再評価することもできます。

fitnesses = map(toolbox.evaluate, offspring) 
for ind, fit in zip(offspring, fitnesses): 
    ind.fitness.values = fit 

このように、計算負担が増える可能性があります。結論として、この再評価は、個人の適応度に基づいて、各個人に適応を割り当て、offspring = toolbox.select(pop, len(pop))で選択操作の準備ができていることが必要である。

関連する問題