掌桥专利:专业的专利平台
掌桥专利
首页

技术领域

本发明涉及计算机技术领域,特别涉及一种数据处理方法、装置、设备及存储介质。

背景技术

基因表达式编程(Gene Expression Programming,GEP)由Candida Ferreira在2001年提出,借鉴了遗传算法(Genetic Algorithm,GA)基于线性编码的个体变异机制与遗传编程(Genetic Programming,GP)适用于多种场景下的函数关联关系发现,并取得了较GA和GP方法100-60000倍进化效率的提升,这是由于GEP不仅继承了GA的简单性和变异的易操作性,还保持了GP在解决复杂问题时较强的空间搜索能力。作为"基因型/表现型"遗传算法,GEP编码简单、能解决复杂问题,且函数发现效率显著提高。GEP等进化计算方法已广泛应用于工程应用和科学研究各领域,这得益于其无须事先假定问题的先验模型,并具有较高的演化效率和精度的优势。近年来,GEP多应用于回归与分类,时序预测和数据挖掘等领域,尤其适用于发现大量数据的隐藏函数关系。

自Ferreira提出基因表达式编程方法以来,研究者对GEP算法从各方面提出了改进方案:(1)在种群的探索优化上,早期工作提出了基于分布概率的算子,提升搜索效率;对多模函数的研究提出基于合并与分类,自适应调整小生境半径的多样性策略;后续工作包括对适应度计算的改进,增加预测错误的样本权重并使用加权适应度,保障初始种群多样性,使用基因符-染色体序列频数表实现基因空间均匀分布初始化策略等。研究提出了镜像改变基因、扩宽选择邻域的改进,但有增加了复杂度和更大搜索空间中的早熟可能的缺点。(2)在以并行化为主的计算效率上,研究用GPU加速计算原始GEP,并使用最小二乘法优化演化得出的函数结构上的局部系数,增强了常量发现能力。其后的一项研究设计了按遗传操作数的年龄分层种群结构,并使用移植Spark框架的分布式架构,充分使用多GPU分配演化任务来加速计算。

然而,随着多种解空间探索和并行方法的提出,GEP中仍待研究解决的几种问题也逐渐显现,如上涉及的早期研究测试加速比所用函数较为简单,且没有结合GEP结构与编码上的改进进一步实现并行的问题;分布式的并行研究中不涉及单GPU的并行化,未能充分发挥GEP自身可并行性的问题;在个体表达时还存在着树生成的问题,即表达式树(Expression Tree,ET)的生成数量随初始种群规模、基因长度、进化代数等参数快速增长的问题,即使能避免类似于GP中的膨胀问题,动态生成和释放这些ET也需要消耗大量时空资源,并且伴随着树的生成和释放,还存在着重复遍历ET和计算的问题,影响种群计算速度。

综上可知,基因表达式编程常用于复杂高维函数发现,其改进算法,基于线性表的基因表达式编程(Scale Gene Expression Programming,Scale-GEP)有多种实践应用,然而其表达式树创建、翻译和评估过程计算代价仍较大,影响函数发现效率,并且GEP依然存在的收敛速度慢、容易陷入局部最优的问题。因此,如何提供一种解决上述技术问题的方案是本领域技术人员目前需要解决的问题。

发明内容

有鉴于此,本发明的目的在于提供一种数据处理方法、装置、设备及存储介质,能够提高了种群演化速度,并降低发现函数的误差。其具体方案如下:

第一方面,本发明公开了一种数据处理方法,包括:

对种群进行初始化以得到当前种群,并确定相应的目标种群演化算法;所述当前种群以待评估函数作为个体,所述目标种群演化算法为预先利用CUDA架构以及基于线性表的编码方式对基因表达式编程进行改进后得到的种群演化算法,并且,所述目标种群演化算法中采用用于增强个体表达的ADF基因;

基于所述目标种群演化算法中的CUDA架构以及预先定义的核函数对所述当前种群中的所有个体的适应度进行并行化的评估处理,以确定所述当前种群中各个体的当前适应度,并判断当前是否满足预设演化终止条件;

若当前不满足所述预设演化终止条件,则从所述当前种群中剔除所述当前适应度满足预设剔除条件的个体,并基于所述目标种群演化算法中的预设遗传算子对当前剔除后的剩余个体进行处理,以生成新的当前种群,并重新跳转至所述基于所述目标种群演化算法中的CUDA架构以及预先定义的核函数对所述当前种群中的所有个体的适应度进行并行化的评估处理的步骤;

若当前满足所述预设演化终止条件,则将所述当前适应度对应的个体解进行输出,以得到评估通过的若干目标函数。

可选的,所述从所述当前种群中剔除所述当前适应度满足预设剔除条件的个体,并基于所述目标种群演化算法中的预设遗传算子对当前剔除后的剩余个体进行处理,以生成新的当前种群,包括:

按照所述当前适应度的大小顺序对所述当前种群中的所有个体进行排序,以得到当前排序后种群;

将所述当前排序后种群中筛选出所述当前适应度小于预设适应度阈值的所有个体,并从所述当前种群中剔除当前筛选出的个体,以得到预设数量个的精英个体;

基于所述目标种群演化算法中的预设遗传算子对当前所述精英个体进行处理,以生成新的当前种群。

可选的,所述预设遗传算子包括突变算子、交叉算子、插串算子、转座算子、单点重组算子、多点重组算子和基因重组算子中的任意一种或几种的组合;

并且,当所述预设遗传算子包括所述突变算子,则所述方法还包括:设置用于确定所述突变算子的转移概率的终结符,以控制演化进程。

可选的,所述线性表由一个单独的中心单元组成,或由一个中心单元、左亚层子线性表和右亚层子线性表组成;其中,所述左亚层子线性表和所述右亚层子线性表具有相同的长度;

