Geatpy

The Genetic and Evolutionary Algorithm Toolbox for Python

Introduction

  • Website (including documentation): http://www.geatpy.com
  • Tutorial pdf: https://github.com/geatpy-dev/geatpy/tree/master/geatpy/doc/Geatpy-tutorials   (推荐看!)
  • Demo : https://github.com/geatpy-dev/geatpy/tree/master/geatpy/demo
  • Pypi page : https://pypi.org/project/geatpy/
  • Contact us: http://www.geatpy.com/support
  • Source code: https://github.com/geatpy-dev/geatpy/tree/master/geatpy/source-code
  • Bug reports: https://github.com/geatpy-dev/geatpy/issues
  • Franchised blog: https://blog.csdn.net/qq_33353186
  • github:https://github.com/geatpy-dev/geatpy

推荐一个博客:https://blog.csdn.net/qq_33353186 写的很详细!!

Geatpy提供了许多已实现的遗传和进化算法相关算子的库函数,如初始化种群、选择、交叉、变异、重插入、多种群迁移、多目标优化非支配排序等,并且提供开放式的进化算法框架来实现多样化的进化算法。其执行效率高于Matlab遗传算法工具箱和Matlab第三方遗传算法工具箱Gaot、gatbx、GEATbx,学习成本低。
Geatpy支持二进制/格雷码编码种群、实数值种群、整数值种群、排列编码种群。支持轮盘赌选择、随机抽样选择、锦标赛选择。提供单点交叉、两点交叉、洗牌交叉、部分匹配交叉(PMX)、线性重组、离散重组、中间重组等重组算子。提供简单离散变异、实数值变异、整数值变异、互换变异等变异算子。支持随机重插入、精英重插入。支持awGA、rwGA、nsga2、快速非支配排序等多目标优化的库函数、提供进化算法框架下的常用进化算法模板等。
看了tutorials之后,我选择了sga_new_code_templet 这个模板库

输入的控制变量可以自己选择是实数或整数(后面会提到这个参数)。以下面的例子为例,Phen为传入的控制变量矩阵,它本身不需要定义具体数值。因为自变量的范围在main.py里会定义。

 -*- coding: utf-8 -*-
"""
aimfc.py - 目标函数demo
描述:
Geatpy的目标函数遵循本案例的定义方法, 传入种群表现型矩阵Phen, 以及可行性
列向量LegV
若没有约束条件, 也需要返回LegV(种群个体的可行性列向量,若未定义惩罚函数,则可以不定义)
若要改变目标函数的输入参数、 输出参数的格式, 则需要修改或自定义算法模板
"""
import numpy as np
def aimfuc(Phen, LegV):
x1 = Phen[:, [0]]
x2 = Phen[:, [1]]
f = 21.5 + x1 * np.sin(4 * np.pi * x1) + x2 * np.sin(20 * np.pi *
x2)
return [f, LegV]
# -*- coding: utf-8 -*-
"""
执行脚本main.py
描述:
该demo是展示如何计算无约束的单目标优化问题
本案例通过调用sga_new_code_templet算法模板来解决该问题
其中目标函数写在aimfuc.py文件中
本案例调用了“sga_new_code_templet” 这个算法模板, 其详细用法可利用help命
令查看, 或是在github下载并查看源码
调用算法模板时可以设置drawing=2, 此时算法模板将在种群进化过程中绘制动画,
但注意执行前要在Python控制台执行命令matplotlib qt5。
"""
import numpy as np
import geatpy as ga
# 获取函数接口地址
AIM_M = __import__('aimfuc')
# 变量设置
x1 = [-3, 12.1] # 自变量1的范围
x2 = [4.1, 5.8] # 自变量2的范围
b1 = [1, 1] # 自变量1是否包含下界和上界(0:不包括,1:包括)
b2 = [1, 1] # 自变量2是否包含上界
codes = [0, 0] # 自变量的编码方式, 0表示采用标准二进制编码
precisions = [4, 4] #自变量的精度(精度不宜设置太高, 否则影响搜索性能和效果)
scales = [0, 0] # 是否采用对数刻度
ranges=np.vstack([x1, x2]).T # 生成自变量的范围矩阵
borders = np.vstack([b1, b2]).T # 生成自变量的边界矩阵
# 生成区域描述器
FieldD = ga.crtfld(ranges, borders, precisions, codes, scales)
# 调用编程模板
[pop_trace, var_trace, times] = ga.sga_new_code_templet(AIM_M,
'aimfuc', None, None, FieldD, problem = 'R', maxormin = -1, MAXGEN
= 1000, NIND = 100, SUBPOP = 1, GGAP = 0.8, selectStyle = 'sus',
recombinStyle = 'xovdp', recopt = None, pm = None, distribute =
True, drawing = 1)

在github上找到这个模板的代码如下:

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

它的一些参数,里面有定义,可以在main.py里修改。

