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)
遗传算法均匀变异
猜你喜欢
转载自blog.csdn.net/huahua20190514/article/details/103191412
今日推荐
周排行