展开菜单
首页 精品内容 本月促销 装机必备 Windows PDF教程 macOS软件 IOS软件 Android AI 专题
全部分类

当前位置:

首页 > 编程开发 > 如何在Python中安装和使用遗传算法库geatpy?

如何在Python中安装和使用遗传算法库geatpy?

1.geatpy的安装首先是安装geatpy,使用pip3命令进行安装即可:pip3installgeatpy出现如下提示即安装成功:2.geatpy的基础数据结构geatpy中的大部分数据都是都是使用numpy的数组进行存储和计算的,下面我将介绍遗传算法中的概念是如何用numpy数据表示,以及行和列的含义。2.1种群染色体遗传算法中最重要的就是个体的染色体表示,在geatpy中种群染色体用Chrom表示,这是一个二维数组,其中每一行对应一个个体的染色体编码,Chrom的结构如下:其中lind表示编码的长

本文目录

      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 ea
      Phen = 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 np
      import 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]).T
      varTypes = 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?

      本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
      作者最新文章
      编程开发 Python
      相关文章 更多
      精品专题 更多
      装机必备

      正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

      Windows

      正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

      PDF教程

      正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

      macOS软件

      正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

      IOS软件

      正软商城iOS软件专区,精选适用于iPhone和iPad的办公、学习、影音、设计、效率及AI应用,提供功能介绍、适用设备、系统要求和正版获取方式等信息。

      AI

      正软商城AI软件专区,汇集AI写作、AI绘画、AI视频、AI办公、AI编程、AI翻译、智能客服和数据分析等人工智能工具,提供功能介绍、适用平台、收费方式及正版购买信息。

      Mac软件 更多
      Aperty macOS版
      Aperty macOS版

      Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

      火山引擎 网页版
      火山引擎 网页版

      火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

      立刻MV 网页版
      立刻MV 网页版

      立刻MV 面向音乐人、内容创作者和品牌团队,帮助用户低成本完成歌曲 MV、歌词视频、AI 分镜、图生视频与最终合成。

      蛙蛙写作 网页版
      蛙蛙写作 网页版

      蛙蛙写作 AI 创作工具,覆盖小说、剧本、文案,一键生成文稿,打通文字转视频全流程,高效解决创作难题。

      讯飞智作 网页版
      讯飞智作 网页版

      讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

      超级简历WonderCV 网页版
      超级简历WonderCV 网页版

      超级简历WonderCV是面向应届生和AI小白的智能求职平台,覆盖简历、面试与职业规划。

      音述AI 网页版
      音述AI 网页版

      音述AI,是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区。

      AionClaw macOS版
      AionClaw macOS版

      AionClaw 是可在桌面端运行的任务型 AI 助手,通过数字专家与技能市场组合办公、创作、数据和开发能力。

      Loomy macOS版
      Loomy macOS版

      Loomy 是科大讯飞推出的桌面 AI 助手,可通过对话、任务与工作目录协助处理办公、内容创作和资料整理。

      AirBuddy 3 macOS版
      AirBuddy 3 macOS版

      AirBuddy 3 是面向 macOS 的蓝牙外设增强工具,可集中查看 AirPods、Beats 与苹果设备电量,提供快速连接、播放控制、电量提醒、桌面小组件和多台 Mac 外设接力等功能。

      AirServer macOS版
      AirServer macOS版

      AirServer macOS版可把 Mac 转换为无线投屏接收端,通过 AirPlay 或 Google Cast 接收手机、平板和电脑画面,并支持多设备同时连接、高清镜像及会话录制,适合家庭娱乐、课堂教学、会议演示和应用展示。

      AnyDesk macOS版
      AnyDesk macOS版

      AnyDesk macOS版是一款适用于远程办公、设备维护和客户支持的远程桌面工具,可连接并操作异地计算机,支持文件传输、无人值守访问、会话权限控制及跨平台协作。

      WINDOWS 更多
      讯飞绘文 网页版
      讯飞绘文 网页版

      讯飞绘文网页版是科大讯飞推出的AI图文创作与内容运营工具,覆盖热点选题、文章生成、稿件校对、智能配图、排版发布和数据复盘等环节,适合自媒体创作者及内容团队在线使用。

      Maya(Autodesk Maya) Windows版
      Maya(Autodesk Maya) Windows版

      Autodesk Maya 是面向影视、电视、动画和游戏行业的专业三维制作软件,集多边形与 NURBS 建模、角色绑定、关键帧和动作捕捉动画、Bifrost 特效模拟、材质开发及 Arnold 渲染于一体,

      Aperty Windows版
      Aperty Windows版

      Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

      火山引擎 网页版
      火山引擎 网页版

      火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

      立刻MV 网页版
      立刻MV 网页版

      立刻MV 面向音乐人、内容创作者和品牌团队,帮助用户低成本完成歌曲 MV、歌词视频、AI 分镜、图生视频与最终合成。

      蛙蛙写作 网页版
      蛙蛙写作 网页版

      蛙蛙写作 AI 创作工具,覆盖小说、剧本、文案,一键生成文稿,打通文字转视频全流程,高效解决创作难题。

      讯飞智作 网页版
      讯飞智作 网页版

      讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

      超级简历WonderCV 网页版
      超级简历WonderCV 网页版

      超级简历WonderCV是面向应届生和AI小白的智能求职平台,覆盖简历、面试与职业规划。

      音述AI 网页版
      音述AI 网页版

      音述AI,是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区。

      AionClaw Windows版
      AionClaw Windows版

      AionClaw 是可在桌面端运行的任务型 AI 助手,通过数字专家与技能市场组合办公、创作、数据和开发能力。

      Loomy Windows版
      Loomy Windows版

      Loomy 是科大讯飞推出的桌面 AI 助手,可通过对话、任务与工作目录协助处理办公、内容创作和资料整理。

      AirServer Windows版
      AirServer Windows版

      AirServer Windows版可把电脑变成AirPlay、Google Cast和Miracast无线投屏接收端,适合会议演示、课堂教学及家庭大屏分享。发送设备通常无需另装客户端,并可同时接收和智能排列多个镜像会话。