相应的,所述线性表的创建过程,包括:

对预先构建出的空队列进行初始化以得到当前队列,并选取所述当前队列的队首线性表;

依次遍历所述当前种群中各所述个体的基因序列的每个基因符号;

若所述基因符号为变量或常量的终结符,则将所述基因符号填入所述队首线性表的中心单元;

若所述基因符号为一元运算符,则将所述左亚层子线性表加入所述当前队列,并存储所述左亚层子线性表的线性表坐标;

若所述基因符号为二元运算符,则将所述左亚层子线性表和右亚层子线性表加入所述当前队列,并存储所述左亚层子线性表的线性表坐标和所述右亚层子线性表的线性表坐标。

可选的,所述基于所述目标种群演化算法中的CUDA架构以及预先定义的核函数对所述当前种群中的所有个体的适应度进行并行化的评估处理,包括:

基于所述目标种群演化算法中的CUDA架构以及预先定义的核函数,并利用GPU在不同的线程块上对所述当前种群中的所有个体的适应度进行并行化的评估和规约处理;

其中,不同所述线程块对应不同个体的计算,并且,每个所述GPU中均启动多个线程进行并行计算。

可选的,不同的所述线程用于处理不同的适应度评估实例,并且,相邻的所述线程访问数组索引连续的GPU内存位置。

可选的,所述基于所述目标种群演化算法中的CUDA架构以及预先定义的核函数对所述当前种群中的所有个体的适应度进行并行化的评估处理,包括:

更新每个ADF基因运算符的目数信息,以得到相应的ADF目数信息;

建立每个ADF基因对应的线性表,并遍历所述线性表的分支结构以将所述线性表转化为后缀表达式;

将所述当前种群中的所有个体对应的所述后缀表达式、常变量数组和所述ADF目数信息发送至GPU上,并在所述GPU上基于所述目标种群演化算法中的CUDA架构以及预先定义的核函数对所述当前种群中的所有个体的适应度进行并行化的评估处理。

第二方面,本发明公开了一种数据处理装置,包括:

种群初始化模块,用于对种群进行初始化以得到当前种群,并确定相应的目标种群演化算法;所述当前种群以待评估函数作为个体,所述目标种群演化算法为预先利用CUDA架构以及基于线性表的编码方式对基因表达式编程进行改进后得到的种群演化算法,并且,所述目标种群演化算法中采用用于增强个体表达的ADF基因;

并行化评估模块,用于基于所述目标种群演化算法中的CUDA架构以及预先定义的核函数对所述当前种群中的所有个体的适应度进行并行化的评估处理,以确定所述当前种群中各个体的当前适应度,并判断当前是否满足预设演化终止条件;

种群迭代模块,用于在当前不满足所述预设演化终止条件时,则从所述当前种群中剔除所述当前适应度满足预设剔除条件的个体,并基于所述目标种群演化算法中的预设遗传算子对当前剔除后的剩余个体进行处理,以生成新的当前种群,并重新跳转至所述基于所述目标种群演化算法中的CUDA架构以及预先定义的核函数对所述当前种群中的所有个体的适应度进行并行化的评估处理的步骤;

个体解输出模块,用于在当前满足所述预设演化终止条件时,则将所述当前适应度对应的个体解进行输出,以得到评估通过的若干目标函数。

第三方面,本发明公开了一种电子设备,包括:

存储器,用于保存计算机程序;

处理器,用于执行所述计算机程序,以实现前述公开的数据处理方法的步骤。

第四方面,本发明公开了一种计算机可读存储介质,用于存储计算机程序;其中,所述计算机程序被处理器执行时实现前述公开的数据处理方法的步骤。

可见,本发明提供了一种数据处理方法,包括:对种群进行初始化以得到当前种群,并确定相应的目标种群演化算法;所述当前种群以待评估函数作为个体,所述目标种群演化算法为预先利用CUDA架构以及基于线性表的编码方式对基因表达式编程进行改进后得到的种群演化算法,并且,所述目标种群演化算法中采用用于增强个体表达的ADF基因;基于所述目标种群演化算法中的CUDA架构以及预先定义的核函数对所述当前种群中的所有个体的适应度进行并行化的评估处理,以确定所述当前种群中各个体的当前适应度,并判断当前是否满足预设演化终止条件;若当前不满足所述预设演化终止条件,则从所述当前种群中剔除所述当前适应度满足预设剔除条件的个体,并基于所述目标种群演化算法中的预设遗传算子对当前剔除后的剩余个体进行处理,以生成新的当前种群,并重新跳转至所述基于所述目标种群演化算法中的CUDA架构以及预先定义的核函数对所述当前种群中的所有个体的适应度进行并行化的评估处理的步骤;若当前满足所述预设演化终止条件,则将所述当前适应度对应的个体解进行输出,以得到评估通过的若干目标函数。由此可见,本发明利用CUDA架构以及基于线性表的编码方式对基因表达式编程进行改进后得到的种群演化算法实现种群演化,其中,对基于线性表的基因表达式编程中的表达和评估过程进行改进,即利用线性表作为GEP的个体和表达式树的编码,并结合ADF基因增强个体表达,然后利用CUDA架构设计和并行化种群演化中计算耗时最多的评估过程,即基于CUDA架构和预先定义的核函数并行加速个体的评估过程,从而能够提高了种群演化速度,并降低发现函数的误差。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本发明公开的一种GEP的演化过程示意图;

图2为本发明公开的一种数据处理方法流程图;

图3为本发明公开的一种具体的含ADF的多基因个体和表达式树实例示意图;

图4为本发明公开的一种具体的数据处理方法流程图;

图5为本发明公开的一种具体的种群演化步骤与关键改进技术整体框架示意图;

