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