2015年1月28日水曜日

遺伝的アルゴリズムでカブロボ制作⑤ 突然変異プログラムの設計

前回に引き続き、遺伝的アルゴリズムで作る株ロボットを作っていきます。
今回は突然変異を作成します。
突然変異も以前作成した、ナップザック問題の時に作ったコードを流用しようと思ったのですが、
今回は一個体あたり、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 件のコメント:

コメントを投稿