图6为本发明公开的两种基因长度的速度对比示意图;

图7为本发明公开的不同多基因个数的速度对比示意图;

图8为本发明公开的一种数据处理装置结构示意图;

图9为本发明公开的一种电子设备结构图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

当前,GEP常用于复杂高维函数发现,其改进算法,Scale-GEP有多种实践应用,然而Scale-GEP中的表达式树创建、翻译和评估过程计算代价仍较大,影响函数发现效率,并且GEP依然存在的收敛速度慢、容易陷入局部最优的问题。为此,本发明提供了一种数据处理方案,能够提高了种群演化速度,并降低发现函数的误差。

需要指出的是,GEP、GP和GA等演化算法方法的首要目标是多次迭代演化个体组成的种群,以获得表示函数关系式的个体解,其中,GEP使用线性定长的符号串编码表示解,这种编码方式借鉴了开放读码框架的概念,通过划分基因的编码区与非编码区,能去除遗传操作的限制,提高运行效率。并且GEP的整体运行过程与其他演化计算方法类似,都是通过对复数个体,即种群的大量迭代修改,获得问题的最优解。参见图1所示,GEP的演化过程如下步骤:

(1)初始化个体种群。GEP使用定长的符号串编码作为种群中个体的基因型,以树作为表现型;

(2)根据问题事先确定表达方式,并表达全部个体;

(3)依据给定的适应度评估函数和样本数据评估所有个体,推断是否产生满足要求的解。这是进化过程中最为关键的步骤;

(4)如果当前个体中已经出现满足问题需要的解,则输出这组解并停止迭代,否则执行下一步骤(5);

(5)选择一部分具有较高适应度的个体组成新一代种群,选择策略可以包括但不限于锦标赛和轮盘赌等;

(6)变异种群中的个体。变异算子可以包括但不限于突变、交叉、转座等,然后跳转至步骤(2)。

本发明实施例公开了一种数据处理方法,参见图2所示,该方法包括:

步骤S11:对种群进行初始化以得到当前种群,并确定相应的目标种群演化算法;所述当前种群以待评估函数作为个体,所述目标种群演化算法为预先利用CUDA架构以及基于线性表的编码方式对基因表达式编程进行改进后得到的种群演化算法,并且,所述目标种群演化算法中采用用于增强个体表达的ADF基因。

本实施例中,初始化个体种群得到当前种群,并确定相应的目标种群演化算法。可以理解的是,随着问题规模的增加,GEP等演化算法需要提高种群搜索的效率,为此对基于线性表的基因表达式编程中的表达和评估过程的改进以提高种群演化效率,即利用线性表作为GEP的个体和表达式树的编码,并结合ADF(Auto Defined Function,自定义函数)基因增强个体表达,然后利用CUDA(Compute Unified Device Architecture,计算统一设备架构)设计和并行化种群演化中计算耗时最多的评估过程,得到一种新的CUDA-SGEP(目标种群演化算法),其中,SGEP即Scale-GEP。

需要指出是,Scale-GEP将GEP个体的表现型的表达式树(Expression Tree,ET)转换为Scale(线性表),并根据算子操作,减少进化过程中的计算开销。其中,所述线性表由一个单独的中心单元组成,或由一个中心单元、左亚层子线性表和右亚层子线性表组成;其中,所述左亚层子线性表和所述右亚层子线性表具有相同的长度。也即,Scale满足如下约束条件:

(1)Scale由一个单独的中心单元,或者由一个中心单元和左右亚层子Scale组成;

(2)当前Scale的左右亚层子Scale具有相同的长度;

(3)如果当前Scale包含左右亚层子Scale,则当前Scale中心单元存储左右亚层子Scale的中心单元坐标;

(4)Scale由一系列各个不同层次的Scale组成递归结构。类似于叶节点的Scale只包含中心单元。所有低层次的Scale递归组成一个高层次的Scale。

其中,计算Scale的时间复杂度:设种群规模为P,代数为G,运行次数为R,基因头长度为h,一次基因元素操作视为一个基本操作,则基于Scale的基因表达的时间消耗为至多3*(2*h+1)*P*G*R次基本操作,证明了线性表通过避免重复操作数的方式加速了评估计算。

并且所述线性表的创建过程为:对预先构建出的空队列进行初始化以得到当前队列,并选取所述当前队列的队首线性表;依次遍历所述当前种群中各所述个体的基因序列的每个基因符号;若所述基因符号为变量或常量的终结符,则将所述基因符号填入所述队首线性表的中心单元;若所述基因符号为一元运算符,则将所述左亚层子线性表加入所述当前队列,并存储所述左亚层子线性表的线性表坐标;若所述基因符号为二元运算符,则将所述左亚层子线性表和右亚层子线性表加入所述当前队列,并存储所述左亚层子线性表的线性表坐标和所述右亚层子线性表的线性表坐标。

例如,对于表达为Scale的基因含有ADF的情况,参见图3所示,顶部符号串为个体的两段基因序列,序列左边为表示ADF的基因,右边为主函数,都划分为头部和非头部区域,主函数在表达时,通过表示ADF的符号“F”调用ADF,形成多层基因结构。这条包含两个基因的序列可被转化为两个树、或表示树结构的Scale,虽然Scale在存储上以嵌套线性表形式存储,但是Scale仍表示树结构,Scale的建立从基因序列左端开始扫描,Scale坐标使用队列。首先,ADF基因序列对应根节点的最外层Scale把队列读取的“+”符号存入中心点,然后建立左右亚层子Scale,也就是将左右亚层子Scale的中心单元坐标存入队列,之后每次取出1个坐标,若为操作符,则根据目数存入坐标,若为变量或常量的终结符,则将符号存入中心单元,并计算出亚层子Scale的中心单元坐标,最后,当转化过程结束时,基因被表达至Scale中。

