【人工智能系列 - 智能硬件 - 11】离线演化平台设计

构建演化硬件平台,能够为实际的演化硬件研究提供极大的便利。

一方面,通过所构建的演化硬件平台,结合考虑连接到可重构器件的实际情况,可以对提出的算法的性能和有效性进行更进一步地验证;另一方面,在所构建的演化硬件平台上,可以进行对实际电路的演化,以及演化结果的调试和分析。

此处采用Xilinx公司的Virtex系列FPGA芯片作为演化硬件研究的可重构器件,借助于JBits SDK构建离线演化平台,实现对FPGA芯片内部结构的配置。

按照演化硬件的实现方式进行分类,演化平台可分为离线演化平台和在线演化平台。

考虑到离线演化平台具有可移植性强、便于扩展、无需硬件支持等特点,将所提出的TCGA算法作为演化核心,设计构建离线演化平台用于演化硬件的研究。

此处的离线演化平台的程序编码采用Matlab与Java语言混合编码的方式实现。

通过该平台,可以实现对常用电路的演化,并且输出最终所演化出的FPGA位流配置文件,从其中能够清晰地了解到FPGA的内部配置情况和资源的使用情况。

总体设计方案

本文所设计的离线演化平台的主要由以下几部分组成:

  • 演化算法核心模块
  • 随机数模块
  • 竞争模块
  • 变异模块
  • 适应度评估模块
  • 配置数据输出显示模块

离线演化平台总体结构框图

整个离线演化平台的运行流程如下所述。

首先由随机数模块随机生成两个初始的染色体个体,并且将初始染色体个体传送给算法核心模块。

然后算法核心模块将初始染色体个体传送到适应度评估模块,返回计算得到的染色体个体适应度值。

再将适应度值以及染色体个体送入竞争模块和变异模块,执行演化操作,并返回优秀的染色体个体。

算法核心模块根据优秀染色体个体情况判断当前演化的执行情况,决定是否终止染色体个体的演化。

最后,当演化结束后,将最终得到的染色体个体送入配置数据输出显示模块,输出硬件配置位流文件。

在该平台中,各个模块所需要的参数可以通过平台的GUI界面进行相应的设定与选择,同时还能够通过平台的GUI界面直观地观察到演化过程中染色体个体的变化情况,以及染色体个体适应度值的收敛情况。

算法核心模块

该模块是整个离线演化平台的核心模块,其主要完成以下几方面功能:演化参数初始化、演化流程控制、概率变量值更新。

通过读取平台GUI界面的参数设定情况,读入用户所设定的演化参数,实现初始化工作。

在设计中,算法需要进行初始化设定的参数包括:演化区域模板大小、所使用的演化器件型号、输入位流文件名、输出位流文件名、演化种群个体数目、演化最大终止代数、“冠军重采样”周期、概率变量初始值。

实现了对整个演化流程的控制,依据TCGA算法的运算流程,合理地安排相应的各个平台模块的调用运行顺序。

管理各个模块的数据输出,以及读取相应的返回数据。判断演化运行的终止准则,结束演化过程。

所使用的终止准则包括两种情况,一种是概率变量值收敛到全部为0、1的序列,另一种是达到演化最大终止代数。

TCGA算法的运算流程图

判断演化算子操作模块所返回的优秀染色体个体的取值情况,更新当前染色体个体每一位所对应的概率变量值。

在更新过程中,先判断染色体个体每一位的当前值,根据判断结果,决定是否对当前值进行反转,再将反转后的新染色体个体的适应度值与原染色体个体进行比较,依据比较结果更新每一位所对应的概率变量值。

此处所提到的概率变量值将直接影响到演化过程中每代的新的染色体个体的生成情况。

在整个演化过程中,引入精英保留策略,保留每一代演化中的优秀染色体个体,使用依据概率变量值新生成的随机染色体替换当前代较差的个体,以进行下一代的演化。

随机数模块

本模块实现依概率的随机染色体个体的生成,它有两个输入参数,染色体个体每一位所对应的概率变量值和染色体个体的长度。

将输入的概率变量值与模块内生成的随机数进行比较,所生成的随机数属于定义域[0,1]内,若随机数大于当前的概率变量值,则该位取0,否则取1。

在演化过程中,随着每一代演化后概率变量值的变化,生成新的染色体个体。

由于此处采用二进制编码作为染色体个体的编码方式,故随机数模块的输出为二进制编码串,其长度等于所输入的染色体个体长度。

染色体个体的长度需要根据所选择的演化区域的大小来决定,设计中仅将FPGA器件的各个CLB中的LUT作为演化对象,则染色体个体的长度由演化区域中的LUT的数目所决定,即

演化算子设计

对演化过程中所要用到的演化算子操作进行设计,以便能够更好地实现演化平台的实时性和有效性。

此处演化算子的设计主要分为两个部分:竞争算子部分和变异算子部分。

竞争算子部分采用“锦标赛竞争”和“冠军重采样”策略相结合的方法。

“锦标赛竞争”是指将演化当代的两个染色体个体进行比较,选择出两者中适应度较好的染色体个体。

