前提・実現したいこと
遺伝的アルゴリズムでOneMax問題を解くプログラムをpythonで実装しようと考えています。
エラーコードの意味は分かりましたが、なぜそのエラーがでたのかはわかりませんでした。
どなたかお力添えいただけると幸いです。
発生している問題・エラーメッセージ
エラーはevaluation関数の
fitness.append(sum(gene[i]))
で発生しています。
TypeError: unsupported operand type(s) for +: 'int' and 'list'
該当のソースコード
以下のコードは
first_generation():要素数10の0と1のビット配列を100個生成→リストgeneに100個体を格納
evaluation(gene):要素の合計を適応度とし、100個体分の適応度をリストfitnessに格納
main(): 他関数の呼び出しを行う。
となっています
def first_generation(): gene = [[random.randint(0, 1) for i in range(10)] for j in range(100)] return gene def evaluation(gene): fitness = [] for i in range(100): fitness.append(sum(gene[i])) return fitness def main(): gene = first_generation() next_gene = [] count_a = 0 while count_a < generation: fitness = evaluation(gene) generation_evaluation(fitness, count_a+1) elite = elite_selection(gene, fitness) # 優秀な30個体はそのまま引き継がれる next_gene.append(elite) count_b = 0 while count_b < child_n: # 生成する子個体の数は70 parents = tournament_selection(gene, fitness) child = cross(parents) child = mutation(child) next_gene.append(child) count_b += 1 gene = copy.deepcopy(next_gene) count_a += 1
試したこと
この遺伝的アルゴリズムを実装しているファイルとは別に個体数などを少なくしただけのファイルで実装したところ、問題なく実行できました。
補足情報(FW/ツールのバージョンなど)
個体が格納されているgeneの例
[ [1, 1, 0, 0, 1, 0, 0, 1, 1, 0], [0, 0, 0, 1, 1, 0, 1, 0, 1, 1], .....]
回答1件
あなたの回答
tips
プレビュー