步骤S12:基于所述目标种群演化算法中的CUDA架构以及预先定义的核函数对所述当前种群中的所有个体的适应度进行并行化的评估处理,以确定所述当前种群中各个体的当前适应度,并判断当前是否满足预设演化终止条件。

需要指出的是,评估是更新个体适应度,保证种群搜索效果的关键步骤。适应度表示根据样本集评价的个体解的好坏,类似于损失函数的概念,并根据问题和编码表示应使用不同的适应度函数设计。其中,适应度计算函数的差异意味着不同的基因评价标准,如对误差和复杂度的要求。例如,可以使用如下的倒数形式的误差平方和作为适应度计算函数:

其中,IMSE表示适应度值,MSE表示误差平方和的均值,y

本实施例中,基于所述目标种群演化算法中的CUDA架构以及预先定义的核函数对所述当前种群中的所有个体的适应度进行并行化的评估处理,以确定所述当前种群中各个体的当前适应度。可以理解的是,并行化加速个体的评估过程,从而提高种群的进化效率。其中,并行化需要考虑程序本身可并行性,然后对程序使用CUDA自带的编译工具定位计算中耗时步骤。GEP中存在需要大量适应度实例计算的评估步骤,以及在评估前使用表达式树或者使用Scale时表达的计算,因此对于实际问题中快速增长的数据规模,并行设计能提供程序可扩展性。例如,使用C-CUDA和Python混合编程方式,其中,C-CUDA即用于C语言的CUDA,区别于用于Python的CUDA。首先定义包括定义种群编码、选择和变异算子在内的底层逻辑,用CUDA工具包实现并行加速的演化逻辑,然后用PyBind封装GEP的染色体和演化程序类,生成包含GEP库的Python扩展,最后在数据集上迭代训练并测试,检验种群运行的实时性能,并将解析的表达式树结构与实际表达式对比,组成完整的并行框架。

步骤S13:若当前不满足所述预设演化终止条件,则从所述当前种群中剔除所述当前适应度满足预设剔除条件的个体,并基于所述目标种群演化算法中的预设遗传算子对当前剔除后的剩余个体进行处理,以生成新的当前种群,并重新跳转至所述基于所述目标种群演化算法中的CUDA架构以及预先定义的核函数对所述当前种群中的所有个体的适应度进行并行化的评估处理的步骤。

本实施例中,在当前不满足所述预设演化终止条件时,则从所述当前种群中剔除所述当前适应度满足预设剔除条件的个体,并基于所述目标种群演化算法中的预设遗传算子对当前剔除后的剩余个体进行处理,以生成新的当前种群。例如,当前未达到预设种群迭代次数,则继续种群迭代以生成新的当前种群。具体的,按照所述当前适应度的大小顺序对所述当前种群中的所有个体进行排序,以得到当前排序后种群;将所述当前排序后种群中筛选出所述当前适应度小于预设适应度阈值的所有个体,并从所述当前种群中剔除当前筛选出的个体,以得到预设数量个的精英个体;基于所述目标种群演化算法中的预设遗传算子对当前所述精英个体进行处理,以生成新的当前种群。可以理解的是,选取适应度最优的指定数量个体作为精英个体,在评估后更新,每代替换最差个体。其中,所述精英个体表示种群进化到当前为止,适应度值最优的个体,具有最好的基因结构和优良特性,也即使用精英策略能保证种群搜索到的最优个体不会被丢弃或破坏。其中,包括传统GEP在内的遗传算法,使用每代保存最优个体的策略时能够收敛,而未做修改的不一定收敛,以及在实验中表明在去除精英策略后相比去除前的结果精度均明显下降,演化过程不稳定。

需要指出的是,所述预设遗传算子包括突变算子、交叉算子、插串算子、转座算子、单点重组算子、多点重组算子和基因重组算子中的任意一种或几种的组合;并且,当所述预设遗传算子包括所述突变算子,则所述方法还包括:设置用于确定所述突变算子的转移概率的终结符,以控制演化进程。也就是说,GEP的遗传算子包含变异(突变)、插串、转座、单点重组、多点重组和基因重组中的任意一种或几种的组合。本实施例中,参考GP和经典GEP实现对遗传算子的参数设置,并额外设置了函数、终结符,以及终结符中变量和变常量在应用突变算子时的转移概率,用于更准确地控制演化进程。并且,在使用遗传算子修改种群前,还可以加入使用重启机制的新算子,即依据适应度排序种群中的个体,然后选出适应度最差的部分个体,随机产生等量个体将其替换,相当于重启经典的GEP算法,通过产生新个体拓宽当前种群的探索域,在实验中发现在不使用重启机制时对参数更敏感,且在参数设置相同时,不使用重启机制的函数发现结果的精度也可能降低,表明重启机制通过引入新的基因片段增强了种群跳出局部最优的能力,避免程序出现早熟现象。

步骤S14:若当前满足所述预设演化终止条件,则将所述当前适应度对应的个体解进行输出,以得到评估通过的若干目标函数。

可以理解的是,在种群演化的过程中,如果当前满足所述预设演化终止条件,当前种群中的个体出现了满足问题需要的解,则输出这组解,并停止迭代。

可见,本发明实施例中,利用CUDA架构以及基于线性表的编码方式对基因表达式编程进行改进后得到的种群演化算法实现种群演化,其中,对基于线性表的基因表达式编程中的表达和评估过程进行改进,即利用线性表作为GEP的个体和表达式树的编码,并结合ADF基因增强个体表达,然后利用CUDA架构设计和并行化种群演化中计算耗时最多的评估过程,即基于CUDA架构和预先定义的核函数并行加速个体的评估过程,从而能够提高了种群演化速度,并降低发现函数的误差。

