質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

解決済

PyhtonによるAttributeErrorについてです

bbiiq
bbiiq

総合スコア7

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1回答

-1評価

0クリップ

176閲覧

投稿2021/07/16 00:42

編集2021/07/16 01:34

前提・実現したいこと

Pythonによる遺伝的アルゴリズムを使ったOneMax問題プログラムを参考書を見ながら打ち込んだのですが、以下のエラーが発生してしましす。
原因は、ToolBoxオブジェクトにIndividualがないということらしいのですが、どう改善したらよいのでしょうか?

発生している問題・エラーメッセージ

AttributeError Traceback (most recent call last) <ipython-input-1-6818f7387b43> in <module> 21 toolbox.register("Individual",tools.initRepeat,creator.Individual,toolbox.attr_bool,num_bits) 22 ---> 23 toolbox.register("population",tools.initRepeat,list,toolbox.individual) 24 toolbox.register("evaluate",eval_func) 25 toolbox.register("mate",tools.cxTwoPoint) AttributeError: 'Toolbox' object has no attribute 'individual'

該当のソースコード

Python

import random from deap import base,creator, tools random.seed(7) num_bits = 75 #----適応度関数(1を75個生成し、そのうち45個を1にすることが目標)---- def eval_func(individual): target_sum = 45 return(len(individual) - abs(sum(individual) - target_sum),) #----適応度関数や個体群(遺伝子)を管理するためのオブジェクト生成---- creator.create("FitnessMax",base.Fitness,weight=(1.0,)) creator.create("Individual",list,fitness=creator.FitnessMax) #----toolboxを作成し、関数を定義しながら格納する---- toolbox = base.Toolbox() toolbox.register("attr_bool",random.randint,0,1) toolbox.register("Individual",tools.initRepeat,creator.Individual,toolbox.attr_bool,num_bits) toolbox.register("population",tools.initRepeat,list,toolbox.individual) toolbox.register("evaluate",eval_func) toolbox.register("mate",tools.cxTwoPoint) #交叉 toolbox.register("mutate",tools.mutFlipBit,indpb=0.05) toolbox.register("select",tools.selTournament,tournsize=3) #----初期個体生成---- population = toolbox.population(n=500) probab_crossing,probab_mutating = 0.5,0.2 num_generations = 60 #----個体評価---- print('\n評価開始') fitnesses = list(map(toolbox.evaluate,population)) for ind,fit in zip(population , fitnesses): ind.fitness.values = fit print('\n評価済み個体 : ',len(population)) for g in range(num_generations): print('\n======第' , g , '世代======') #----新世代作成---- offspring = toolbox.select(population,len(population)) offspring = list(map(toolbox.clone,offspring)) #----交叉---- for child1,child2 in zip(offspring[::2],offspring[1::2]): if random.random() < probab_crossing: toolbox.mate(child1,child2) #適応度をリセットする del child1.fitness.values del child2.fitness.values #----突然変異---- for mutant in offspring: if random.random() < probab_mutating: toolbox.mutate(mutant) del mutant.fitness.values #----リセットされた個体を再評価---- 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 print('Evaluated',len(invalid_ind),'individuals') #----新世代に置き換える---- population[:] = offspring #----進捗を表示---- fits = [ind.fitness.values[0] for ind in population] length = len(poplulation) mean = sum(fits) / length sum2 = sum(x*x for x in fits) std = abs(sum2 / length - mean**2)**0.5 print('最小 = ', min(fits),' , 最大 = ',max(fits)) print('平均 = ',round(mean,2),' , 標準偏差 = ',round(std,2)) #----最終出力---- print('\n======最終評価======') best_ind = tools.selBest(population,1)[0] print('\n最大となるのは : \n',best_ind) print('\n1の個数 : ',sum(best_ind))

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。