1.初始化问题
求f(x)=10sin5x+7cos4x在[0,10]处的极值
population_size = 500 # 种群数量
generations = 200 # 迭代次数
chrom_length = 10 # 染色体长度
pc = 0.6 # 交配概率
pm = 0.01 # 变异概率
genetic_population = [] # 种群的基因编码(二进制)
population = [] # 种群对应的十进制数值,并标准化范围到[0, 10]
fitness = [] # 适应度
fitness_mean = []
optimum_solution = [] # 每次迭代的所获得的最优解
2.染色体编码与解码
编码:每个染色体随机产生十位二进制
解码:二进制转十进制并标准化范围到[0, 10]
# 为染色体进行0,1编码,生成初始种群
def chrom_encoding():
for i in range(population_size):
population_i = []
for j in range(chrom_length):
population_i.append(random.randint(0, 1))
genetic_population.append(population_i)
# 对染色体进行解码,将二进制转化为十进制
def chrom_decoding():
population.clear()
for i in range(population_size):
value = 0
for j in range(chrom_length):
value += genetic_population[i][j] * (2 ** (chrom_length - 1 - j))
population.append(value * 10 / (2 ** (chrom_length) - 1))
3.染色体的适应度
设置染色体的适应度,这里为函数值,并获取最大适应度的个体和对应的编号
def calculate_fitness():
sum = 0.0
fitness.clear()
for i in range(population_size):
function_value = 10 * math.sin(5 * population[i]) + 7 * math.cos(4 * population[i])
if function_value > 0.0:
sum += function_value
fitness.append(function_value)
else:
fitness.append(0.0)
# 返回群体的平均适应度
return sum / population_size
# 获取最大适应度的个体和对应的编号
def