参见图4所示,本发明实施例公开了一种具体的数据处理方法,相较于上一实施例,本实施例对技术方案作了进一步的说明和优化。

步骤S21:对种群进行初始化以得到当前种群,并确定相应的目标种群演化算法;所述当前种群以待评估函数作为个体,所述目标种群演化算法为预先利用CUDA架构以及基于线性表的编码方式对基因表达式编程进行改进后得到的种群演化算法,并且,所述目标种群演化算法中采用用于增强个体表达的ADF基因。

步骤S22:基于所述目标种群演化算法中的CUDA架构以及预先定义的核函数,并利用GPU在不同的线程块上对所述当前种群中的所有个体的适应度进行并行化的评估和规约处理,以确定所述当前种群中各个体的当前适应度,并判断当前是否满足预设演化终止条件;其中,不同所述线程块对应不同个体的计算,并且,每个所述GPU中均启动多个线程进行并行计算。

本实施例中,利用GPU(Graphics Processing Unit,图形处理器)在不同的线程块上对所述当前种群中的所有个体的适应度进行并行化的评估和规约处理,也就是说,在单卡执行多线程的CUDA架构上实现并行化,进而实现对Scale-GEP的加速计算。可以理解的是,尽管GEP的步骤大部分按照串行执行,但GEP具有的计算密集性的特征和算法步骤具有的可并行性,使得GEP能够借助硬件资源加速这些步骤的计算。并且随着GPU等硬件及其并行技术快速发展,演化计算也出现了结合并行化加速计算的工作,也即,基于所述目标种群演化算法中的CUDA架构以及预先定义的核函数,并利用GPU在不同的线程块上对所述当前种群中的所有个体的适应度进行并行化的评估和规约处理,其中,CUDA是并行计算领域广泛使用的一种GPU的通用高级语言,提供了GPU编程接口,可处理数据传输、内存优化、线程同步等并行程序优化,不同的所述线程用于处理不同的适应度评估实例,并且,相邻的所述线程访问数组索引连续的GPU内存位置。由此可知,通过使用分布式框架使GEP在适应度评估实例计算上和不同程序上实现并行计算,能够提高硬件利用效率,并且基于多处理器的GEP在数据挖掘和分类问题的实验上表明,使用分布式平台和设计的并行算法能够有效提高进化效率。也就是说,

例如,参见图5所示,对每代的种群计算中占据主要耗时的评估过程并行化。个体使用线性表(Scale)编码替代传统表达式树,含ADF的多基因替代一般的单基因编码,以提高函数发现能力,并且在每代计算时,先将GEP中的定长基因串按给定的树遍历顺序转换为Scale,然后将个体线性表示的Scale,存储公式中常量值的数组这些计算所需的数据转移到GPU内存空间中,进一步利用核函数在GPU上利用并行评估算法和规约算法,在线程块上实现适应度的计算和规约,不同块对应着不同个体的计算,完成后从GPU传回规约后的适应度结果,执行其他较低耗时的串行演化步骤。整体的并行算法在单个GPU内部使用多线程同时计算,并实现了在Scale-GEP的算法基础上的进一步加速。

具体的,更新每个ADF基因运算符的目数信息,以得到相应的ADF目数信息;建立每个ADF基因对应的线性表,并遍历所述线性表的分支结构以将所述线性表转化为后缀表达式;将所述当前种群中的所有个体对应的所述后缀表达式、常变量数组和所述ADF目数信息发送至GPU上,并在所述GPU上基于所述目标种群演化算法中的CUDA架构以及预先定义的核函数对所述当前种群中的所有个体的适应度进行并行化的评估处理。

例如,本发明实施例提供了一种具体的并行评估整体算法,相比于经典GEP的并行,对Scale表达式和ADF编码做出了并行步骤的相应修改,参见表1所示算法1:

表1

可以理解的是,对每个ADF基因更新运算符的目数信息,然后建立Scale线性表用于表达,使用翻译,即算法中的Reorder方法遍历Scale的分支结构,转化为后缀表达式,然后将全体个体的表达式、常变量数组和ADF目数(arity)信息传输到GPU上,并在GPU上并行执行定义好的核函数。其中,建立Scale如表2所示的算法2:

表2

其中,Scale的建立表示将新一代个体的基因序列表达为Scale的过程,即依次遍历每个基因符并建立子线性表。若为变量或常量,将基因符号填入中心单元,没有左右亚层子;若为一元运算符,将左亚层子加入队列;若为二元运算符,将左右亚层子加入队列。运算符加入队列时,存储亚层子的线性表坐标。使用Scale线性表本质上是增加空间开销,减少了访问树的时间开销;其中ADF函数需要单独的中间结果计算和存储。

相应的,CUDA上的并行评估中涉及到核函数,如表3所示的算法3:

表3

可以理解的是,使用核函数对种群并行化评估,该算法3中特别指出了具体输入信息,其中,演化参数包括种群大小、基因符号表、个体基因符长度和数据集信息。每个线程负责计算一个适应度实例,若数据集规模超出流的线程上限时则可划分为小数据集,分别评估。评估算法根据基因符号表执行后缀表达式,获得计算结果,最终结果为块内个体的函数预测值。计算时,相同的块代表相同个体进行计算,且在计算时使用块内共享内存存储基因符号的运算输出,相邻线程访问数组索引连续的内存位置。

并且,在规约阶段中执行CUDA上的并行约简算法,在该过程中使用了多个线程块用于处理规模较大的数组,并使GPU中所有多处理器参与规约,每个线程块规约大数组的一部分,并使用内存拷贝传回Host端。ADF的计算主要影响评估,规约过程不需要改动,为了避免共享内存出现访问冲突,相邻线程按块内索引操作相邻数组元素,并且每个块完成按块划分的一段数组规约至数值的操作后,就把数值传回主机。

