あと残っているのは、淘汰、突然変異、交差なのですが、
今回は淘汰を作っていこうと思います。
淘汰は今まで作った遺伝的アルゴリズムのものと同様に、
評価で求められたスコアの良かった順に並べ替えて、
上から20%を残し、80%を淘汰するといったようなものをつくろうと思います。
def main(): popsize elite topelite = int(elite * popsize) popGrope = [] #淘汰開始 score = [] popScore = [(score[i],popGrope[i]) for i in range(popsize)] popScore.sort() popScore.reverse() ranked = [v for (s,v) in popScore] # popGrope = ranked[:topelite] return ranked[:topelite] #淘汰終わり
今まで一番シンプルなものになりました。
淘汰方法には他にも、トップは残して、2番手以降は生存確率をかけて残していくようなやり方もあるみたいです。
次回は突然変異を作ります。
0 件のコメント:
コメントを投稿