属性フィットネスを持つオブジェクト (染色体) のリストがあります (chromosome.fitness は 0 と 1 の間です)
そのようなオブジェクトのリストが与えられた場合、選択される可能性がその適合度に比例する単一の染色体を返す関数をどのように実装できますか? つまり、適応度 0.8 の染色体は、適応度 0.4 の染色体の 2 倍の確率で選択されます。
Python と疑似コードの実装をいくつか見つけましたが、この要件には複雑すぎます。関数には染色体のリストしか必要ありません。染色体は、自身の適応度を内部変数として保存します。
私がすでに書いた実装は、染色体がそれ自身の適応度を保存できるようにする前のものでした。そのため、はるかに複雑で、zip リストなどを含むものでした。
- - - - - - - - - - - - - - 編集 - - - - - - - - - - - -------
ありがとうラティウェア。次の関数が動作するようです。
def selectOne(self, population):
max = sum([c.fitness for c in population])
pick = random.uniform(0, max)
current = 0
for chromosome in population:
current += chromosome.fitness
if current > pick:
return chromosome