需要指出的是,ADF基因指多基因中具有特殊作用的基因,其作为函数间接地进行表达,扩展相同基因数量下表示的关系式域,提升了原有基因的表达能力。每ADF都是用于解决子问题的子函数,并在主函数中组合解决给定的感兴趣问题的程序。在初始化种群的过程中,所有ADF编码在每个染色体上的基因是随机产生的,在之后的演化中,突变和交叉将一并进化染色体的ADF。针对于简单问题,是否使用ADF对实验效果的影响不明显,且含有ADF的个体存在表达式较长的问题,但是随着问题复杂度增加,使用ADF可以增强GEP表达复杂结构的能力,借助所含子结构的表达能力,搜索到的表达式误差更小。

在上述CUDA并行化评估的过程中,含有ADF函数符号的基因需要用这一适应度实例的具体自变量值代入表达式,替代ADF函数符号指向的ADF基因中的变量符号,并用表达式树或Scale翻译的后缀表达式进行计算。

步骤S23:若当前不满足所述预设演化终止条件,则从所述当前种群中剔除所述当前适应度满足预设剔除条件的个体,并基于所述目标种群演化算法中的预设遗传算子对当前剔除后的剩余个体进行处理,以生成新的当前种群,并重新跳转至所述基于所述目标种群演化算法中的CUDA架构以及预先定义的核函数对所述当前种群中的所有个体的适应度进行并行化的评估处理的步骤。

步骤S24:若当前满足所述预设演化终止条件,则将所述当前适应度对应的个体解进行输出,以得到评估通过的若干目标函数。

关于上述步骤S21、步骤S23至步骤S24的具体内容可以参考前述实施例中公开的相应内容,在此不再进行赘述。

可见,本发明实施例中,利用CUDA架构以及基于线性表的编码方式对基因表达式编程进行改进后得到的种群演化算法实现种群演化,其中,对基于线性表的基因表达式编程中的表达和评估过程进行改进,即利用线性表作为GEP的个体和表达式树的编码,并结合ADF基因增强个体表达,然后利用CUDA架构设计和并行化种群演化中计算耗时最多的评估过程,即基于CUDA架构和预先定义的核函数在GPU上并行加速个体的评估过程,从而能够提高了种群演化速度,并降低发现函数的误差。

在验证本发明提出的CUDA-SGEP种群演化效果优于基于ET的原始GEP和Scale-GEP的种群演化效果的实验中,实验中所使用的用于函数发现的基准测评数据集选取自当前GEP研究的最优基准数据集,该数据集更接近于实际数据、更符合演化计算在函数发现问题上面临的挑战。数据集包含函数关系集F1,F3,F5,F7和F14,并且对每类函数,数据集提供了数百至一千范围内的样本点个数,样本点的自变量取值范围在F1至F7函数上为[-1,1],各数据集的函数关系式和多维度的F14函数上取值范围如表4所示:

表4

/>

在实验过程中,选择基准中具有代表性的F1、F3、F5、F7和F14函数发现数据集展示实验结果,数据集的函数发现难度依次增加。F1的实验提供了基础数据集上GEP的性能参考;F3和F5的关系式,表明不同关系式下GEP能稳定取得类似F1上的实验结果,并完善了精度和速度的实验结果;F7的式中含有单目运算符,用于测试GEP解决函数发现问题时,在解空间上的可扩展性,以及不同配置下性能差异;F14数据维度高、关系耦合,为数据集中极具挑战性的数据集,适合验证GEP方法在复杂函数数据上的表现。在这些数据集上,通过多组实验的速度和误差对比,在实验过程中,对比结果展示了基于CUDA的Scale-GEP的性能提升。

例如,使用基于CUDA并行计算平台上的Scale-GEP进行相应的实验,使用GEP中的锦标赛选择、单点重组和根移位(RIS,即Root Insertion Sequence)算子。实验环境为Intel i7-7700 x8 GTX 1050Ti、8G内存,编程语言为Python3、C++14和Pybind11封装,并且所用CUDA版本为11.4。

函数发现实验所用的基准数据取自的F1、F3、F5、F7和F14函数发现数据集,其函数关系式依次可分为多项式函数、含有三角函数的关系式和一个多维的复杂函数的例子。其中,多项式函数常作为检验符号回归算法性能的基础,原表达式中含有除“+、-、*、/”外函数的F7用于检验不同函数集下的性能,而F14则能够探索对于难以发现准确表达式的情况下的算法表现。数据范围中的3个数值分别表示自变量上界、下界和数据个数。

函数发现实验采用的参数配置如表5所示:

表5

其中,种群大小为50,这已被验证为在基准问题上一个合理的设置,种群迭代代数根据问题难度和实验确定为200代,头部长度即基因头部编码区符号数,在使用多基因的GEP中,有多个使用连接函数符连接表达式的线性串。在F1、F3、F5和F7数据集上均设置1个ADF基因,在F14上,实验设置2个ADF时,个体最优解的发现成功率更高,并且函数集中,函数F1、F3与F5函数集中不包含sin、cos等组成项,而F7数据集扩展函数集以获得准确表示。常量集中,ERC(即Ephemeral Random Constants)表示可变常量,在多基因间共享常量序数。在算子概率设置中,变异率和交叉率对实验数据集进行统一设置:变异率经过实验验证,设置为接近0.1的较小值,避免设置过大造成算法退化到解空间上的随机搜索;交叉率即重组算子概率,一般可以设为接近0.3、0.5的值,控制种群整体的变异步长,在探索与利用的平衡中利用当前代搜索到的基因材料,充分探索局部的解空间。

