遗传算法(GA)求函数极值

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 
  • 2
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

I will be here

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值