此方法使用染色体个体的适应度的相对值作为评断标准,从而更加利于适应度好的染色体个体的保留,同时也能够在一定程度上避免早熟收敛和停滞现象。

“冠军重采样”策略是指通过设定重采样周期,在演化过程中,每隔与周期相同代时,使用与当前概率变量值无关的概率重新采样,生成新的染色体个体,并且将其与当前的最优染色体个体进行比较,选取两者中优秀的一方替代最优染色体个体。

该策略有助于避免演化算法核心在演化过程中陷入搜索的局部最优停滞。

变异算子部分在传统变异操作的基础上,增加了结合当前染色体个体的各个位所对应的概率变量值的情况来判断是否进行该位的变异的步骤。

首先对当前染色体个体各个位的值及其概率变量值进行判断,若该位的概率变量值小于0.5且该位值为1,则对该位变异,将其变为0;若该位的概率变量值大于等于0.5且该位值为0,则对该位变异,将其变为1。

使用传统的随机变异算子时,选用随机变异模板,根据所设定的变异概率值,通常在0.01~0.001范围内取值,依概率生成随机变异模板,模板长度与染色体个体长度相同,若模板中的位值为1,则染色体个体的相对应的位发生变异,即对该位进行取反操作。

变异操作的存在,有助于演化算法跳出搜索的局部区域性,增大了每代演化过程中的搜索范围,同时也扩展了搜索种群的多样性。

改进变异算子的运算流程图

电路模型仿真

在离线演化硬件平台的设计中,硬件电路模型的建立是设计的一大难点。

本文借助于JBits接口和VirtexDS接口实现Xilinx公司的Virtex系列FPGA器件模型的建立。

电路模型建立流程图

首先,设定器件模型所需的必要参数,包括器件设备名称、空位流文件名、器件设备类型号。

其次,建立相关的类对象,包括JBits类对象和JRoute类对象,并且将空位流文件加载到所建立的类对象中,以实现类对象的初始化。

再次,通过XHWIF接口,连接到VirtexDS虚拟器件,建立电路模型,将空的配置文件加载到模型,实现对所建立模型的配置重置操作。

最后,通过调用所设计的Mapp类,完成对所建立电路模型的端口配置初始化以及资源的初始布线。

电路模型仿真的部分伪码如下所示:

Step.1 Initialize the vectors.
      boardName:=“VirtexDS:xcv50”;               ------器件设备名
      inputFileName:=“null50GCLK1.bit”;           ------空位流文件名
      deviceType:=1003;                          ------器件设备类型号
Step.2 Build the objects of the related classes and initialize them.
      jbits:=JBits(deviceType);                     ------JBits类对象
      jroutes:=JRoute(jbits);                       ------JRoute类对象
      jbits.read(inputFileName);                    ------载入空位流文件
Step.3 Build the model of circuit and initialize it.
      board:=XHWIF.Get(boardName);
      serverName:=XHWIF.GetRemoteHostName(boardName);
      port:=XHWIF.GetPort(boardName);
      board.connect(serverName,port);                ------连接到VirtexDS虚拟器件
      board.reset();                                ------电路模型初始化
      jbits.clearPartial();
      configBitstream:=jbits.getPartial();
      board.setConfiguration(0,configBitstream);
Step.4 Route the model of circuit and initialize its ports.
      map:=Mapp(jbits,jroutes,deviceType,…);         ------模型端口初始配置与布线

其中Mapp类是Java语言所编写的一个映射类,该类中还涉及到所设计的另外一个Java类Trans,这两个类所共同实现的功能包括FPGA器件CLB的初始化配置、逻辑资源间的综合布线、染色体个体与FPGA器件LUT之间的映射关系。

染色体个体与查找表映射关系示意图

适应度评估模块

本模块主要由以下几部分组成:端口定义部分、染色体个体映射到FPGA器件内部配置部分、重配置部分和适应度值计算部分。

端口定义部分根据实际所需要演化的器件的端口情况完成对虚拟器件的端口分配,确定输入输出端口与虚拟器件内部资源之间的对应关系。染色体个体映射到FPGA器件内部配置部分

在对染色体个体进行适应度值评估时,需要预先确定所使用的适应度值计算函数。

本文中使用两种适应度值计算方法,输出位串比较法和构造函数法。

输出位串比较法首先确定所要演化的硬件的真值表,依据真值表将预定测试输入值赋给所设定的输入端口,然后从输出端口读取演化电路的输出,将所读取的输出值与真值表中的预期输出值相比较,两者之间相同位的数目即为当前染色体个体的适应度值,当适应度值经过演化达到最大值时,所获得的染色体个体即为最佳个体。

该方法适用于演化单输出的硬件电路结构。

构造函数法与前者的不同之处在于,在进行适应度值计算时,使用构造函数来实现。

此处针对多输出的硬件电路结构,演化时所使用的构造函数如下所示:

将输出端口读取的二进制输出串与预期输出二进制串转换为相应的十进制值,带入到以上公式中,计算得出当前染色体个体所对应的适应度值,适应度值等于零时所对应的染色体个体即为最佳个体。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值