遗传算法的实例(超详细)python

以下是一个使用Python编写的最简单的遗传算法示例。这个示例将解决一个简单的整数优化问题:找到使函数 f(x) = x^2 最小的整数 x(在这个简单的例子中,我们限制 x 的范围为0到7的整数)。虽然这个问题可以直接通过计算得出答案(即 x=0),但这里我们用它来展示遗传算法的基本概念。

import numpy as np  
  
# 评估函数,用于计算个体的适应度值  
def evaluate(individual):  
    return individual ** 2  # 在这个例子中,我们实际上想要最小化这个函数  
  
# 遗传算法的主要部分  
def genetic_algorithm(population_size, num_generations, mutation_rate, low, high):  
    # 初始化种群  
    population = np.random.randint(low, high, population_size)  
      
    # 迭代每一代  
    for generation in range(num_generations):  
        # 计算适应度值(这里实际上我们想要最小化,但遗传算法通常寻找最大值)  
        fitness = -np.array([evaluate(ind) for ind in population])  # 使用负值来模拟最大化  
          
        # 选择操作:这里我们简单使用轮盘赌选择,但为了简化,我们直接选择适应度最好的一半个体  
        idx = np.argsort(fitness)[::-1][:population_size//2]  
        mating_pool = population[idx]  
          
        # 交叉操作:由于问题简单,我们直接复制最好的一半到下一代(不交叉)  
        offspring = np.empty(population_size)  
        offspring[:population_size//2] = mating_pool  
          
        # 生成另一半后代(可以是随机生成或复制)  
        # 为了简化,我们直接复制剩余的一半  
        offspring[population_size//2:] = mating_pool  
          
        # 变异操作:随机改变后代中的一些值  
        for point in range(population_size//2, population_size):  
            if np.random.rand() < mutation_rate:  
                offspring[point] = np.random.randint(low, high)  
          
        # 更新种群为下一代  
        population = offspring  
          
        # 输出当前代的最优解  
        print(f"Generation {generation+1}: Best individual is {population[np.argmax(fitness)]} with fitness {np.max(fitness)}")  
      
    # 返回最后一代的最佳个体  
    return population[np.argmax(fitness)]  
  
# 设置参数  
population_size = 10  # 种群大小  
num_generations = 50  # 迭代代数  
mutation_rate = 0.1   # 变异率  
low = 0               # 变量下界  
high = 8              # 变量上界  
  
# 运行遗传算法  
best_individual = genetic_algorithm(population_size, num_generations, mutation_rate, low, high)  
print(f"The best solution found by GA is: {best_individual} with fitness {-evaluate(best_individual)}")

代码解释:

  1. evaluate 函数:用于计算个体的适应度值。在这个例子中,我们简单地计算 x^2 的值,但因为我们想要最小化它,所以在遗传算法中我们使用 -x^2(通过取负值)。

  2. genetic_algorithm 函数:遗传算法的主要部分。

    • 首先,我们初始化一个随机种群。
    • 然后,我们迭代每一代。
    • 在每一代中,我们计算每个个体的适应度值(使用 evaluate 函数)。
    • 接着,我们进行选择操作。在这个简单的例子中,我们只是选择了适应度最好的一半个体作为交配池。
    • 然后,我们进行交叉操作。但由于这个问题简单,我们直接复制了最好的一半个体到下一代,并没有进行真正的交叉。
    • 接下来,我们生成另一半后代。在这个例子中,我们只是简单地复制了交配池中的个体,但在实际应用中,你可以使用不同的策略来生成新的后代。
    • 接着,我们进行变异操作。在这个例子中,我们以一定的概率随机改变后代中的一些值。
    • 最后,我们用新的后代更新种群,并输出当前代的最优解。
  3. 我们设置了遗传算法的参数,并调用了 genetic_algorithm 函数来运行算法。最后,我们输出了算法找到的最佳解及其适应度值。

  • 21
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值