私は現在、Pythonの遺伝的アルゴリズムにDEAPを使用しています。長さがno_sensors
の個体の初期集団を作りたいと思います。私の問題は、random.choice(nodes)
の機能のために、いくつかのノードは同じになり、最初の長さはno_sensors
よりも小さくなります。この問題を解決する方法はありますかと思いまして:DEAP遺伝的アルゴリズム
creator.create("FitnessMax", base.Fitness, weights=(2.0, -1.0))
creator.create("Individual", set, fitness=creator.FitnessMax)
toolbox = base.Toolbox()
toolbox.register("attr_item", random.choice, nodes)
toolbox.register("individual", tools.initRepeat, creator.Individual, toolbox.attr_item, n=no_sensors)
toolbox.register("population", tools.initRepeat, list, toolbox.individual)
基本的に、私はリストnodes
からユニークなアイテムの固定長を必要としています。 random.sample(nodes, no_sensors)
を使用することを考えていましたが、エラーを発生させることなくコードに組み込むことができません。
他の例hereをチェックアウトできます。
しかし、問題は、random.choiceが同じ値を2回選択した場合、1つとして数えたいと思うことです。基本的には、リストから固定長の固有の項目が必要です。私はrandom.sample(nodes、no_sensors)を使用することを考えていましたが、エラーを発生させることなくコードに組み込むことはできません。 – meraxes
セットは変更可能であり、ハッシュ可能ではないのでリストを含めることはできません.'set([[1,2,3]、3]) TypeError:unhashable type: 'list'' –
ああ、そうです!私はIndividualの基盤をリストに変更しました。それでも、リスト内のリストは冗長に見えます。 – meraxes