Python遗传算法求解下面函数的最小值,设定求解精度到6位小数, f(x) = x*sin(x) 0≤x≤3
时间: 2024-12-16 21:22:37 浏览: 6
在Python中,我们可以使用遗传算法(Genetic Algorithm,GA)来寻找函数f(x) = x * sin(x),在区间[0, 3]内找到其最小值,要求精度达到6位小数。遗传算法是一种基于生物进化原理的优化算法,通过模拟自然选择、交叉和变异等过程来搜索解决方案空间。
以下是使用`deap`库(Distributed Evolutionary Algorithms in Python)的一个简单示例:
```python
from deap import algorithms, base, creator, tools
import math
# 定义问题域和适应度函数
creator.create("FitnessMin", base.Fitness, weights=(-1.0,))
creator.create("Individual", list, fitness=creator.FitnessMin)
def eval_fitness(individual):
x = sum(individual)
return -abs(x * math.sin(x)), # 返回负值是因为我们想要最大化最小值
toolbox = base.Toolbox()
toolbox.register("attr_float", random.uniform, 0.0, 3.0) # 创建随机浮点数
toolbox.register("individual", tools.initRepeat, creator.Individual, toolbox.attr_float, n=1) # 初始化个体
toolbox.register("population", tools.initRepeat, list, toolbox.individual) # 初始化种群
toolbox.register("evaluate", eval_fitness)
toolbox.register("mate", tools.cxTwoPoint) # 二点交叉
toolbox.register("mutate", tools.mutGaussian, mu=0.0, sigma=0.1, indpb=0.05) # 高斯变异
toolbox.register("select", tools.selTournament, tournsize=3) # 比赛选择
def main():
pop_size = 100 # 种群大小
generations = 100 # 迭代次数
population = toolbox.population(n=pop_size)
best_solution = algorithms.eaSimple(population, toolbox, cxpb=0.9, mutpb=0.1, ngen=generations, verbose=False)
print(f"Best solution found after {generations} generations is {best_solution[0]}, with a value of approximately {eval_fitness(best_solution[0]):.6f}")
if __name__ == "__main__":
main()
```
这个脚本会逐步优化种群中的个体,直到找到满足精度要求的解。注意,实际运行时需要导入适当的库并设置合适的参数,因为这里仅展示了基本框架。运行完成后,输出将展示最优解及其对应的函数值。
阅读全文