python遗传算法有多慢_遗传算法框架GAFT优化小记

本文介绍了作者在优化遗传算法框架GAFT时,通过性能分析发现适应度函数调用频繁导致效率低下。通过添加函数返回值缓存和动态监测种群变化来优化,显著提升了算法运行速度,减少了适应度函数调用次数,实现了约7倍的效率提升。
摘要由CSDN通过智能技术生成

前言

前段时间一直在用自己写的遗传算法框架测试算法在优化力场参数的效果,但是跑起来效率很慢,因为适应度函数需要调用多次力场程序计算能量,但是还是比我预想中的慢我也没有及时对程序进行profiling和优化。直到放假前在github有个使用gaft做SVM参数优化的童鞋开了个issue中说道在gaft优化的过程中会大量调用适应度函数,这才使我在国庆放假期间对gaft进行了profiling找到程序瓶颈并针对性的优化。

本文就记录下自己gaft做profiling并优化的过程以及优化的效果。gaft项目链接:

正文

对GAFT进行性能分析(Profiling)

关于如何对Python程序进行性能分析生成分析报告并可视化分析报告,我在之前的一篇博客里《Python优化第一步: 性能分析实践》进行了详细的介绍,这里我就直接分析了。

为了能针对gaft中不同的函数进行分析,借助Python内置的cProfile和pstats模块我写了个装饰器方便分析并生成不同的分析统计文件。

def do_profile(filename, sortby='tottime'):

'''Constructor for function profiling decorator.'''

def _do_profile(func):

'''Function profiling decorator.'''

@wraps(func)

def profiled_func(*args, **kwargs):

'''Decorated function.'''

# Flag for doing profiling or not.

DO_PROF = os.getenv('PROFILING')

if DO_PROF:

profile = cProfile.Profile()

profile.enable()

result = func(*args, **kwargs)

profile.disable()

ps = pstats.Stats(profile).sort_stats(sortby)

ps.dump_stats(filename)

else:

result = func(*args, **kwargs)

return result

return profiled_

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值