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

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

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

pip install geatpy

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

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

下面以产生”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.

# Attention: you had better put the aim-function in another file.

def aim(Phen, LegV): # define the aim function

real = words

diff = np.sum((Phen - real)**2, 1)

return [np.array([diff]).T, LegV]

if __name__ == "__main__":

AIM_M = __import__('main') # get the handle of aim-function

# variables setting

ranges = np.vstack([32 * np.ones((1, len(words))), 122 * np.ones((1, len(words)))]) # ranges of variables

borders = np.vstack([np.ones((1, len(words))), 122 * np.ones((1, len(words)))]) # borders of variables

FieldDR = ga.crtfld(ranges, borders) # create FieldDR

# call the GEA algorithm template

[pop_trace, var_trace, times] = ga.sga_new_real_templet(AIM_M, 'aim', None, None, FieldDR, problem = 'I', maxormin = 1, MAXGEN = 2000, NIND = 50, SUBPOP = 1, GGAP = 0.9, selectStyle = 'etour', recombinStyle = 'xovdprs', recopt = 0.9, pm = None, distribute = True, drawing = 1)

# output results

for num in var_trace[np.argmin(pop_trace[:, 1]), :]:

print(chr(int(num)), end = '')

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

运行结果如下:

最优的目标函数值为:0.0

最优的控制变量值为:

84.0

46.0

最优的一代是第1624代

时间已过4.467496871948242秒

Tom is a little boy.

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

在上面的代码中,我们设置了selectStyle = ‘etour’,表示采用精英锦标赛选择算子’etour’来进行种群子代的选择,这让算法的收敛速度大大增强。

倘若需要匹配的句子很长,那么则需要更大的进化代数。我认为对于句子匹配问题,可以把它转化成一个高维多目标优化问题去解决,或者是用多种群独立进化的方式,这样效率或许会更高。

下一篇文章将讲述我使用Geatpy解决多目标优化问题以及跟Matlab遗传算法工具箱进行对比学习。

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

遗传算法python实例_Python遗传算法框架使用实例(一)使用Geatpy实现句子匹配相关推荐

  1. 遗传算法python实现_Python遗传算法代码实例讲解

    目录 实例: 求解函数的最大值y=xsin(10x)+xsin(2x),自变量取值:0--5,用Python画出的图像如下 (注:此代码好像有一些感觉不对的地方,首先:没有保留那些适应度低的个体 po ...

  2. python开发软件的实例-Python 开发工具和框架安装实例步骤

    引言: 其实之前对于 Python,只是知道有这门语言而已.大部分还是使用 .net 开发的,之前也学了 MVC+EF 开发,但是由于工作上完全用不到,也就没有在博客记录学习的东西了. 最近又接触到了 ...

  3. 遗传算法(Python) #5 用DEAP框架解决OneMax问题

    遗传算法(Python) #5 用DEAP框架解决OneMax问题 遗传算法系列的第三期介绍了如何不用任何框架从零开始解决OneMax问题,第四期介绍了DEAP框架的基本用法.若读者对下文中定义或术语 ...

  4. Python单元测试及unittest框架用法实例解析

    例题取用登录模块:代码如下 def login_check(username,password):''' 登录校验的函数:param username:账号:param password: 密码:re ...

  5. python基础数据实例_Python基本数据类型及实例详解

    Python 中的变量不需要声明.每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建. 在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对 ...

  6. python函数实例与类实例_python – 在类和实例上表现不同的函数

    好问题!您使用描述符可以轻松完成您所寻求的内容. Descriptors是实现描述符协议的Python对象,通常以__get __()开头. 它们主要存在于不同类中的类属性.在访问它们时,将调用它们的 ...

  7. python爬虫框架实例项目_python爬虫框架scrapy实例详解

    生成项目 scrapy提供一个工具来生成项目,生成的项目中预置了一些文件,用户需要在这些文件中添加自己的代码. 打开命令行,执行:scrapy start tutorial/ scrapy.cfg t ...

  8. python爬虫框架scrapy实例详解_python爬虫框架scrapy实例详解

    生成项目 scrapy提供一个工具来生成项目,生成的项目中预置了一些文件,用户需要在这些文件中添加自己的代码. 打开命令行,执行:scrapy startproject tutorial,生成的项目类 ...

  9. 新浪云python示例_Python Web框架Flask中使用新浪SAE云存储实例

    对于部署在新浪应用引擎SAE上的项目,使用新浪SAE云存储是不错的存储方案. 新浪SAE云存储仅能在SAE环境中正常使用,对它进行简单封装后,可以直接在Flask中使用,项目代码见GitHub上Fla ...

  10. python数据分析可视化实例_Python数据分析及可视化实例之基于Kmean分析RFM进行用户关怀...

    系列文章总目录:Python数据分析及可视化实例目录 数据集下载 Python数据分析及可视化实例之全国各城市房价分析(含数据采集) Python数据分析及可视化实例之帝都房价预测 Python数据分 ...

最新文章

  1. python发送各类邮件的主要方法
  2. GDB调试程序-Ubuntu
  3. SAP Commerce Cloud(原Hybris) impex 里的美元(dollar $)符号
  4. CC3200底板测试-烧写CC3200-LAUNCHXL
  5. 总结ubuntu 在命令界面login incorrect的问题
  6. TD-SCDMA迫零块线性均衡
  7. PHP绿色集成环境在云服务器上的应用,PHPWAMP在服务器上搭建网站案例
  8. js 判断3D空间中 三点共线
  9. RxSwift学习(五)--- RxSwift 操作符
  10. KubeEdge 王泽锋:只有代码没有生命力,凝聚开发者的社区才能活力无限 I OpenTEKr 大话开源 Vol.8
  11. 简单易懂的芯片科普漫画,帮你打开高深的新技术大门
  12. pcie 驱动程序分析
  13. 前端算法js:跳格子游戏
  14. javascript jc脚本语言
  15. 360与wifi共享精灵谁更随身?
  16. 关注博主即可阅读全文
  17. unity android x86,Unity3d面向英特尔 x86 平台的 Unity* 优化指南: 第 4 部分
  18. C语言编一个金山打字通小游戏,js实现金山打字通小游戏
  19. uniAPP开发 全教程
  20. 用友软件系统管理员账号admin密码忘记了,如何解决?

热门文章

  1. SQL Server 2016 安装
  2. Office系列完全干净卸载工具合集(最全)
  3. 深信服SCSA安全工程师题库(方便大家复习备考)
  4. 神州数码c语言笔试题,神州数码应聘笔试题(2)
  5. java做安卓开发需要学什么,安卓开发要学什么 需要什么基础知识
  6. 大数据大屏设计-PS拉框助手
  7. 网易云音乐推荐系统特训_笔记
  8. asp html5留言板,ASP.NET MVC 开发实例:简单留言板的开发
  9. Python实现共现语义网络
  10. matlab 特征选择算法,特征选择、特征提取matlab算法实现(模式识别)