我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python遗传算法之geatpy如何安装使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python遗传算法之geatpy如何安装使用

这篇文章主要介绍了python遗传算法之geatpy如何安装使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python遗传算法之geatpy如何安装使用文章都会有所收获,下面我们一起来看看吧。

    1. geatpy的安装

    首先是安装geatpy,使用pip3命令进行安装即可:

    pip3 install geatpy

    出现如下提示即安装成功:

    python遗传算法之geatpy如何安装使用

    2. geatpy的基础数据结构

    geatpy中的大部分数据都是都是使用numpy的数组进行存储和计算的,下面我将介绍遗传算法中的概念是如何用numpy数据表示,以及行和列的含义。

    2.1 种群染色体

    遗传算法中最重要的就是个体的染色体表示,在geatpy中种群染色体用Chrom表示,这是一个二维数组,其中每一行对应一个个体的染色体编码,Chrom的结构如下:其中lind表示编码的长度,Nind表示的是种群的规模(个体数量)。

    python遗传算法之geatpy如何安装使用

    2.2 种群表现型

    种群表现型是是指种群染色体矩阵Chrom经过解码后得到的基因表现型矩阵Phen,每一行对应一个个体,每一列对应一个决策变量,Phen的结构如下:其中Nvar表示变量的个数

    python遗传算法之geatpy如何安装使用

    Phen的值与采用的解码方式有关。Geatpy提供二进制/格雷码编码转十进制整数或实数的解码方式。另外,在Geatpy也可以使用不需要解码的“实值编码”种群,这种种群的染色体的每一位就对应着决策变量的实际值,即这种编码方式下Phen等价Chrom。

    2.3 目标函数值

    Geatpy采用numpy的array类型矩阵来存储种群的目标函数值。一般命名为ObjV,每一行对应每一个个体,因此它拥有与Chrom相同的行数;每一列对应一个目标函数,因此对于单目标函数,ObjV会只有1列;而对于多目标函数,ObjV会有多列, ObjV的表示形式如下:

    python遗传算法之geatpy如何安装使用

    2.4 个体适应度

    Geatpy采用列向量来存储种群个体适应度(适应度函数计算而来)。一般命名为FitnV,它同样是numpy的array类型,每一行对应种群矩阵的每一个个体。因此它拥有与Chrom相同的行数,FitnV的格式如下:

    python遗传算法之geatpy如何安装使用

    注意:Geatpy中的适应度遵循“最小适应度为0”的约定。

    2.5 违反约束程度矩阵

    Geatpy采用numpy的array类型的矩阵CV(Constraint Violation Value)来存储种群个体违反各个约束条件的程度。命名为CV,它的每一行对应种群的每一个个体,因此它拥有与Chrom相同的行数;每一列对应一个约束条件,因此若有一个约束条件,那么CV矩阵就会只有一列,如有多个约束条件,CV矩阵就会有多列。如果设有num个约束,则CV矩阵的结构如下图所示:

    python遗传算法之geatpy如何安装使用

    CV矩阵的某个元素若小于或等于0,则表示该元素对应的个体满足对应的约束条件。若大于0,则表示违反约束条件,在大于0的条件下值越大,该个体违反该约束的程度就越高。Geatpy提供两种处理约束条件的方法,一种是罚函数法,另一种是可行性法则。在使用可行性法则处理约束条件时,需要用到CV矩阵。

    2.6 译码矩阵

    所谓的译码矩阵,只是用来描述种群染色体特征的矩阵,如染色体中的每一位元素所表达的决策变量的范围、是否包含范围的边界、采用二进制还是格雷码、是否使用对数刻度、染色体解码后所代表的决策变量的是连续型变量还是离散型变量等等。

    在只使用工具箱的库函数而不使用Geatpy提供的面向对象的进化算法框架时,译码矩阵可以单独使用。若采用Geatpy提供的面向对象的进化算法框架时,译码矩阵可以与一个存储着种群染色体编码方式的字符串Encoding来配合使用。

    目前Geatpy中有三种Encoding,分别为:

    • BG:(二进制/格雷码)

    • RI:((实整数编码,即实数和整数的混合编码)

    • P:(排列编码,即染色体每一位的元素都是互异)

    注:’RI’和’P’编码的染色体都不需要解码,染色体上的每一位本身就代表着决策变量的真实值,因此“实整数编码”和“排列编码”可统称为“实值编码”

    以BG编码为例,我们展示一下编译矩阵FieldD。FieldD的结构如下:

    python遗传算法之geatpy如何安装使用

    其中,lens,lb,ub,codes,scales,lbin,ubin,varTypes都是行向量,其长度等于决策变量的个数。

    • lens:代表以条染色体中,每个子染色体的长度。

    • lb:代表每个变量的上界

    • ub:代表每个变量的下界

    • codes:代表染色体字串用的编码方式,[1,0,1]代表第一个变量用的格雷编码,第二个变量用的二进制编码,第3个变量用的格雷编码。

    • scales:指明每个子串用的是算术刻度还是对数刻度。scales[i] = 0为算术刻度,scales[i] = 1为对数刻度(对数刻度很少用,可以忽略。)

    • lbin:代表变量上界是否包含其范围边界。0代表不包含,1代表包含。‘[ ’和 ‘(’ 的区别

    • ubin:代表变量下界是否包含其范围边界。0代表不包含,1代表包含。

    • varTypes:代表决策变量的类型,元素为0表示对应位置的决策变量是连续型变量;1表示对应的是离散型变量。

    例如:有以下一个译码矩阵

    python遗传算法之geatpy如何安装使用

    它表示待解码的种群染色体矩阵Chrom解码后可以表示成3个决策变量,每个决策变量的取值范围分别是[1,10], [2,9], [3,15]。其中第一第二个变量采用的是二进制编码,第三个变量采用的是格雷编码,且第一、第三个决策变量为连续型变量;第二个为离散型变量。

    #通过种群染色体chrom和译码矩阵FieldD,可解码成种群表现型矩阵。import geatpy as eaPhen = ea.bs2ri(Chrom, FieldD)
    2.7 进化追踪器

    在使用Geatpy进行进化算法编程时,常常建立一个进化追踪器(如pop_trace)来记录种群在进化的过程中各代的最优个体,尤其是采用无精英保留机制时,进化追踪器帮助我们记录种群在进化过程中的最优个体。待进化完成后,再从进化追踪器中挑选出“历史最优”的个体。这种进化记录器有多种,其中一种是numpy的array类型的,结构如下:其中MAXGEN是种群进化的代数(迭代次数)。

    python遗传算法之geatpy如何安装使用

    trace的每一列代表不同的指标,比如第一列记录各代种群的最佳目标函数值,第二列记录各代种群的平均目标函数值…trace的每一行对应每一代,如第一行代表第一代,第二行代表第二代…另外一种进化记录器是一个列表,列表中的每一个元素都是一个拥有相同数据类型的数据。比如在Geatpy的面向对象进化算法框架中的pop_trace,它是一个列表,列表中的每一个元素都是历代的种群对象。

    3. geatpy的种群结构

    3.1 Population类

    在Geatpy提供的面向对象进化算法框架中,种群类(Population)是一个存储着与种群个体相关信息的类。它有以下基本属性:

    • sizes : int -种群规模,即种群的个体数目。

    • ChromNum : int -染色体的数目,即每个个体有多少条染色体。

    • Encoding : str -染色体编码方式。

    • Field : array -译码矩阵,可以是FieldD或FieldDR。

    • Chrom : array -种群染色体矩阵,每一行对应一个个体的一条染色体。

    • Lind : int -种群染色体长度。

    • ObjV : array -种群目标函数值矩阵。

    • FitnV : array -种群个体适应度列向量。

    • CV : array -种群个体违反约束条件程度的矩阵。

    • Phen : array -种群表现型矩阵。

    可以直接对种群对象进行提取个体、个体合并等操作,比如pop1和pop2是两个种群对象,则通过语句“pop3 = pop1 + pop2”,即可把两个种群的个体合并,得到一个新的种群。在合并的过程中,实际上是把种群的各个属性进行合并,然后用合并的数据来生成一个新的种群(详见Population.py)。又比如执行语句“pop3 = pop1[[0]]”,可以把种群的第0号个体抽取出来,得到一个新的只有一个个体的种群对象pop3。值得注意的是,种群的这种个体抽取操作要求下标必须为列表或是Numpy array类型的行向量,不能是标量(详见Population.py)

    3.2 PsyPopulation类

    PsyPopulation类是Population的子类,它提供Population类所不支持的多染色体混合编码。它有以下基本属性:

    • sizes : int -种群规模,即种群的个体数目。

    • ChromNum : int -染色体的数目,即每个个体有多少条染色体。

    • Encodings : list -存储各染色体编码方式的列表。

    • Fields : list -存储各染色体对应的译码矩阵的列表。

    • Chroms : list -存储种群各染色体矩阵的列表。

    • Linds : list -存储种群各染色体长度的列表。

    • ObjV : array -种群目标函数值矩阵。

    • FitnV : array -种群个体适应度列向量。

    • CV : array -种群个体违反约束条件程度的矩阵。

    • Phen : array -种群表现型矩阵。

    可见PsyPopulation类基本与Population类一样,不同之处是采用Linds、Encodings、Fields和Chroms分别存储多个Lind、Encoding、Field和Chrom。

    PsyPopulation类的对象往往与带“psy”字样的进化算法模板配合使用,以实现多染色体混合编码的进化优化。

    4. 求解标准测试函数——McCormick函数

    遗传算法求解以下函数的最小值:

    python遗传算法之geatpy如何安装使用

    代码实现:

    #-*-coding:utf-8-*-import numpy as npimport geatpy as ea#导入geatpy库import time"""============================目标函数============================"""def aim(Phen):#传入种群染色体矩阵解码后的基因表现型矩阵    x1 = Phen[:, [0]]#取出第一列,得到所有个体的第一个自变量    x2 = Phen[:, [1]]#取出第二列,得到所有个体的第二个自变量    return np.sin(x1 + x2) + (x1 - x2) ** 2 - 1.5 * x1 + 2.5 * x2+1"""============================变量设置============================"""x1 = [-1.5, 4]#第一个决策变量范围x2 = [-3, 4]#第二个决策变量范围b1 = [1, 1]#第一个决策变量边界,1表示包含范围的边界,0表示不包含b2 = [1, 1]#第二个决策变量边界,1表示包含范围的边界,0表示不包含#生成自变量的范围矩阵,使得第一行为所有决策变量的下界,第二行为上界ranges=np.vstack([x1, x2]).T#生成自变量的边界矩阵borders=np.vstack([b1, b2]).TvarTypes = np.array([0, 0])#决策变量的类型,0表示连续,1表示离散"""==========================染色体编码设置========================="""Encoding ='BG'#'BG'表示采用二进制/格雷编码codes = [1, 1]#决策变量的编码方式,两个1表示变量均使用格雷编码precisions =[6, 6]#决策变量的编码精度,表示解码后能表示的决策变量的精度可达到小数点后6位scales = [0, 0]#0表示采用算术刻度,1表示采用对数刻度#调用函数创建译码矩阵FieldD =ea.crtfld(Encoding,varTypes,ranges,borders,precisions,codes,scales)"""=========================遗传算法参数设置========================"""NIND     = 20#种群个体数目MAXGEN   = 100#最大遗传代数maxormins = np.array([1])#表示目标函数是最小化,元素为-1则表示对应的目标函数是最大化selectStyle ='sus'#采用随机抽样选择recStyle ='xovdp'#采用两点交叉mutStyle ='mutbin'#采用二进制染色体的变异算子Lind =int(np.sum(FieldD[0, :]))#计算染色体长度pc= 0.9#交叉概率pm= 1/Lind#变异概率obj_trace = np.zeros((MAXGEN, 2))#定义目标函数值记录器var_trace = np.zeros((MAXGEN, Lind))#染色体记录器,记录历代最优个体的染色体"""=========================开始遗传算法进化========================"""start_time = time.time()#开始计时Chrom = ea.crtpc(Encoding,NIND, FieldD)#生成种群染色体矩阵variable = ea.bs2ri(Chrom, FieldD)#对初始种群进行解码ObjV = aim(variable)#计算初始种群个体的目标函数值best_ind = np.argmin(ObjV)#计算当代最优个体的序号#开始进化for gen in range(MAXGEN):    FitnV = ea.ranking(maxormins * ObjV)#根据目标函数大小分配适应度值    SelCh = Chrom[ea.selecting(selectStyle,FitnV,NIND-1),:]#选择    SelCh = ea.recombin(recStyle, SelCh, pc)#重组    SelCh = ea.mutate(mutStyle, Encoding, SelCh, pm)#变异    # #把父代精英个体与子代的染色体进行合并,得到新一代种群    Chrom = np.vstack([Chrom[best_ind, :], SelCh])    Phen = ea.bs2ri(Chrom, FieldD)#对种群进行解码(二进制转十进制)    ObjV = aim(Phen)#求种群个体的目标函数值    #记录    best_ind = np.argmin(ObjV)#计算当代最优个体的序号    obj_trace[gen,0]=np.sum(ObjV)/ObjV.shape[0]#记录当代种群的目标函数均值    obj_trace[gen,1]=ObjV[best_ind]#记录当代种群最优个体目标函数值    var_trace[gen,:]=Chrom[best_ind,:]#记录当代种群最优个体的染色体    # 进化完成    end_time = time.time()#结束计时    ea.trcplot(obj_trace, [['种群个体平均目标函数值','种群最优个体目标函数值']])#绘制图像"""============================输出结果============================"""best_gen = np.argmin(obj_trace[:, [1]])print('最优解的目标函数值:', obj_trace[best_gen, 1])variable = ea.bs2ri(var_trace[[best_gen], :], FieldD)#解码得到表现型(即对应的决策变量值)print('最优解的决策变量值为:')for i in range(variable.shape[1]):    print('x'+str(i)+'=',variable[0, i])    print('用时:', end_time - start_time,'秒')

    效果图:

    python遗传算法之geatpy如何安装使用

    结果如下:

    python遗传算法之geatpy如何安装使用

    关于“python遗传算法之geatpy如何安装使用”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“python遗传算法之geatpy如何安装使用”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    python遗传算法之geatpy如何安装使用

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档

    猜你喜欢

    python遗传算法之geatpy如何安装使用

    这篇文章主要介绍了python遗传算法之geatpy如何安装使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python遗传算法之geatpy如何安装使用文章都会有所收获,下面我们一起来看看吧。1. geat
    2023-07-06

    python遗传算法之geatpy的怎么安装使用

    这篇“python遗传算法之geatpy的怎么安装使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“python遗传算法之g
    2023-06-30

    如何使用Python实现遗传算法

    本篇内容介绍了“如何使用Python实现遗传算法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!遗传算法是模仿自然界生物进化机制发展起来的随机
    2023-07-05

    python如何实现高效的遗传算法

    小编给大家分享一下python如何实现高效的遗传算法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!遗传算法属于一种优化算法。如果你有一个待优化函数,可以考虑次算法
    2023-06-14

    python如何实现使用遗传算法进行图片拟合

    小编给大家分享一下python如何实现使用遗传算法进行图片拟合,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!引言算法思路假设我们有这样一个生物族群,他们的每个基因片段都是一个个三角形(即只含三个点和颜色信息),他们每个个体
    2023-06-29

    如何使用Python地图四色原理的遗传算法着色

    小编给大家分享一下如何使用Python地图四色原理的遗传算法着色,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1 任务需求  首先,我们来明确
    2023-06-29

    使用Python实现遗传算法的完整代码

    这篇文章主要介绍了使用Python实现遗传算法,其本质是一种高效、并行、全局搜索的方法,自适应的控制搜索过程以求得最优解,需要的朋友可以参考下
    2023-03-23

    如何在Python中用遗传算法优化垃圾收集

    这篇文章主要讲解了“如何在Python中用遗传算法优化垃圾收集”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何在Python中用遗传算法优化垃圾收集”吧!背景在其中一个章节中,Mitche
    2023-06-16

    如何用Python从零开始实现简单遗传算法

    今天就跟大家聊聊有关如何用Python从零开始实现简单遗传算法,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。遗传算法是一种随机全局优化算法。连同人工神经网络,它可能是最流行和广为人知
    2023-06-15

    如何使用matlab遗传算法求解车间调度问题

    这篇文章主要介绍了如何使用matlab遗传算法求解车间调度问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、车间调度简介1 车间调度定义车间调度是指根据产品制造的合理需求
    2023-06-29

    Java如何利用遗传算法求解最短路径

    这篇“Java如何利用遗传算法求解最短路径”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java如何利用遗传算法求解最短路径
    2023-07-01

    如何利用遗传算法库DEAP优化交易策略

    这篇文章给大家分享的是有关如何利用遗传算法库DEAP优化交易策略的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。优化的对象就是这样一个list数组 [16, 8, 24, 1, 13, 8, 1],其实就是交易策略
    2023-06-02

    oracle安装之后如何使用

    安装 oracle 后,可通过以下步骤使用:创建数据库实例。连接到数据库。创建用户。创建表。插入数据。查询数据。导出数据。导入数据。Oracle 安装后如何使用安装 Oracle 数据库后,下一步便是将其配置并使用。以下是使用 Oracl
    oracle安装之后如何使用
    2024-06-12

    Python之zhon库的简介、安装、使用方法

    zhon是一个Python库,用于处理中文文本。它提供了一些有用的工具和数据,例如中文标点符号、简体和繁体中文字符集等。安装zhon库可以使用pip命令,在命令行中输入以下命令:```pip install zhon```安装完成后,就可以
    2023-09-08

    编程热搜

    • Python 学习之路 - Python
      一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
      Python 学习之路 - Python
    • chatgpt的中文全称是什么
      chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
      chatgpt的中文全称是什么
    • C/C++中extern函数使用详解
    • C/C++可变参数的使用
      可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
      C/C++可变参数的使用
    • css样式文件该放在哪里
    • php中数组下标必须是连续的吗
    • Python 3 教程
      Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
      Python 3 教程
    • Python pip包管理
      一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
      Python pip包管理
    • ubuntu如何重新编译内核
    • 改善Java代码之慎用java动态编译

    目录