在Python中创建简易进化算法的技术问询(附部分代码)
简易Python进化算法实现方案
我看到你已经搭好了进化算法的基础框架,下面帮你把代码补全并梳理清楚每个环节的逻辑,完全贴合你提出的需求:
需求回顾
- 创建包含100个个体的初始种群,每个个体具备4个数值属性(a1-a4)
- 基于属性计算个体得分
- 淘汰得分最低的20个个体
完整实现代码
import random # 种群规模设置 POPULATION_SIZE = 100 # 要淘汰的低得分个体数量 ELIMINATION_COUNT = 20 class Individual: def __init__(self, a1, a2, a3, a4): self.a1 = a1 self.a2 = a2 self.a3 = a3 self.a4 = a4 self.score = self.calculate_score() # 初始化时直接计算得分 def calculate_score(self): """示例得分计算函数:可根据需求替换成自定义逻辑""" # 这里用加权和作为示例,权重可根据目标调整 return 0.3 * self.a1 + 0.2 * self.a2 + 0.4 * self.a3 + 0.1 * self.a4 def create_initial_population(): """生成初始种群:随机生成个体属性值,范围可自定义""" population = [] for _ in range(POPULATION_SIZE): # 生成0-100之间的浮点数属性,也可换成整数random.randint(0,100) a1 = random.uniform(0, 100) a2 = random.uniform(0, 100) a3 = random.uniform(0, 100) a4 = random.uniform(0, 100) population.append(Individual(a1, a2, a3, a4)) return population def eliminate_low_score_individuals(population): """淘汰得分最低的指定数量个体""" # 按得分从高到低排序 sorted_population = sorted(population, key=lambda x: x.score, reverse=True) # 保留前POPULATION_SIZE - ELIMINATION_COUNT个个体 return sorted_population[:POPULATION_SIZE - ELIMINATION_COUNT] # 运行核心流程 if __name__ == "__main__": # 创建初始种群 current_population = create_initial_population() print(f"初始种群规模:{len(current_population)}") # 执行淘汰操作 current_population = eliminate_low_score_individuals(current_population) print(f"淘汰后种群规模:{len(current_population)}") # 可选:打印前5个个体的得分验证效果 print("\n前5个个体的得分:") for idx, individual in enumerate(current_population[:5]): print(f"个体{idx+1}: {individual.score:.2f}")
关键逻辑说明
- 个体类设计:初始化时自动计算并存储得分,避免后续排序、淘汰时重复计算,提升效率。
- 得分函数:示例用了加权和逻辑,你可以直接替换成符合业务目标的函数(比如非线性计算、多目标加权等)。
- 初始种群生成:用随机函数生成属性值,你可以根据需求调整数值范围、数据类型(整数/浮点数)。
- 淘汰机制:通过排序截取的方式快速筛选高得分个体,逻辑简洁高效。
如果之后需要扩展进化算法的其他环节(比如交叉繁殖、变异、多轮迭代进化),也可以基于这个框架继续添加功能~
内容的提问来源于stack exchange,提问作者borkbork
相关产品推荐
相关产品推荐

