欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > python算术表达式遗传算法

python算术表达式遗传算法

2024/10/25 12:16:21 来源:https://blog.csdn.net/lycwhu/article/details/141192648  浏览:    关键词:python算术表达式遗传算法
import random
import operator
import math# 定义可能的运算符和操作
ops = {'+': '+','-': '-','*': '*','/': '/','sin': 'math.sin','cos': 'math.cos'
}# 随机生成一个表达式(个体)
def generate_expression(depth=0):if depth > 2:  # 限制表达式的最大深度return str(random.uniform(1, 10))op = random.choice(list(ops.keys()))if op in ['sin', 'cos']:return f"{ops[op]}({generate_expression(depth + 1)})"else:return f"({generate_expression(depth + 1)} {ops[op]} {generate_expression(depth + 1)})"# 评估表达式的适应度
def evaluate_expression(expression):try:return eval(expression)except ZeroDivisionError:return float('inf')  # 避免除以零except Exception as e:return float('inf')  # 处理其他可能的错误# 交叉(将两个表达式合并产生新的个体)
def crossover(expr1, expr2):point = random.randint(0, min(len(expr1), len(expr2)) - 1)return expr1[:point] + expr2[point:]# 变异(随机修改表达式的一部分)
def mutate(expression):return generate_expression() if random.random() < 0.1 else expression# 进化
def evolve(population, generations=100):for _ in range(generations):# 计算适应度fitness = [(evaluate_expression(expr), expr) for expr in population]fitness.sort()# 选择适应度最好的部分作为父代parents = [expr for _, expr in fitness[:len(fitness)//2]]# 生成新的种群population = []while len(population) < len(fitness):parent1, parent2 = random.sample(parents, 2)child = crossover(parent1, parent2)child = mutate(child)population.append(child)# 输出当前最佳表达式和适应度best_expr = fitness[0][1]best_fitness = fitness[0][0]print(f"Best Expression: {best_expr} | Fitness: {best_fitness}")# 初始化种群
population = [generate_expression() for _ in range(20)]
evolve(population)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com