在实验中,基于上述实验数据集和超参数设置,对所提出CUDA-SGEP的计算效率和计算精度进行了对比分析,其中,计算效率还对多基因个数、基因长度进行了与基于ET的GEP和Scale-GEP的对比实验和分析。

第一、在计算效率上,使用种群演化过程中迭代的计算时间对比基于ET的GEP、基于Scale的GEP和使用CUDA加速的Scale-GEP的速度,参见表6所示:

表6

其中,基于ET的GEP,在F1数据集上每代种群的演化迭代耗时3.3s,每代之间耗时方差为1.0s。基于Scale的GEP在相同配置、相同数据集的F1下,每次演化迭代耗时1.5ms,速度相比基于ET的GEP显著提高,传统基于ET的GEP演化速度明显较慢;F3和F5的测试结果使用与F1相同的参数,耗时也非常相似。在1000个适应度实例的F14数据集上对比,未使用CUDA并行加速的Scale-GEP耗时13.9ms,接近线性增长。在使用相同参数配置的F14数据集上,结合CUDA并行加速提升性能,耗时1.4ms,接近于数据规模更小的F1数据集上耗时,速度增长非线性,体现了并行加速对速度的提升。因此,经过对比,对评估与表达并行加速后,耗时降至接近每代1.4ms,并且低于对原始GEP并行化的结果4.99ms。考虑CUDA-SGEP在获得与Scale-GEP相近的误差的同等演化代数下,每代耗时减小了8.4倍,提升并行化GEP的计算效率。

第二,基因长度对计算效率的影响,也即,对比有关基因长度的超参数对性能的影响,如上述表6所示,上述表6已经对基于ET的GEP、使用Scale和CUDA并行加速改进的GEP方法对比演化耗时,对这两种改进方法进行不同设置下的对比,如图6所示,在实验1中,基因头部h设置为3(含非编码区的全编码区总长度为11);在实验2中,基因头部h设置为5(含编码区和非编码区的基因总长度l);实验3、4中,基因头部h设置为7。上述设置是为了对比基因头长度和总长对演化速度的影响趋势。其中,在实验1中,基于Scale-GEP的方法每代演化耗时10.9ms,使用CUDA加速计算的Scale-GEP方法耗时1.4ms;实验2中,Scale-GEP方法每代演化耗时13.9ms,使用CUDA加速计算的Scale-GEP方法耗时1.4ms;实验3的耗时依次为16.0ms、1.5ms。最后,在控制基因头部长度h不变、改变总长度l的实验4中,Scale-GEP方法每代演化耗时16.0ms,使用CUDA并行加速的Scale-GEP方法耗时1.7ms,在多次实验的波动内与之前的耗时范围重叠,相比实验3及前两个实验的线性增长趋势很小,考虑GEP固有的随机性的条件下,每代演化耗时基本相同。作为对比,未使用线性加速的Scale-GEP在实验1到实验3中随着基因长度增加,每代演化耗时呈现为线性增长趋势。由此可知,对基因长度这组参数的实验通过不同参数下两种方法对比,表明了使用并行化方法对性能的稳定提升。由于基因头部长度与单个Scale长度直接关联,对不同长度的单基因实验结果显示,使用CUDA并行化的方法相比串行运行的GEP具有显著的加速优势。根据实验1到实验3的加速比增长,并行Scale-GEP的耗时增长更慢,适合处理长编码个体的大量演化操作。

第三、多基因数对计算效率的影响,即对比参数中的单个体多基因数对性能的影响。如图7所示,在实验1中,多基因个数为1,实验2到5中,基因个数依次增加。其中,在实验1中,基于Scale的GEP每代演化耗时7.3ms,使用CUDA加速计算的Scale-GEP方法耗时1.0ms。在实验3到5中,第一种方法的耗时依次为13.9ms、17.2ms和23.7ms,第二种方法的耗时依次为1.3ms、1.4ms和1.6ms,体现出加速计算的效果。Scale-GEP在增加用连接函数符连接的多基因个数后,耗时呈现线性增长,平均增长比为1.34。使用CUDA加速计算的CUDA-SGEP方法其耗时也呈现线性增长,平均增长比为1.17,多基因个数从1依次增加到5的情况下,耗时提高了2倍,相比于未使用的方法增长更慢,考虑误差范围后,使用并行加速的方法除实验1外,在实验2到5的每代演化耗时增长仍然很小,每代演化耗时基本相同。由此可知,对多基因数这组参数的实验通过不同参数下两种方法对比,进一步表明了CUDA并行化对参数依赖性降低,在复杂函数发现问题下性能具有稳定的提升。多基因数也就是个体表达的Scale个数,对不同基因数的多基因实验结果也显示出并行的优势,并且适合于多基因个体的大量演化操作。

例如,在实验中还利用误差说明了函数表达式发现结果的精度,如表7所示:

表7

由于F14包含难以通过x/x等方式产生的常数,两种GEP在所有数据集上都加入了可变常数项。在复杂度较低的数据上,使用包含ADF的改进后GEP与未使用的实验效果一致,在F7和F14上,最优误差值降低,100次重复实验统计得到的误差均值也降低。性能实验数据与改进前的Scale-GEP相对比均持平或提高。通过实验证明了本发明所提出的CUDA-SGEP方法在提高计算效率的同时不会损失计算精度,并且对于多个函数关系发现结果更准确。

相应的,本发明实施例还公开了一种数据处理装置,参见图8所示,该装置包括:

种群初始化模块11,用于对种群进行初始化以得到当前种群,并确定相应的目标种群演化算法;所述当前种群以待评估函数作为个体,所述目标种群演化算法为预先利用CUDA架构以及基于线性表的编码方式对基因表达式编程进行改进后得到的种群演化算法,并且,所述目标种群演化算法中采用用于增强个体表达的ADF基因;