本模板实现改进单目标编程模板(二进制/格雷编码),将父子两代合并进行选择,增加了精英保留机制
语法:该函数除了参数drawing外,不设置可缺省参数。当某个参数需要缺省时,在调用函数时传入None即可。比如当没有罚函数时,则在调用编程模板时将第3、4个参数设置为None即可,如:sga_new_code_templet(AIM_M, 'aimfuc', None, None, ..., maxormin)
输入参数:AIM_M - 目标函数的地址,由AIM_M = __import__('目标函数所在文件名')语句得到目标函数规范定义:[f,LegV] = aimfuc(Phen,LegV)其中Phen是种群的表现型矩阵, LegV为种群的可行性列向量,f为种群的目标函数值矩阵AIM_F : str - 目标函数名PUN_M - 罚函数的地址,由PUN_M = __import__('罚函数所在文件名')语句得到罚函数规范定义: newFitnV = punishing(LegV, FitnV)其中LegV为种群的可行性列向量, FitnV为种群个体适应度列向量一般在罚函数中对LegV为0的个体进行适应度惩罚,返回修改后的适应度列向量newFitnVPUN_F : str - 罚函数名FieldD : array  - 二进制/格雷码种群区域描述器,描述种群每个个体的染色体长度和如何解码的矩阵,它有以下结构:[lens;        (int) 每个控制变量编码后在染色体中所占的长度lb;        (float) 指明每个变量使用的下界ub;        (float) 指明每个变量使用的上界codes;    (0:binary     | 1:gray) 指明子串是怎么编码的,0为标准二进制编码,1为各类编码scales;  (0: rithmetic | 1:logarithmic) 指明每个子串是否使用对数或算术刻度, 1为使用对数刻度,2为使用算术刻度lbin;        (0:excluded   | 1:included)ubin]        (0:excluded   | 1:included)lbin和ubin指明范围中是否包含每个边界。选择lbin=0或ubin=0,表示范围中不包含相应边界。选择lbin=1或ubin=1,表示范围中包含相应边界。problem : str - 表明是整数问题还是实数问题,'I'表示是整数问题,'R'表示是实数问题               maxormin int - 最小最大化标记,1表示目标函数最小化;-1表示目标函数最大化MAXGEN : int - 最大遗传代数NIND : int - 种群规模,即种群中包含多少个个体SUBPOP : int - 子种群数量,即对一个种群划分多少个子种群GGAP : float - 代沟,本模板中该参数为无用参数,仅为了兼容同类的其他模板而设selectStyle : str - 指代所采用的低级选择算子的名称,如'rws'(轮盘赌选择算子)recombinStyle: str - 指代所采用的低级重组算子的名称,如'xovsp'(单点交叉)recopt : float - 交叉概率distribute : bool - 是否增强种群的分布性(可能会造成收敛慢)pm : float - 重组概率drawing : int - (可选参数),0表示不绘图,1表示绘制最终结果图。默认drawing为1
输出参数:pop_trace : array - 种群进化记录器(进化追踪器),第0列记录着各代种群最优个体的目标函数值第1列记录着各代种群的适应度均值第2列记录着各代种群最优个体的适应度值var_trace : array - 变量记录器,记录着各代种群最优个体的变量值,每一列对应一个控制变量times     : float - 进化所用时间
模板使用注意:1.本模板调用的目标函数形如:[ObjV,LegV] = aimfuc(Phen,LegV), 其中Phen表示种群的表现型矩阵, LegV为种群的可行性列向量(详见Geatpy数据结构)2.本模板调用的罚函数形如: newFitnV = punishing(LegV, FitnV), 其中FitnV为用其他算法求得的适应度若不符合上述规范,则请修改算法模板或自定义新算法模板3.关于'maxormin': geatpy的内核函数全是遵循“最小化目标”的约定的,即目标函数值越小越好。当需要优化最大化的目标时,需要设置'maxormin'为-1。本算法模板是正确使用'maxormin'的典型范例,其具体用法如下:当调用的函数传入参数包含与“目标函数值矩阵”有关的参数(如ObjV,ObjVSel,NDSetObjV等)时,查看该函数的参考资料(可用'help'命令查看,也可到官网上查看相应的教程),里面若要求传入前对参数乘上'maxormin',则需要乘上。里面若要求对返回参数乘上'maxormin'进行还原,则调用函数返回得到的相应参数需要乘上'maxormin'进行还原,否则其正负号就会被改变。
"""

最后,实验室的师兄一开始给我安利了 Jmetal 这个库(Java和Python两个版本),下面是文档网站链接,也可以在github上找到源码,然后安装。但是文档写的实在是不清晰,搞得我对它定义得参数一头雾水。后面就放弃用它了。

https://jmetalpy.readthedocs.io/en/latest/examples/ea.html#moea-d

转载于:https://www.cnblogs.com/Bella2017/p/10765367.html

geatpy - 遗传和进化算法相关算子的库函数(python)相关推荐

  1. Python遗传和进化算法框架(二)Geatpy库函数和数据结构

    上一篇讲了Geatpy的快速入门:https://blog.csdn.net/qq_33353186/article/details/82014986 但是光是几个例子是远远不能熟练掌握python遗 ...

  2. Python遗传算法库和进化算法框架(二)Geatpy库函数和数据结构

    (转载自https://blog.csdn.net/qq_33353186/article/details/82020507) 上一篇讲了Geatpy的快速入门:https://blog.csdn.n ...

  3. 算法代码_Python进化算法之多目标优化与代码实战

    前言 自从上三篇博客详细讲解了Python遗传和进化算法工具箱及其在带约束的单目标函数值优化中的应用.利用遗传算法求解有向图的最短路径.利用进化算法优化SVM参数之后,这篇不再局限于单一的进化算法工具 ...

  4. 遗传进化算法与微生物遗传算法

    遗传进化算法 遗传进化算法,简称遗传算法或进化算法(Genetic Algorithm GA),GA的主要思想是通过模拟自然界生物的繁殖和自然选择来达到不断优化,从而得到较优解的过程.遗传算法的流程如 ...

  5. Geatpy框架使用基于NSGA-II算法的多染色体多目标进化算法案例(moea_psy_NSGA2_templet)

    在Geatpy的官方文档中并没有多目标+多染色体进化算法的demo,在我实际写代码时也出现了一些问题.本篇博客补充一个调用moea_psy_NSGA2_templet的demo: 目标函数: max ...

  6. 进化算法EA——多对象优化遗传(MOO),差分进化法(DE),遗传编程(GP)

    目录 单对象优化(SOO)vs多对象优化(MOO) 多对象优化(MOO) NSGA-II 差分进化法(DE) 遗传编程(GP) EA problem 单对象优化(SOO)vs多对象优化(MOO) 1. ...

  7. 论文研读-基于决策变量分析的大规模多目标进化算法

    论文研读-基于决策变量分析的大规模多目标进化算法 Multiobjective Evolutionary Algorithm Based on Decision Variable Analyses f ...

  8. 求解大规模稀疏多目标优化问题的一种进化算法(SparseEA)笔记

    阅读文献:An Evolutionary Algorithm for Large-Scale Sparse Multiobjective Optimization Problems 是由BIMK的田野 ...

  9. 进化算法的比较(GA,PSO,DE)及其优化算法包的使用

    概述   最近搞进化算法搞得比较多,所以想来总结以下,一来是对7月实训的总结,二来是对今后学习的一个反思.   进化算法的思想大同小异,具体的操作可以分为一下几个步骤: 编码可行解 对于进化算法这一类 ...

  10. 多任务进化优化算法(一)——多因子进化算法(MFEA)

    闲话:由于前段时间一直忙着写论文,所以很久没有更新了,之前的多目标优化系列我也不打算更新了,因为田野老师的PlatEMO真的很好用,代码也很规范,刚入门的同学们,我很建议你们去看看PlatEMO的源代 ...

最新文章

  1. 5300亿参数,SOTA屠榜!最大NLP预训练模型新王登基,微软英伟达联手称霸
  2. VTK:Texture之TextureCutQuadric
  3. FFmpeg options
  4. django基于存储在前端的token用户认证
  5. php连接mysql原生_php链接mysql原生写法
  6. Codeforces Round #246 (Div. 2) D. Prefixes and Suffixe 后缀数组
  7. 最新360影视双端三级分销2.0源码和详细视频搭建教程
  8. CentOS 操作系统初识
  9. 微信公众号配置模板消息
  10. 【马仔创业感悟】公司售前和售后维护制度思考
  11. php strict,PHP 5.4中的E_STRICT和E_ALL有什么区别?
  12. The CUDA compiler identification is unknown 解决
  13. 计算机基础,Java介绍和环境搭建及Hello World
  14. 腾讯2018秋招笔试真题(1)
  15. 解决路由器登录页被维盟智能路由管理系统拦截
  16. 有一群志同道合的程序员朋友是怎样的体验?
  17. 出海日报|巴西电动滑板车Grin与“巴西小黄车” Yellow合并了;印度OYO Rooms要花5000万美元发展菲律宾市场...
  18. 不用u盘如何在小米电视上安装电视直播软件
  19. 校园快餐店网上订餐管理系统(JSP+MySQL+MyEclipse)
  20. Google Earth Engine(GEE)——月度降水和ndvi植被覆盖度相关性分析(墨西哥为例)

热门文章

  1. 《Attention-based LSTM for Aspect-level Sentiment Classification》阅读笔记
  2. 面试机试之序列前n项和
  3. php成绩查询系统的学习心得_CPA成绩查询系统开通时间
  4. 判断中文文本是否为utf8编码类型的javascript实现_Go语言实现LeetCode算法:393 UTF-8编码校验...
  5. linux shell su root失败
  6. latex 图片整行居中 /centering无效
  7. 软件项目估算是一件很难的事情
  8. 微信小程序 eventChannel在页面间传参
  9. chainmaker 交易执行失败也会打包到区块 落盘
  10. Hyperledger Fabric教程(1)--Hyperledger Fabric 老版本 1.1.0 快速部署安装