【NEAT】python3(anaconda3)を使ってNEATを実装してみた(5/5)
前回は交配をして新たな子供の世代を作りました。この最終記事では、今までと同じ操作をwhileを用いて一気に操作します。
whileでループ
while 1:
'''種に分ける'''
species.speciate(population, generation)
'''成績を計算'''
FeedForwardNetwork.eval_genomes(list(population.items()))
best = None
for g in population.values():
if best is None or g.fitness > best.fitness:
best = g
if best_genome is None or best.fitness > best_genome.fitness:
best_genome = best
fv = max(g.fitness for g in population.values())
if fv >= fitness_threshold:
print('\nBest individual in generation {0} meets fitness threshold - complexity: {1!r}'.format(generation, best.size()))
break
'''交配'''
popus = DefaultReproduction()
population = popus.reproduce( species, pop_size, generation)
generation += 1
'''水準を超えた成績最優秀ネットワークの発表'''
winner=best_genome
print('\nBest genome:\n{!s}'.format(winner))
print('\nOutput:')
winner_net = FeedForwardNetwork.create(winner)
for xi, xo in zip(xor_inputs, xor_outputs):
output = winner_net.activate(xi)
print(" input {!r}, expected output {!r}, got {!r}".format(xi, xo, output))
NodesとConnectionsの数が最初に比べてかなり大きくなりました。これを図にすると、次のようになります。
1,2,3のNodesは中間層として存在します。論文を見ると、中間層がないと出力の精度は良くならないらしいので、その点で中間層ができていることは納得がいきます。
以上でNEATの説明を終わります!
今回は比較的挑戦しやすいと考えている排他的論理和について触れましたが、さらにSingle-Pole-Balancingなども挑戦したいと考えています。
ここまで続いた全5回の記事はここで終了となります。少しでも読者様のお役に立てれば嬉しいです。ここでまで読んでくださった方がいれば本当にありがとうございます。
何か誤りやご指摘があれがぜひコメントください。よろしくお願いします。
Author And Source
この問題について(【NEAT】python3(anaconda3)を使ってNEATを実装してみた(5/5)), 我々は、より多くの情報をここで見つけました https://qiita.com/sunachack/items/762317a8da5d3cd42af9著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .