遗传算法均匀变异

import numpy as np
import random

pop_1=np.array([[1, 11, 21,9,16,10,8,17],
                  [2, 12, 22,10,17,11,9,18],
                  [3, 13, 23,11,18,12,10,19],
                  [4, 14, 24,12,19,13,11,20],
                  [5, 15, 25,13,20,14,12,21],
                  [6, 16, 26,14,21,15,13,22],
                  [7, 17, 27,15,22,16,14,23],
                  [8, 18, 28,16,23,17,15,24]])

# pop_1=np.array([[1, 11.3, 21,9,16,10,8,17],
#                   [2, 12.5, 22,10,17,11,9,18],
#                   [3, 13.2, 23,11,18,12,10,19],
#                   [4, 14.5, 24,12,19,13,11,20],
#                   [5, 15.4, 25,13,20,14,12,21],
#                   [6, 16.8, 26,14,21,15,13,22],
#                   [7, 17.4, 27,15,22,16,14,23],
#                   [8, 18.6, 28,16,23,17,15,24]])
def mutate(pop_1,pm):
    j = 0
    while j <= 3:
        px = len(pop_1)  # 种群中染色体的数目
        py = len(pop_1[0])  #每个染色体中基因的数目
        im = random.randint(0, px - 1)  # im为进行变异的染色体的索引
        # chrom_m = pop_1[im]  # 进行变异的染色体
        for i in range(py):   # 判断每条染色体的每个基因是否需要变异
            if (0.3 <= pm):
                pop_1[im][i] = pop_1[im][i]  # 不变异
            else:
                if type(pop_1[im][i]) is int:
                    pop_1[im][i] = random.randint(0, 10)  # 0,10为变量的上下界,若该变量是整数型,则变异后的基因也是整数型
                else:
                    pop_1[im][i] = random.uniform(10, 20)  # 若该变量是实数型,则变异后的基因也是实数型
        j+=1
    return pop_1
cxn = mutate(pop_1,0.2)
print(cxn)
发布了13 篇原创文章 · 获赞 0 · 访问量 114

猜你喜欢

转载自blog.csdn.net/huahua20190514/article/details/103191412