今回は突然変異を作成します。
突然変異も以前作成した、ナップザック問題の時に作ったコードを流用しようと思ったのですが、
今回は一個体あたり、2つの遺伝子を持っていて、そのうちひとつのみを変異させて、
2つセットに戻して、ひとつの個体として個体群に格納する。
といった少々流用しにくい形になっているため、作りなおしました。
import random
def main():
popGrope = []
mutprob = 0
# scoOrGean = 1
popSelect = 0
uriOrKai = 0
preMutGean = 0
afterMutEnki = 0
afterMutGean = 0
enkiSelect = 0
#突然変異
if random.SystemRandom().random() < mutprob:
popSelect = random.SystemRandom().randint(0,len(popGrope)-1)
uriOrKai = random.SystemRandom().randint(0,1)
preMutGean = popGrope[popSelect][uriOrKai]
afterMutEnki = random.choice([-1,1])
enkiSelect = random.SystemRandom().randint(0,popnum-1)
afterMutGean = preMutGean[:enkiSelect] + [afterMutEnki] +\
preMutGean[enkiSelect+1:]
afterMutPop = popGrope[popSelect]
afterMutPop[uriOrKai] = afterMutGean
popGrope.append(afterMutPop)
#突然変異
0 件のコメント:
コメントを投稿