ワンマックス問題のコードを書いています。
エラーの処理ができず、困っているためご教授いただければ幸いです。
コードは以下のようなものを書いています。
python3
1#条件設定 2length = 100 #染色体の長さ 3population = 100 #各世代の染色体の数 4new_population = 50 #子孫の数 5mutation_rate = 0.01 #突然変異する確率 6generationcount = 100 #最大世代数 7 8#初期個体群の生成 9import random 10import copy 11def production(length,population): 12 gene = [[random.randint(0,1) for i in range(length)] for j in range(population)] 13 return gene 14 15#適応度の評価 16def evaluation(gene): 17 evaluate = [] 18 for i in range(population): 19 evaluate.append(sum(gene[i])/length) 20 21 return evaluate 22 23#最小値の探索 24def find_min(evaluate): 25 min = 5 26 for i in range(population): 27 if evaluate[i] < min: 28 min = evaluate[i] 29 return min 30 31#最大値の探索 32def find_max(evaluate): 33 max = 0 34 for i in range(population): 35 if evaluate[i] > max: 36 max = evaluate[i] 37 return max 38 39#親選択 40def choice(gene,evaluate): 41 father_index = random.randint(0,99) 42 mother_index = random.randint(0,99) 43 if evaluate[father_index] > evaluate[mother_index]: 44 parent = gene[father_index] 45 else: 46 parent = gene[mother_index] 47 return parent 48 49#交叉 50def crossover(father,mother): 51 offspring = [] 52 for i in range(length): 53 p = random.random() 54 if p < 0.5: 55 offspring.append(father[i]) 56 else: 57 offspring.append(mother[i]) 58 return offspring 59 60#突然変異 61def mutation(gene,offspring): 62 for i in range(population): 63 p = random.random() 64 if p < mutation_rate: 65 if offspring[i] == 0: 66 offspring[i] = 1 67 else: 68 offspring[i] = 0 69 return offspring 70 71#エリート主義 72def elite(evaluate,gene,new_gene): 73 sort_evaluate = sorted(evaluate, reverse=True) 74 gene_tmp =[] 75 for i in range(new_population): 76 gene_index = evaluate.index(sort_evaluate[i]) 77 gene_tmp.append(gene[gene_index]) 78 gene_tmp.append(new_gene) 79 return gene_tmp 80 81#繁殖を行っていく 82def main(): 83 generationcount = 1 84 gene = production(length,population) 85 new_gene = [] 86 87 while generationcount <= 100: 88 new_gene.clear() 89 90 evaluate = evaluation(gene) 91 min = find_min(evaluate) 92 max = find_max(evaluate) 93 94 print("generation: "+ str(generationcount)) 95 print("MIN: " + str(min)) 96 print("MAX: " + str(max)) 97 if min == 100: 98 break 99 100 for i in range(new_population): 101 father = choice(gene,evaluate) 102 mother = choice(gene,evaluate) 103 104 offspring = crossover(father,mother) 105 offspring = mutation(gene,offspring) 106 new_gene.append(offspring) 107 108 gene = elite(gene,evaluate,new_gene) 109 generationcount += 1 110 print("---------------------------") 111 112if __name__ == "__main__": 113 main()
上記のコードを実行したところ以下のようなエラーが出ました。
error
1<ipython-input-92-ca83b1e4f9ad> in evaluation(gene) 2 2 evaluate = [] 3 3 for i in range(population): 4----> 4 evaluate.append(sum(gene[i])/length) 5 5 6 6 return evaluate 7 8TypeError: 'float' object is not iterable
自分で少し調べてみたところ、似た質問があったのですがうまく修正することができませんでした。
解決策を教えていただければ幸いです。
よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー