遗传算法python实例_Python遗传算法框架使用实例(一)使用Geatpy实现句子匹配
在前面几篇文章中,我们已经介绍了高性能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实现句子匹配相关推荐
- 遗传算法python实现_Python遗传算法代码实例讲解
目录 实例: 求解函数的最大值y=xsin(10x)+xsin(2x),自变量取值:0--5,用Python画出的图像如下 (注:此代码好像有一些感觉不对的地方,首先:没有保留那些适应度低的个体 po ...
- python开发软件的实例-Python 开发工具和框架安装实例步骤
引言: 其实之前对于 Python,只是知道有这门语言而已.大部分还是使用 .net 开发的,之前也学了 MVC+EF 开发,但是由于工作上完全用不到,也就没有在博客记录学习的东西了. 最近又接触到了 ...
- 遗传算法(Python) #5 用DEAP框架解决OneMax问题
遗传算法(Python) #5 用DEAP框架解决OneMax问题 遗传算法系列的第三期介绍了如何不用任何框架从零开始解决OneMax问题,第四期介绍了DEAP框架的基本用法.若读者对下文中定义或术语 ...
- Python单元测试及unittest框架用法实例解析
例题取用登录模块:代码如下 def login_check(username,password):''' 登录校验的函数:param username:账号:param password: 密码:re ...
- python基础数据实例_Python基本数据类型及实例详解
Python 中的变量不需要声明.每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建. 在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对 ...
- python函数实例与类实例_python – 在类和实例上表现不同的函数
好问题!您使用描述符可以轻松完成您所寻求的内容. Descriptors是实现描述符协议的Python对象,通常以__get __()开头. 它们主要存在于不同类中的类属性.在访问它们时,将调用它们的 ...
- python爬虫框架实例项目_python爬虫框架scrapy实例详解
生成项目 scrapy提供一个工具来生成项目,生成的项目中预置了一些文件,用户需要在这些文件中添加自己的代码. 打开命令行,执行:scrapy start tutorial/ scrapy.cfg t ...
- python爬虫框架scrapy实例详解_python爬虫框架scrapy实例详解
生成项目 scrapy提供一个工具来生成项目,生成的项目中预置了一些文件,用户需要在这些文件中添加自己的代码. 打开命令行,执行:scrapy startproject tutorial,生成的项目类 ...
- 新浪云python示例_Python Web框架Flask中使用新浪SAE云存储实例
对于部署在新浪应用引擎SAE上的项目,使用新浪SAE云存储是不错的存储方案. 新浪SAE云存储仅能在SAE环境中正常使用,对它进行简单封装后,可以直接在Flask中使用,项目代码见GitHub上Fla ...
- python数据分析可视化实例_Python数据分析及可视化实例之基于Kmean分析RFM进行用户关怀...
系列文章总目录:Python数据分析及可视化实例目录 数据集下载 Python数据分析及可视化实例之全国各城市房价分析(含数据采集) Python数据分析及可视化实例之帝都房价预测 Python数据分 ...
最新文章
- python发送各类邮件的主要方法
- GDB调试程序-Ubuntu
- SAP Commerce Cloud(原Hybris) impex 里的美元(dollar $)符号
- CC3200底板测试-烧写CC3200-LAUNCHXL
- 总结ubuntu 在命令界面login incorrect的问题
- TD-SCDMA迫零块线性均衡
- PHP绿色集成环境在云服务器上的应用,PHPWAMP在服务器上搭建网站案例
- js 判断3D空间中 三点共线
- RxSwift学习(五)--- RxSwift 操作符
- KubeEdge 王泽锋:只有代码没有生命力,凝聚开发者的社区才能活力无限 I OpenTEKr 大话开源 Vol.8
- 简单易懂的芯片科普漫画,帮你打开高深的新技术大门
- pcie 驱动程序分析
- 前端算法js:跳格子游戏
- javascript jc脚本语言
- 360与wifi共享精灵谁更随身?
- 关注博主即可阅读全文
- unity android x86,Unity3d面向英特尔 x86 平台的 Unity* 优化指南: 第 4 部分
- C语言编一个金山打字通小游戏,js实现金山打字通小游戏
- uniAPP开发 全教程
- 用友软件系统管理员账号admin密码忘记了,如何解决?
热门文章
- SQL Server 2016 安装
- Office系列完全干净卸载工具合集(最全)
- 深信服SCSA安全工程师题库(方便大家复习备考)
- 神州数码c语言笔试题,神州数码应聘笔试题(2)
- java做安卓开发需要学什么,安卓开发要学什么 需要什么基础知识
- 大数据大屏设计-PS拉框助手
- 网易云音乐推荐系统特训_笔记
- asp html5留言板,ASP.NET MVC 开发实例:简单留言板的开发
- Python实现共现语义网络
- matlab 特征选择算法,特征选择、特征提取matlab算法实现(模式识别)