1

これは Python の pyevolve ライブラリの例です。

from pyevolve import G1DList
from pyevolve import GSimpleGA
import time
def eval_func(chromosome):
     score = 0.0
     for value in chromosome:
         if value == 50:
            score += 1
return score

genome = G1DList.G1DList(20)
genome.evaluator.set(eval_func)
ga = GSimpleGA.GSimpleGA(genome)
ga.evolve(freq_stats=10)
print ga.bestIndividual()

この例では、スコアが増加するたびに出力がより正確になるため、スコアは理にかなっています。

しかし、染色体要素の合計を200などの特定の値にしたい場合、スコアを決定する方法またはスコアを作成する最良の方法は何ですか.

ありがとう

編集:

これは合計のコードですが、正しい/望ましい出力が得られません。それは常に必要な答えよりも大きいか小さいかのどちらかです。

from pyevolve import G1DList
from pyevolve import GSimpleGA
import time

def eval_func(chromosome):
    score = 0.0
    sum_  = 0.0

    for value in chromosome:
        sum_ = sum_ + value

    score_ = abs(200 - sum_)
    score  = float(1/score_)
    return score

genome = G1DList.G1DList(20)
genome.evaluator.set(eval_func)
ga = GSimpleGA.GSimpleGA(genome)
ga.evolve(freq_stats=10)
print ga.bestIndividual()

より良いスコア評価方法を提案してください。

4

1 に答える 1

1

評価関数にリストのすべての要素を取得させ、リストのすべての要素の値を追加します。次に、取得した値から目的の値を引き、結果の絶対値を取得します。最後に、これを 1/(値) のような分数の下に置くと、最小の数値の最大値が返されます。

編集: コードを 1/(1+value) に変更して、値がゼロの場合、エラーではなく 1 の適切な出力が得られるようにする必要があります。

于 2016-10-08T00:39:55.277 に答える