Python遗传算法框架使用实例(一)使用Geatpy实现句子匹配

Python遗传算法框架使用实例(一)使用Geatpy实现句子匹配

在前面几篇文章中,我们已经介绍了高性能Python遗传和进化算法框架——Geatpy的使用。

https://blog.csdn.net/qq_33353186/article/details/82014986

https://blog.csdn.net/qq_33353186/article/details/82020507

https://blog.csdn.net/qq_33353186/article/details/82021750

本篇就一个案例进行展开讲述:

回顾一下Geatpy的安装方法,在上面的第一个链接的文章里也有详细讲解。

pip install geatpy
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

我们都听过“无限猴子定理”,说的是有无限只猴子用无限的时间会产生特定的文章。在无限猴子定理中,我们“假定”猴子们是没有像人类那样“智能”的,而且“假定”猴子不会自我学习。因此,这些猴子需要“无限的时间"。

而在遗传算法中,由于采用的是启发式的进化搜索,因此不需要”无限的时间“就可以完成类似的工作。当然,需要产生的文章篇幅越长,那么就需要越久的时间才能完成。

下面以产生"Tom is a little boy."的句子为例,讲述如何利用Geatpy实现句子的搜索。之前的文章中我们已经讲述过如何使用Geatpy的进化算法框架实现遗传算法编程。这里就直接用框架。

编写"main.py”执行脚本,写入以下代码:

# -*- coding: utf-8 -*-
"""             *****main.py*****
use GA algorithm to search the sentence: Tom is a little boy.
"""
import numpy as np
import geatpy as ga

strs = 'Tom is a little boy.' # define the sentence
words = []
for c in strs:
    words.append(ord(c)) # change the words to ascii code.

def aim(Phen): # define the aim function
    real = words
    diff = np.sum((Phen - real)**2, 1)
    return np.array([diff]).T

if __name__ == "__main__":
    AIM_M = __import__('main') # 获取函数接口所在文件的地址
    # 变量设置
    ranges = np.vstack([32 * np.ones((1, len(words))), 122 * np.ones((1, len(words)))]) # 生成自变量的范围矩阵
    borders = np.vstack([np.ones((1, len(words))), 122 * np.ones((1, len(words)))]) # 生成自变量的边界矩阵
    FieldDR = ga.crtfld(ranges, borders) # 生成区域描述器
    # 调用编程模板
    [pop_trace, var_trace, times] = ga.sga_new_real_templet(AIM_M, 'aim', None, None, FieldDR, problem = 'I', maxormin = 1, MAXGEN = 5000, NIND = 50, SUBPOP = 1, GGAP = 0.9, selectStyle = 'sus', recombinStyle = 'xovdp', recopt = 0.9, pm = 0.1, drawing = 1)
    # 输出结果
    for num in var_trace[np.argmin(pop_trace[:, 1]), :]:
        print(chr(int(num)), end = '')
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

代码中调用了Geatpy内置的sga_new_real_templet编程模板,其中参数的含义可以使用help(ga.sga_new_real_templet)查看,也可以参见源码:

https://github.com/geatpy-dev/geatpy/blob/master/geatpy/source-code/templets/sga_new_real_templet.py

运行结果如下:

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

最优的目标函数值为:0.0
最优的控制变量值为:
84.0
...
46.0
最优的一代是第1624代

时间已过4.467496871948242秒

Tom is a little boy.

Geatpy的sga_new_real_templet编程模板实现了一个改进的遗传算法。采用精英保留策略,使算法的收敛性大大增强。由本例可见,使用Geatpy框架实现遗传算法非常简单。Geatpy的强大之处初现。

在后面的文章中我们将对更多的编程案例进行详解。欢迎继续跟进,感谢!


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值