提示信息

Python实现的遗传算法模型示例代码

空朦胧 已关注

下面是一个使用Python实现的简单遗传算法示例。这个示例演示了如何使用遗传算法来找到一个数学函数的最大值。我们将使用二进制编码的方法来表示个体,并通过交叉、变异等操作来进行进化。

问题描述

假设我们有以下目标函数:

[ f(x) = x^2 ]

我们的目标是在一定范围内找到这个函数的最大值。假设x的范围是从0到31。

实现步骤

  1. 初始化种群:随机生成一组个体,每个个体是一个用二进制表示的数字。
  2. 适应度计算:计算每个个体在目标函数中的适应度。
  3. 选择:选择适应度较高的个体进行繁殖。
  4. 交叉:通过交换两亲本个体的一部分基因来创建新个体。
  5. 变异:随机改变个体的一些位,以增加多样性。
  6. 迭代:重复选择、交叉、变异步骤,直到达到最大迭代次数或满足其他终止条件。

代码示例

  1. import random
  2. # 遗传算法参数
  3. POP_SIZE = 20 # 种群大小
  4. GENE_LENGTH = 5 # 基因长度(表示x的二进制位数,适合数字0-31)
  5. MAX_GEN = 50 # 最大迭代次数
  6. MUTATION_RATE = 0.01 # 变异概率
  7. def fitness_function(x):
  8. return x ** 2
  9. def generate_individual():
  10. return [random.randint(0, 1) for _ in range(GENE_LENGTH)]
  11. def decode_gene(gene):
  12. return int(''.join(map(str, gene)), 2)
  13. def calculate_fitness(individual):
  14. x = decode_gene(individual)
  15. return fitness_function(x)
  16. def select(population):
  17. sorted_population = sorted(population, key=calculate_fitness, reverse=True)
  18. return sorted_population[:2]
  19. def crossover(parent1, parent2):
  20. point = random.randint(1, GENE_LENGTH - 1)
  21. child1 = parent1[:point] + parent2[point:]
  22. child2 = parent2[:point] + parent1[point:]
  23. return child1, child2
  24. def mutate(individual):
  25. return [bit if random.random() > MUTATION_RATE else 1 - bit for bit in individual]
  26. def genetic_algorithm():
  27. population = [generate_individual() for _ in range(POP_SIZE)]
  28. for _ in range(MAX_GEN):
  29. new_population = []
  30. for _ in range(POP_SIZE // 2):
  31. parent1, parent2 = select(population)
  32. child1, child2 = crossover(parent1, parent2)
  33. new_population.extend([mutate(child1), mutate(child2)])
  34. population = new_population
  35. # 找到最佳个体
  36. best_individual = max(population, key=calculate_fitness)
  37. best_x = decode_gene(best_individual)
  38. best_fitness = calculate_fitness(best_individual)
  39. print("Best individual:", best_individual)
  40. print("Best x:", best_x)
  41. print("Best fitness:", best_fitness)
  42. # 运行遗传算法
  43. genetic_algorithm()

说明

  • 初始化种群:生成一个由随机0和1组成的列表,每个个体由GENE_LENGTH个二进制位构成。
  • 适应度计算:通过将二进制列表解码为整数来计算适应度。
  • 选择:按适应度对种群排序,并选择适应度较高的个体。
  • 交叉:从两个父代中选择一个随机交叉点,并交换它们的基因片段。
  • 变异:以MUTATION_RATE的概率翻转基因中的位。

此示例演示了遗传算法的基本工作流程,可以根据需要进行复杂性扩展。

    遇到难题? "AI大模型GPT4.0、GPT" 是你的私人解答专家! 点击按钮去提问......
空朦胧 关注 已关注

最近一次登录:2024-11-21 00:43:29   

暂时还没有签名,请关注我或评论我的文章
×
免费图表工具,画流程图、架构图