遗传算法的实例(超详细)python |
您所在的位置:网站首页 › 遗传算法解决问题的实例 › 遗传算法的实例(超详细)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)}") 代码解释: evaluate 函数:用于计算个体的适应度值。在这个例子中,我们简单地计算 x^2 的值,但因为我们想要最小化它,所以在遗传算法中我们使用 -x^2(通过取负值)。 genetic_algorithm 函数:遗传算法的主要部分。 首先,我们初始化一个随机种群。然后,我们迭代每一代。在每一代中,我们计算每个个体的适应度值(使用 evaluate 函数)。接着,我们进行选择操作。在这个简单的例子中,我们只是选择了适应度最好的一半个体作为交配池。然后,我们进行交叉操作。但由于这个问题简单,我们直接复制了最好的一半个体到下一代,并没有进行真正的交叉。接下来,我们生成另一半后代。在这个例子中,我们只是简单地复制了交配池中的个体,但在实际应用中,你可以使用不同的策略来生成新的后代。接着,我们进行变异操作。在这个例子中,我们以一定的概率随机改变后代中的一些值。最后,我们用新的后代更新种群,并输出当前代的最优解。我们设置了遗传算法的参数,并调用了 genetic_algorithm 函数来运行算法。最后,我们输出了算法找到的最佳解及其适应度值。 |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |