あなたはインデックスのランダムな整数を生成するrandint
を使用して、同じように、それを反転し、インスタンス^1
ために使用することができます。
from random import randint
pop = [[1, 1], [0, 1], [0, 0], [0, 0]]
individual = pop[1] # select the second individual
individual[randint(0,len(individual)-1)] ^= 1 # flip the bit
私はこれを実行した後、私が得た:
>>> pop
[[1, 1], [0, 0], [0, 0], [0, 0]]
と表示され、2番目のビットが反転しました。しかし、それは最初のことでもありました。 len(individual)
を使用することにより、個人のビット数が増えると、それでも機能することが保証されます。
これは、リスト内の0-1のビットを符号化することはあまり効率的ではありません。 Pythonでint
をビットのリストとして使用できます(int
は任意の長さがpython-3.xにあります)。
for individual in pop: # iterate over population
individual[randint(0,len(individual)-1)] ^= 1 # flip a random bit
:
EDIT
あなたが(すべての個人のために、それは異なるビットをすることができます)個々あたりのビットを反転したい場合は、for
ループを使用することができます私があなたの与えられた最初の人口でこれを動かすと、私は得る:
>>> pop
[[0, 1], [1, 1], [0, 1], [1, 0]]
だから、すべての人がちょうど1ビット反転していて、すべて同じものではありません。もちろん、それはランダムであるため、特定の実行では、乱数ジェネレータがすべての個体に対して同じビットを選択する可能性があります。
あなたは任意のコードを試していないことがありますか? –