并行化评估模块12,用于基于所述目标种群演化算法中的CUDA架构以及预先定义的核函数对所述当前种群中的所有个体的适应度进行并行化的评估处理,以确定所述当前种群中各个体的当前适应度,并判断当前是否满足预设演化终止条件;

种群迭代模块13,用于在当前不满足所述预设演化终止条件时,则从所述当前种群中剔除所述当前适应度满足预设剔除条件的个体,并基于所述目标种群演化算法中的预设遗传算子对当前剔除后的剩余个体进行处理,以生成新的当前种群,并重新跳转至所述基于所述目标种群演化算法中的CUDA架构以及预先定义的核函数对所述当前种群中的所有个体的适应度进行并行化的评估处理的步骤;

个体解输出模块14,用于在当前满足所述预设演化终止条件时,则将所述当前适应度对应的个体解进行输出,以得到评估通过的若干目标函数。

由上可见,本发明实施例中,利用CUDA架构以及基于线性表的编码方式对基因表达式编程进行改进后得到的种群演化算法实现种群演化,其中,对基于线性表的基因表达式编程中的表达和评估过程进行改进,即利用线性表作为GEP的个体和表达式树的编码,并结合ADF基因增强个体表达,然后利用CUDA架构设计和并行化种群演化中计算耗时最多的评估过程,即基于CUDA架构和预先定义的核函数并行加速个体的评估过程,从而能够提高了种群演化速度,并降低发现函数的误差。

在一些具体的实施例中,所述种群迭代模块13,具体可以包括:

排序子模块,用于按照所述当前适应度的大小顺序对所述当前种群中的所有个体进行排序,以得到当前排序后种群;

筛选子模块,用于将所述当前排序后种群中筛选出所述当前适应度小于预设适应度阈值的所有个体,并从所述当前种群中剔除当前筛选出的个体,以得到预设数量个的精英个体;

处理子模块,用于基于所述目标种群演化算法中的预设遗传算子对当前所述精英个体进行处理,以生成新的当前种群。

在一些具体的实施例中,所述线性表的创建过程,具体可以包括:

队列初始化模块,用于对预先构建出的空队列进行初始化以得到当前队列,并选取所述当前队列的队首线性表;

基因遍历模块,用于依次遍历所述当前种群中各所述个体的基因序列的每个基因符号;

基因符号填入模块,用于在所述基因符号为变量或常量的终结符时,则将所述基因符号填入所述队首线性表的中心单元;

第一处理模块,用于在所述基因符号为一元运算符时,则将所述左亚层子线性表加入所述当前队列,并存储所述左亚层子线性表的线性表坐标;

第一处理模块,用于在所述基因符号为二元运算符时,则将所述左亚层子线性表和右亚层子线性表加入所述当前队列,并存储所述左亚层子线性表的线性表坐标和所述右亚层子线性表的线性表坐标。

在一些具体的实施例中,所述并行化评估模块12,具体可以包括:

并行化子模块,用于基于所述目标种群演化算法中的CUDA架构以及预先定义的核函数,并利用GPU在不同的线程块上对所述当前种群中的所有个体的适应度进行并行化的评估和规约处理;

其中,不同所述线程块对应不同个体的计算,并且,每个所述GPU中均启动多个线程进行并行计算。

在一些具体的实施例中,所述并行化评估模块12,具体可以包括:

更新子模块,用于更新每个ADF基因运算符的目数信息,以得到相应的ADF目数信息;

建立子模块,用于建立每个ADF基因对应的线性表,并遍历所述线性表的分支结构以将所述线性表转化为后缀表达式;

信息发送子模块,用于将所述当前种群中的所有个体对应的所述后缀表达式、常变量数组和所述ADF目数信息发送至GPU上,并在所述GPU上基于所述目标种群演化算法中的CUDA架构以及预先定义的核函数对所述当前种群中的所有个体的适应度进行并行化的评估处理。

进一步的,本发明实施例还提供了一种电子设备。图9是根据一示例性实施例示出的电子设备20结构图,图中的内容不能认为是对本发明的使用范围的任何限制。

图9为本发明实施例提供的一种电子设备20的结构示意图。该电子设备20,具体可以包括:至少一个处理器21、至少一个存储器22、电源23、通信接口24、输入输出接口25和通信总线26。其中,所述存储器22用于存储计算机程序,所述计算机程序由所述处理器21加载并执行,以实现前述任一实施例公开的数据处理方法中的相关步骤。另外,本实施例中的电子设备20具体可以为电子计算机。

本实施例中,电源23用于为电子设备20上的各硬件设备提供工作电压;通信接口24能够为电子设备20创建与外界设备之间的数据传输通道,其所遵循的通信协议是能够适用于本发明技术方案的任意通信协议,在此不对其进行具体限定;输入输出接口25,用于获取外界输入数据或向外界输出数据,其具体的接口类型可以根据具体应用需要进行选取,在此不进行具体限定。

另外,存储器22作为资源存储的载体,可以是只读存储器、随机存储器、磁盘或者光盘等,其上所存储的资源可以包括操作系统221、计算机程序222等,存储方式可以是短暂存储或者永久存储。

其中,操作系统221用于管理与控制电子设备20上的各硬件设备以及计算机程序222,其可以是Windows Server、Netware、Unix、Linux等。计算机程序222除了包括能够用于完成前述任一实施例公开的由电子设备20执行的数据处理方法的计算机程序之外,还可以进一步包括能够用于完成其他特定工作的计算机程序。

进一步的,本发明实施例还公开了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序被处理器加载并执行时,实现前述任一实施例公开的数据处理方法步骤。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

以上对本发明所提供的一种数据处理方法、装置、设备及存储介质进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

技术分类

06120116511323