遗传算法求函数最大值python具体代码
时间: 2023-07-03 12:27:22 浏览: 231
以下是一个使用遗传算法求函数最大值的 Python 代码示例:
```python
import random
# 定义目标函数
def fitness_func(x):
return x * x + 3 * x - 4
# 定义种群大小和迭代次数
POPULATION_SIZE = 100
GENERATIONS = 100
# 初始化种群
def init_population():
population = []
for i in range(POPULATION_SIZE):
individual = [random.uniform(-10, 10)]
population.append(individual)
return population
# 选择
def selection(population):
fitness_values = [fitness_func(individual[0]) for individual in population]
max_fitness_value = max(fitness_values)
max_fitness_index = fitness_values.index(max_fitness_value)
return population[max_fitness_index]
# 交叉
def crossover(parent1, parent2):
child = [(parent1[0] + parent2[0]) / 2]
return child
# 变异
def mutation(individual):
individual[0] += random.uniform(-0.1, 0.1)
return individual
# 遗传算法主函数
def genetic_algorithm():
population = init_population()
for i in range(GENERATIONS):
new_population = []
for j in range(POPULATION_SIZE):
parent1 = selection(population)
parent2 = selection(population)
child = crossover(parent1, parent2)
if random.random() < 0.1:
child = mutation(child)
new_population.append(child)
population = new_population
best_individual = selection(population)
return best_individual[0]
# 测试
print(genetic_algorithm())
```
在这个例子中,我们使用遗传算法求解函数 $f(x) = x^2 + 3x - 4$ 的最大值。我们将种群大小设置为 100,迭代次数设置为 100。在初始化种群时,我们随机生成了 100 个 $x$ 值,范围在 -10 到 10 之间。在选择过程中,我们通过计算每个个体的适应度值来选择最佳个体。在交叉过程中,我们将两个父代个体的 $x$ 值取平均数作为子代的 $x$ 值。在变异过程中,我们随机选择一个个体的 $x$ 值,并将其加上一个随机数。最后,我们迭代 100 次,得到了函数的最大值。
阅读全文