CN117216461A - 一种搭建遗传优化算法计算平台的方法及平台使用方法 - Google Patents
一种搭建遗传优化算法计算平台的方法及平台使用方法 Download PDFInfo
- Publication number
- CN117216461A CN117216461A CN202311076372.8A CN202311076372A CN117216461A CN 117216461 A CN117216461 A CN 117216461A CN 202311076372 A CN202311076372 A CN 202311076372A CN 117216461 A CN117216461 A CN 117216461A
- Authority
- CN
- China
- Prior art keywords
- function
- opencl
- functions
- chromosome
- optimization algorithm
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 230000002068 genetic effect Effects 0.000 title claims abstract description 82
- 238000005457 optimization Methods 0.000 title claims abstract description 74
- 238000000034 method Methods 0.000 title claims abstract description 54
- 230000006870 function Effects 0.000 claims abstract description 302
- 210000000349 chromosome Anatomy 0.000 claims description 69
- VYZAMTAEIAYCRO-UHFFFAOYSA-N Chromium Chemical compound [Cr] VYZAMTAEIAYCRO-UHFFFAOYSA-N 0.000 claims description 18
- 239000000872 buffer Substances 0.000 claims description 17
- 230000035772 mutation Effects 0.000 claims description 8
- 238000004364 calculation method Methods 0.000 claims description 7
- 238000011161 development Methods 0.000 abstract description 5
- 238000003860 storage Methods 0.000 description 5
- 238000010586 diagram Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 206010061765 Chromosomal mutation Diseases 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 125000006850 spacer group Chemical group 0.000 description 1
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开一种搭建遗传优化算法计算平台的方法及平台使用方法,搭建遗传优化算法计算平台的方法包括:采用OpenCL编程语言依次实现多个OpenCL内核函数;使用编程语言构建一个抽象的GA类,并为GA类添加多个类函数;基于OpenCL内核函数,依次为各个类函数添加具体功能。本发明基于OpenCL搭建遗传优化算法计算平台,使用时只用提供目标函数,即可通过该平台基于GPU并行计算求解,从而实现快速开发、快速计算的功能。
Description
技术领域
本发明属于遗传算法并行化技术领域,更具体地,涉及一种搭建遗传优化算法计算平台的方法及平台使用方法。
背景技术
遗传算法是一种优化算法,通过计算机模仿染色体变异的方式来寻找目标函数的最优解,目前遗传算法没有具体的标准,变化多样,当目标函数发生变化时,往往需要做大量的修改以适应新的目标优化,且当前大多数采用CPU来进行计算,效率低下。
鉴于此,如何克服上述现有技术所存在的技术问题是本技术领域亟待解决的难题。
发明内容
本发明的目的之一在于克服上述现有技术中存在的技术问题:当前采用遗传算法来对目标函数寻优,都是针对不同的目标函数重新开发代码或者程序,效率低下,且当前的技术针对遗传算法寻优,大部分是CPU上开发及应用的,遗传算法需要大量的染色体进行逐个计算,CPU效率低下。本发明提出了一种搭建遗传优化算法计算平台的方法及平台使用方法,基于并行编程语言(例如OpenCL)搭建遗传优化算法计算平台,使用时只用提供目标函数,即可通过该平台基于GPU并行计算求解,从而实现快速开发、快速计算的功能。
为实现上述目的,按照本发明的第一方面,提供了一种搭建遗传优化算法计算平台的方法,包括:
采用并行编程语言依次实现遗传优化算法的多个内核函数;
构建一个抽象的GA类,并为GA类添加遗传优化算法的多个类函数;
基于内核函数,依次为各个类函数添加遗传优化算法的具体功能。
进一步的,所述采用OpenCL编程语言依次实现多个OpenCL内核函数具体包括:
建立多个OpenCL内核函数,以依次实现染色体解码、目标值取反、染色体选择、染色体交叉、染色体变异、最大值及索引寻找、条目记录、返回最佳自变量和最佳目标值的功能。
进一步的,所述建立多个OpenCL内核函数,以依次实现染色体解码、目标值取反、染色体选择、染色体交叉、染色体变异、最大值及索引寻找、条目记录、返回最佳自变量和最佳目标值的功能具体包括:
用Xi(Xi=(x0,x1,...,xn_dim))表示遗传算法种群中每一个个体,Yi表示每个Xj所计算得到的目标值,n_dim为自变量维度;
建立函数cl_chrom2x(...),以实现将遗传算法中编码好的染色体解码为自变量x0~xndims;
建立函数cl_ranking(...),以实现将所有Xi计算得到的目标值Yi取反;
建立函数cl_selection(...),以实现遗传算法中染色体的选择功能;
建立函数cl_crossover(...),以实现遗传算法中的染色体交叉功能;
建立函数cl_mutation(...),以实现遗传算法中的染色体变异功能;
建立函数cl_FitV_argmax(...),以实现寻找当前所有Xi所对应Yi中,最大值Ymax及索引i;
建立函数cl_record(...),以实现记录三个条目:每轮迭代过程中Ymax及其所对应的Xi,每轮迭代的所有Y及其对应的X,基于每轮迭代所记录的值Ymax记录并更新全局最大值Ymax,global及其对应的X;
建立函数cl_get_best(...),以实现从OpenCL设备返回最佳自变量和最佳目标值。
进一步的,所述为GA类添加遗传优化算法的多个类函数具体包括添加init函数、use_OpenCL函数、init_fun函数、cl_run函数。
进一步的,所述基于内核函数,依次为各个类函数添加具体功能具体包括:
为init函数添加具体功能,使init函数根据目标优化函数及函数变量,编码并初始化遗传算法所需的染色体数组;
为use_OpenCL函数添加具体功能,使use_OpenCL函数根据init函数计算得到的数据,自动编写OpenCL运算所需的常量定义字符串,并根据OpenCL的标准接口,获取OpenCL计算设备的上下文和命令队列;
为init_fun函数添加具体功能,使init_fun函数根据use_OpenCL函数生成的常量定义字符串、目标函数OpenCL的内核函数程序字符串、及内核函数字符串,拼接完整可编译执行的OpenCL目标程序字符串;
为cl_run函数添加具体功能,使cl_run函数依次执行内核函数以完成目标优化功能。
进一步的,所述为init函数添加具体功能具体包括:
Init函数的参数包括:优化目标函数自变量数目n_dims、种群规模size_pop、最大迭代次数max_iter、染色体变异概率prob_mut、目标函数自变量取值下边界1b、目标函数自变量取值下边界ub;
用xi,i∈{0,1,...,ndim}表示目标函数的第i个自变量,用[]表示向下取整,计算每个xi的编码长度;
计算编码每个染色体所需要的总长度len_chorm;
根据计算得到的len_chrom,及size_pop,初始化种群的染色体Chrom,即初始化一个大小为len_chrom*size_pop的数组Chrom;
随机初始化数组中Chrom,每个数的取值范围为{0,1}。
进一步的,所述为use_OpenCL函数添加具体功能具体包括:
分别计算x0、x0~x1、x0~x2、...x0~xn编码所需要的染色体长度数组Lind_length;
自动生成OpenCL代码字符串str,str中定义了OpenCL kernel执行所需要的常量;
根据OpenCL接口,获取OpenCL计算设备的上下文cl_context、命令队列cl_queue。
进一步的,所述为init_fun函数添加具体功能具体包括:
init_fun()函数接入2个参数:param1,param2,第一个参数param1是一个字典,第二个参数param2是一个字典的列表;
对传入的param1解析,解析字典中buffer_id,buffer_size,buffer_type属性,依次在OpenCL上申请相应的大小内存空间;
逐步对传入的param2中每个字典进行解析,解析字典中kernel_path,从该路径将kernel函数读取,并拼接至字符串str中;
对str进行编译,向OpenCL设备上申请内存空间buffer,并对OpenCL函数运行过程中所对应的内存空间buffer进行说明。
进一步的,所述为cl_run函数添加具体功能具体包括:
令i表示当前迭代次数,初始i=0;
判断i<Max_iter是否成立;
如果成立,则依次执行如下OpenCL函数:cl_chrom2x(...)、cl_x2y(...)、cl_ranking(...)、cl_selection(...)、cl_crossover(...)、cl_mutation(...)、cl_FitV_argmax(...)、cl_record(...),然后令i=i+1并重新判断i<Max_iter是否成立;
如果不成立,则执行OpenCL内核函数cl_get_best(),得到寻优过程中最佳函数目标值global_best_Y,及所对应的自变量np_global_best_X。
第二方面,本发明提供一种平台使用方法,应用于如第一方面所述的搭建遗传优化算法计算平台的方法所搭建的平台,包括:
提前编写目标优化函数的OpenCL kernel函数;
按照预定格式编写好对应的param1、param2;
构建一个GA类的实例,GA_example;
调用GA_example的init()函数,传入对应的参数,进行初始化;
调用GA_example的use_OpenCL()函数,进行OpenCL初始化;
调用GA_example的init_fun()函数,传入编写好的param1、param2,初始化OpenCL目标优化函数并编译;
调用GA_example的cl_run()函数,进行最终的目标优化。
总体而言,通过本发明所构思的以上技术方案与现有技术相比,具有如下有益效果:本发明提出了一种搭建遗传优化算法计算平台的方法及平台使用方法,基于并行编程语言(例如OpenCL)搭建遗传优化算法计算平台,使用时只用提供目标函数,即可通过该平台基于GPU并行计算求解,从而实现快速开发、快速计算的功能。
附图说明
图1为本发明实施例提供的一种搭建遗传优化算法计算平台的方法流程图;
图2为本发明实施例提供的步骤100扩展流程图;
图3为本发明实施例提供的为init函数添加具体功能的扩展流程图;
图4为本发明实施例提供的为use_OpenCL函数添加具体功能的扩展流程图;
图5为本发明实施例提供的为init_fun函数添加具体功能的扩展流程图;
图6为本发明实施例提供的为c1_run函数添加具体功能的扩展流程图;
图7为本发明实施例提供的一种平台使用方法流程图;
图8为本发明实施例提供的一种搭建遗传优化算法计算平台的装置的结构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
本发明是一种特定功能系统的体系结构,因此在具体实施例中主要说明各结构模组的功能逻辑关系,并不对具体软件和硬件实施方式做限定。
此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合,各个步骤在符合逻辑、不冲突的情况下也可以调换先后顺序。下面就参考附图和实施例结合来详细说明本发明。
现有技术中,遗传算法是一种用来寻找目标函数最优解的方法,其常见的做法是:1、确定优化函数;2、明确目标优化函数的自变量;3、根据自变量的个数确定遗传算法的染色体长度;4、确定染色体的规模;5、迭代计算,染色体交叉、染色体变异、染色体选择,直至目标函数收敛,从而确定出合适的染色体及对应的自变量数值。
当前采用遗传算法来对目标函数寻优,都是针对不同的目标函数重新开发代码或者程序,效率低下,且当前的技术针对遗传算法寻优,大部分是CPU上开发及应用的,遗传算法需要大量的染色体进行逐个计算,CPU效率低下。
为解决上述问题,本发明提供了一种搭建遗传优化算法计算平台的方法,如图1所示,包括如下步骤。
步骤100:采用并行编程语言依次实现遗传优化算法的多个内核函数。在本发明实施例中,优选采用OpenCL编程语言依次实现多个OpenCL内核函数(OpenCL kernel函数),可以理解的是,除了OpenCL编程语言,采用其他编程语言也可实现功能,而类似于OpenCL的并行编程能加快运算,所以为优选。在本发明实施例的该步骤中,需要建立多个OpenCL内核函数,以依次实现染色体解码、目标值取反、染色体选择、染色体交叉、染色体变异、最大值及索引寻找、条目记录、返回最佳自变量和最佳目标值的功能。
步骤200:构建一个抽象的GA类,并为GA类添加遗传优化算法的多个类函数。在本发明实施例中,使用编程语言构建一个抽象的GA类,并为GA类添加多个类函数,该步骤采用的编程语言可以为任意编程语言。在本发明实施例的该步骤中,所述为GA类添加多个类函数具体包括添加init函数、use_OpenCL函数、init_fun函数、cl_run函数。
步骤300:基于内核函数,依次为各个类函数添加遗传优化算法的具体功能。在本发明实施例中,基于OpenCL内核函数,依次为各个类函数添加具体功能。在本发明实施例的该步骤中,所述基于OpenCL内核函数,依次为各个类函数添加具体功能具体包括:为init函数添加具体功能;为use_OpenCL函数添加具体功能;为init_fun函数添加具体功能;为cl_run函数添加具体功能。其中,为init函数添加具体功能,使init函数根据目标优化函数及函数变量,编码并初始化遗传算法所需的染色体数组;为use_OpenCL函数添加具体功能,使use_OpenCL函数根据init函数计算得到的数据,自动编写OpenCL运算所需的常量定义字符串,并根据OpenCL的标准接口,获取OpenCL计算设备的上下文和命令队列;为init_fun函数添加具体功能,使init_fun函数根据use_OpenCL函数生成的常量定义字符串、目标函数OpenCL的内核函数程序字符串、及目标函数函数内核函数字符串(这两个字符串是采用OpenCL编写的程序,将编写好的程序像读取文档一样读入字符串),拼接完整可编译执行的OpenCL目标程序字符串;为cl_run函数添加具体功能,使cl_run函数依次执行内核函数以完成目标优化功能。
参考图2所示,在本发明实施例中,步骤100:采用OpenCL编程语言依次实现多个OpenCL内核函数,也即建立多个OpenCL内核函数,以依次实现染色体解码、目标值取反、染色体选择、染色体交叉、染色体变异、最大值及索引寻找、条目记录、返回最佳自变量和最佳目标值的功能具体包括如下步骤。需说明,此步骤中,用Xi(Xi=(x0,x1,...,xn_dim))表示遗传算法种群中每一个个体,Yi表示每个Xi所计算得到的目标值,n_dim为自变量维度。
步骤101:建立函数cl_chrom2x(...),该函数主要用以实现将遗传算法中编码好的染色体解码为自变量x0~xndims。需说明,染色体是编码好的二进制数串,xj设编码为l+1位二进制串,为:
<Sl,Sl-1,Sl-2…S0>,
转换为十进制数公式为:
其中,ubj,lbj分别为xj的上边界和下边界。
步骤102:建立函数cl_ranking(...),该函数主要用以实现将所有Xi计算得到的目标值Yi取反。
步骤103:建立函数cl_selection(...),该函数主要用以实现遗传算法中染色体的选择功能。在本发明实施例中,对产生的染色体进行选择,每次随机抽取30个染色体,选取其中cl_ranking值较大的一个保留下来,重复次数为种群的大小。
步骤104:建立函数cl_crossover(...),该函数主要用以实现遗传算法中的染色体交叉功能。在本发明实施例中,对染色体两两交叉配对,设其中的一条染色体编码为111100000,另一条为000011100,从中间开始交叉变异,那么新产生染色体为111111100和000000000。
步骤105:建立函数cl_mutation(...),该函数主要用以实现遗传算法中的染色体变异功能。在本发明实施例中,1条编码好的染色体每个值的取值范围为{0,1},设编码好的一条染色体为100110011,变异概率为0.1,生成9个0~1之间的随机值,第4~7个随机值小于0.1,可能会出现突变后编码为100001111,如举例所示,中间四位都发生突变。
步骤106:建立函数cl_FitV_argmax(...),该函数主要用以实现寻找当前所有Xi所对应Yi中,最大值Ymax及索引i。
步骤107:建立函数cl_record(...),该函数主要用以实现记录三个条目:每轮迭代过程中Ymax及其所对应的Xi,每轮迭代的所有Y及其对应的X,基于每轮迭代所记录的值Ymax记录并更新全局最大值Ymax,global及其对应的X。
步骤108:建立函数cl_get_best(...),该函数主要用以实现从OpenCL设备返回最佳自变量和最佳目标值。
参考图3所示,在本发明实施例中,步骤300中所述为init函数添加具体功能,具体包括如下步骤。需说明,该步骤中,Init函数的参数主要包括:优化目标函数自变量数目n_dims、种群规模size_pop、最大迭代次数max_iter、染色体变异概率prob_mut、目标函数自变量取值下边界lb、目标函数自变量取值下边界ub。
步骤311:用xi,i∈{0,1,...,ndim}表示目标函数的第i个自变量,用[]表示向下取整,计算每个xi的编码长度。具体的,xi的编码长度lindi按如下方式进行计算:
lindi=[Lindi]。
步骤312:计算编码每个染色体所需要的总长度len_chorm。具体的,总长度len_chorm按如下方式进行计算:
步骤313:根据计算得到的len_chrom,及size_pop,初始化种群的染色体Chrom,即初始化一个大小为len_chrom*size_pop的数组Chrom。
步骤314:随机初始化数组Chrom中每一个值,每个数的取值范围为{0,1}。
参考图4所示,在本发明实施例中,步骤300中所述为use_OpenCL函数添加具体功能具体包括如下步骤。
步骤321:分别计算x0、x0~x1、x0~x2、...x0~xn编码所需要的染色体长度数组Lind_length。具体的,按如下方式进行计算:
步骤322:自动生成OpenCL代码字符串str,str中定义了OpenCL kernel执行所需要的常量。具体的:1、生成lind_str,用OpenCL格式定义cl_lind常量int数组,值与clind相同;2、生成lind_length_str,用OpenCL格式定义cl_lind_length常量int数组,值与上述的lind_length相同;3、生成lb_str,用OpenCL格式定义cl_lb常量int数组,值与lb相同;4、生成ub_str,用OpenCL格式定义cl_ub常量int数组,值与ub相同;5、生成size_pop_str,用OpenCL格式定义int常量cl_size_pop,值与size_pop相同;6、生成prob_mut_str,用OpenCL格式定义float常量cl_prob_mut,值和上述的prob_mut相同;7、生成n_dims_str,用OpenCL格式定义int常量cl_n_dims,值和n_dims相同;8、生成chrom_length_str,用OpenCL格式定义int常量cl_chrom_length,值和chrom_length相同;9、用lind_str、lind_length_str、lb_str、ub_str、size_pop_str、prob_mut_str、n_dims_str、chrom_length_str,用换行符作为间隔符,拼接起来组成str,并在str尾添加换行符。
步骤323:根据OpenCL接口,获取OpenCL计算设备的上下文cl_context、命令队列cl_queue。
参考图5所示,在本发明实施例中,步骤300中所述为init_fun函数添加具体功能具体包括如下步骤。
步骤331:init_fun()函数接入2个参数:paraml,param2,第一个参数param1是一个字典dict,第二个参数param2是一个字典dict的列表list。参数一般如下所示:
param1,所需要申请的buffer(缓冲区),大小与数量,一般组成如下:
{
“buffer_id”:“buffer_X,buffer_Y,id_2,id_3...”;
“buffer_size”:“size_0,size_1,size_2,size3...”;
“buffer_type”“type0,type1,type2”
}
其中“buffer_id”记录每个buffer的标识符(名字);“buffer_size”记录每个buffer所需要申请的空间大小;buffer_type记录对应于内存数据类型,有整型(int)、浮点型(float)两种。不同的buffer_id、buffer_size、buffer_type均用“,”隔开。
param2,目标kernel函数:
[{
“kernel_path”:“...”;
“global_size”:“(gs0,gs1)”;
“local_size”:“(ls0,ls1)”;
“buffer_id”:“id_0,id1,id2...”
},
{
…
}]
其中,kernel_path表示用户自己所写的目标函数的OpenCL式的kernel函数的绝对路径;global_size、local_size(OpenCL中专业术语)为基于OpenCL需要为该kernel申请的全局工作组大小和局部工作组大小;buffer_id即该kernel函数计算所需要的buffer的标识符,有且必须在第一个参数中。
步骤332:对传入的param1解析,解析字典中buffer_id,buffer_size,buffer_type属性,依次在OpenCL上申请相应的大小内存空间。
步骤333:逐步对传入的param2中每个字典进行解析,解析字典中kernel_path,从该路径将kernel函数读取,并拼接至字符串str中。
需说明,本实施例在步骤331的过程中,会申请到OpenCL上的内存buffer_X,大小为size_pop*n_dims*4,表示每个自变量;buffer_Y,大小为size_pop*4,表示每个自变量所对应的Y值。
在本发明实施例中,为该类添加一个cl_x2y()函数,该函数的功能是按照步骤331和步骤332中list顺序,及其对应申请的buffer,依次执行相对应的kernel函数。
在本发明实施例中,依次读取步骤100中所编写好的OpenCL kernel函数,分别读取到字符串如下相对应的字符串:1、cl_chrom2x(...)→cl_chrom2x_str;2、cl_x2y(...)→cl_x2y_str;3、cl_ranking(...)→cl_ranking_str;4、cl_crossover(...)→cl_crossover_str;5、cl_mutation(...)→cl_mutation_str;6、cl_FitV_argmax(...)→cl_FitV_argmax_str;7、cl_record(...)→cl_record_str。
在本发明实施例中,用换行符“\n”,依次将上述的cl_chrom2x_str、cl_ranking_str、cl_crossover_str、cl_mutation_str、cl_FitV_argmax_str、cl_record_str,拼接至str中。
步骤334:对str进行编译,向OpenCL设备上申请内存空间buffer,并对OpenCL函数运行过程中所对应的内存空间buffer进行说明。
在本发明实施例中,调用OpenCL标准接口编译函数,对上述str进行编译。
在本发明实施例中,向OpenCL设备上申请如下内存空间(buffer):1、Buffer_chrom,大小为size_pop*len_chrom*4,表示所有编码后的染色体;2、Buffer_chrom_temp,大小和Buffer_chrom相同,辅助计算的Buffer_chorm缓存;3、Buffer_fitV,大小和Buffer_Y相同,用于对Buffer_Y求负,求解目标最大值转换为求解目标最小值;4、Global_best_X,大小为n_dims*4,记录全局最佳自变量;5、Global_best_Y,大小为1*4,记录全局最佳目标函数值;6、Generation_best_index,大小为1*10*4,最佳自变量的索引;7、Generation_best_X,大小为max_iter*size_pop*4,每轮迭代中最佳自变量;8、Generation_best_Y,大小为max_iter*1*4,每轮迭代中最佳目标函数值;9、all_history_Y,大小为max_iter*size_pop*4,所有历史出现的值;10、all_history_FitV,大小为max_iter*size_pop*4,所有历史值的负数。
在本发明实施例中,对上述的OpenCL函数运行过程中,所对应的buffer进行说明:1、cl_chrom2x→buffer_chrom、buffer_X;2、cl_ranking→buffer_Y,buffer_fitV;3、cl_crossover→buffer_chorm;4、cl_selection→buffer_chorm、buffer_chorm_tmp、buffer_fitV;5、cl_mutation→buffer_chorm;6、cl_FitV_argmax→generation_best_X、generation_best_Y、all_history_Y、all_history_FitV、buffer_X、buffer_fitV、buffer_Y、generation_best_index、global_best_X、global_best_Y;7、cl_get_bext→generation_best_X、generation_best_Y。
需说明,步骤332“依次在OpenCL上申请相应的大小内存空间”,只是目标优化函数OpenCL内核函数所需要的内存空间(buffer);步骤334“向OpenCL设备上申请内存空间buffer”,是步骤101-步骤108中通用内核函数所需要用到的内存空间(buffer)。
参考图6所示,在本发明实施例中,步骤300中所述为cl_run函数添加具体功能具体包括如下步骤。
步骤341:令i表示当前迭代次数,初始i=0。
步骤342:判断i<Max_iter是否成立。
步骤343:如果成立,则依次执行如下OpenCL函数:cl_chrom2x(...)、cl_x2y(...)、cl_ranking(...)、cl_selection(...)、cl_crossover(...)、cl_mutation(...)、cl_FitV_argmax(...)、cl_record(...),然后令i=i+1并重新判断i<Max_iter是否成立。
步骤344:如果不成立,则执行OpenCL内核函数cl_get_best(),得到寻优过程中最佳函数目标值global_best_Y,及所对应的自变量np_global_best_X。
综上所述,本发明提出了一种搭建遗传优化算法计算平台的方法及平台使用方法,基于OpenCL搭建遗传优化算法计算平台,使用时只用提供目标函数,即可通过该平台基于GPU并行计算求解,从而实现快速开发、快速计算的功能。
本发明实施例还提供一种平台使用方法,应用于如上实施例所述的搭建遗传优化算法计算平台的方法所搭建的平台,如图7所示,包括如下步骤。
步骤10:提前编写目标优化函数的OpenCL kernel函数。
步骤20:按照预定格式编写好对应的param1、param2。
步骤30:构建一个GA类的实例,GA_example。
步骤40:调用GA_example的init()函数,传入对应的参数,进行初始化。
步骤50:调用GA_example的use_OpenCL()函数,进行OpenCL初始化。
步骤60:调用GA_example的init_fun()函数,传入编写好的param1、param2,初始化OpenCL目标优化函数并编译。
步骤70:调用GA_example的cl_run()函数,进行最终的目标优化。
具体的,下面通过一个实际的例子来对本方案就行进一步说明。
1、下表列出某公司实际生产的过程中产生的数据,共100条。
2、具体的需求是希望基于这些数据找到一组合适的{x0,x1,x2,x3,x4,x5},能够使得:
result=max{temp1,temp2,temp3...,temp100}
即{ai,bi,ci},表示上表中的第i条数据,result是最终要优化的目标值,找到1组{x0,x1,x2,x3,x4,x5},使得result值越大越好。
3、可以看到n_dims=6,设种群规模size_pop为100,Max_iter为50,变异概率prob_mut为0.01,{x0,x1,x2,x3,x4,x5}取值下边界lb={0.1,0.2,0.3,0.4,0.5,0.1},取值下边界ub={0.3,0.4,0.5,0.6,0.7,0.9}。
4、根据上述2中实际需求和公式编写OpenCL kernel函数,从实际情况来看,需要两个kernel函数,fun0先用于求解tempi,fun1用于找到最大值,求解result。
5、对4中fun0、fun1配置好param1、param2参数。
param1:
{
buffer_id:“buffer_X,buffer_Y,buffer_A,buffer_B,buffer_C,buffer_temp“;
buffer_size:“100*6*4,100*4,100*4,100*4,100*4,100*100”;
buffer_type:“float,float,float,float,float,float”
}
param2:
[{
“kernel_path”:“fun0_path”;
“global_size”:“(100,100)”;
“local_size”:“(1,1)”;
“buffer_id”:“buffer_A,buffer_B,buffer_C,buffer_X,buffer_temp”;
},
{
“kernel_path”:“fun1_path”;
“global_size”:“(100,1)”;
“local_size”:“(100,1)”;
“buffer_id”:“buffer_temp,buffer_Y”
},
]
6、构建一个GA类的实例,GA_example。
7、调用GA_example的init()函数,传入1中对应的参数,进行初始化。
8、调用GA_example的use_OpenCL()函数,进行OpenCL初始化。
9、调用GA_example的init_fun()函数,传入5中的param1、param2初始化OpenCL目标优化函数并编译。
10、调用GA_example的cl_run()函数,进行最终的目标优化,得到global_best_X和global_best_Y。例如,global_best_X=[0.288,0.2038,0.300,0.593,0.500,0.844];global_best_Y=140.50。
综上所述,本发明提出了一种搭建遗传优化算法计算平台的方法及平台使用方法,基于OpenCL搭建遗传优化算法计算平台,使用时只用提供目标函数,即可通过该平台基于GPU并行计算求解,从而实现快速开发、快速计算的功能。
在上述实施例提供的搭建遗传优化算法计算平台的方法的基础上,本发明还提供了一种可用于实现上述方法的搭建遗传优化算法计算平台的装置,如图8所示,是本发明实施例的装置架构示意图。本实施例的搭建遗传优化算法计算平台的装置包括一个或多个处理器21以及存储器22。其中,图8中以一个处理器21为例。
处理器21和存储器22可以通过总线或者其他方式连接,图8中以通过总线连接为例。
存储器22作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如上述实施例中的搭建遗传优化算法计算平台的方法。处理器21通过运行存储在存储器22中的非易失性软件程序、指令以及模块,从而执行搭建遗传优化算法计算平台的装置的各种功能应用以及数据处理,即实现本发明实施例的搭建遗传优化算法计算平台的方法。
存储器22可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器22可选包括相对于处理器21远程设置的存储器,这些远程存储器可以通过网络连接至处理器21。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
程序指令/模块存储在存储器22中,当被一个或者多个处理器21执行时,执行上述实施例中的搭建遗传优化算法计算平台的方法,例如,执行以上描述的图1至图6所示的各个步骤。
本领域普通技术人员可以理解实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(ReadOnlyMemory,简写为:ROM)、随机存取存储器(RandomAccessMemory,简写为:RAM)、磁盘或光盘等。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。
Claims (10)
1.一种搭建遗传优化算法计算平台的方法,其特征在于,包括:
采用并行编程语言依次实现遗传优化算法的多个内核函数;
构建一个抽象的GA类,并为GA类添加遗传优化算法的多个类函数;
基于内核函数,依次为各个类函数添加遗传优化算法的具体功能。
2.根据权利要求1所述的搭建遗传优化算法计算平台的方法,其特征在于,所述采用并行编程语言依次实现遗传优化算法的多个内核函数包括:
建立多个OpenCL内核函数,以依次实现染色体解码、目标值取反、染色体选择、染色体交叉、染色体变异、最大值及索引寻找、条目记录、返回最佳自变量和最佳目标值的功能。
3.根据权利要求2所述的搭建遗传优化算法计算平台的方法,其特征在于,所述建立多个OpenCL内核函数,以依次实现染色体解码、目标值取反、染色体选择、染色体交叉、染色体变异、最大值及索引寻找、条目记录、返回最佳自变量和最佳目标值的功能包括:
用Xi(Xi=(x0,x1,…,xn_dim))表示遗传算法种群中每一个个体,Yi表示每个Xi所计算得到的目标值,n_dim为自变量维度;
建立函数cl_chrom2x(…),以实现将遗传算法中编码好的染色体解码为自变量x0~xndims;
建立函数cl_ranking(…),以实现将所有Xi计算得到的目标值Yi取反;
建立函数cl_selection(…),以实现遗传算法中染色体的选择功能;
建立函数cl_crossover(…),以实现遗传算法中的染色体交叉功能;
建立函数cl_mutation(…),以实现遗传算法中的染色体变异功能;
建立函数cl_FitV_argmax(…),以实现寻找当前所有Xi所对应Yi中,最大值Ymax及索引i;
建立函数cl_record(…),以实现记录三个条目:每轮迭代过程中Ymax及其所对应的Xi,每轮迭代的所有Y及其对应的X,基于每轮迭代所记录的值Ymax记录并更新全局最大值Ymax,global及其对应的X;
建立函数cl_get_best(…),以实现从OpenCL设备返回最佳自变量和最佳目标值。
4.根据权利要求1所述的搭建遗传优化算法计算平台的方法,其特征在于,所述为GA类添加遗传优化算法的多个类函数包括添加init函数、use_OpenCL函数、init_fun函数、cl_run函数。
5.根据权利要求4所述的搭建遗传优化算法计算平台的方法,其特征在于,所述基于内核函数,依次为各个类函数添加遗传优化算法的具体功能包括:
为init函数添加具体功能,使init函数根据目标优化函数及函数变量,编码并初始化遗传算法所需的染色体数组;
为use_OpenCL函数添加具体功能,使use_OpenCL函数根据init函数计算得到的数据,自动编写OpenCL运算所需的常量定义字符串,并根据OpenCL的标准接口,获取OpenCL计算设备的上下文和命令队列;
为init_fun函数添加具体功能,使init_fun函数根据use_OpenCL函数生成的常量定义字符串、目标函数OpenCL的内核函数程序字符串、及内核函数字符串,拼接完整可编译执行的OpenCL目标程序字符串;
为cl_run函数添加具体功能,使cl_run函数依次执行内核函数以完成目标优化功能。
6.根据权利要求5所述的搭建遗传优化算法计算平台的方法,其特征在于,所述为init函数添加具体功能包括:
Init函数的参数包括:优化目标函数自变量数目n_dims、种群规模size_pop、最大迭代次数max_iter、染色体变异概率prob_mut、目标函数自变量取值下边界lb、目标函数自变量取值下边界ub;
用xi,i∈{0,1,…,ndim}表示目标函数的第i个自变量,用[]表示向下取整,计算每个xi的编码长度;
计算编码每个染色体所需要的总长度len_chorm;
根据计算得到的len_chrom,及size_pop,初始化种群的染色体Chrom,即初始化一个大小为len_chrom*size_pop的数组Chrom;
随机初始化数组Chrom中每一个值,每个数的取值范围为{0,1}。
7.根据权利要求5所述的搭建遗传优化算法计算平台的方法,其特征在于,所述为use_OpenCL函数添加具体功能包括:
分别计算x0、x0~x1、x0~x2、…x0~xn编码所需要的染色体长度数组Lind_length;
自动生成OpenCL代码字符串str,str中定义了OpenCL kernel执行所需要的常量;
根据OpenCL接口,获取OpenCL计算设备的上下文cl_context、命令队列cl_queue。
8.根据权利要求5所述的搭建遗传优化算法计算平台的方法,其特征在于,所述为init_fun函数添加具体功能包括:
init_fun()函数接入2个参数:param1,param2,第一个参数param1是一个字典,第二个参数param2是一个字典的列表;
对传入的param1解析,解析字典中buffer_id,buffer_size,buffer_type属性,依次在OpenCL上申请相应的大小内存空间;
逐步对传入的param2中每个字典进行解析,解析字典中kernel_path,从该路径将kernel函数读取,并拼接至字符串str中;
对str进行编译,向OpenCL设备上申请内存空间buffer,并对OpenCL函数运行过程中所对应的内存空间buffer进行说明。
9.根据权利要求5所述的搭建遗传优化算法计算平台的方法,其特征在于,所述为cl_run函数添加具体功能包括:
令i表示当前迭代次数,初始i=0;
判断i<Max_iter是否成立;
如果成立,则依次执行如下OpenCL函数:cl_chrom2x(…)、cl_x2y(…)、cl_ranking(…)、cl_selection(…)、cl_crossover(…)、cl_mutation(…)、cl_FitV_argmax(…)、cl_record(…),然后令i=i+1并重新判断i<Max_iter是否成立;
如果不成立,则执行OpenCL内核函数cl_get_best(),得到寻优过程中最佳函数目标值global_best_Y,及所对应的自变量np_global_best_X。
10.一种平台使用方法,应用于如权利要求1至9中任一项所述的搭建遗传优化算法计算平台的方法所搭建的平台,其特征在于,包括:
提前编写目标优化函数的OpenCL kernel函数;
按照预定格式编写好对应的param1、param2;
构建一个GA类的实例GA_example;
调用GA_example的init()函数,传入对应的参数,进行初始化;
调用GA_example的use_OpenCL()函数,进行OpenCL初始化;
调用GA_example的init_fun()函数,传入编写好的param1、param2,初始化OpenCL目标优化函数并编译;
调用GA_example的cl_run()函数,进行最终的目标优化。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311076372.8A CN117216461A (zh) | 2023-08-24 | 2023-08-24 | 一种搭建遗传优化算法计算平台的方法及平台使用方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311076372.8A CN117216461A (zh) | 2023-08-24 | 2023-08-24 | 一种搭建遗传优化算法计算平台的方法及平台使用方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117216461A true CN117216461A (zh) | 2023-12-12 |
Family
ID=89039824
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311076372.8A Pending CN117216461A (zh) | 2023-08-24 | 2023-08-24 | 一种搭建遗传优化算法计算平台的方法及平台使用方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117216461A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117556893A (zh) * | 2024-01-12 | 2024-02-13 | 芯动微电子科技(武汉)有限公司 | 基于并行遗传算法的gpu运算gemm调优方法与装置 |
-
2023
- 2023-08-24 CN CN202311076372.8A patent/CN117216461A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117556893A (zh) * | 2024-01-12 | 2024-02-13 | 芯动微电子科技(武汉)有限公司 | 基于并行遗传算法的gpu运算gemm调优方法与装置 |
CN117556893B (zh) * | 2024-01-12 | 2024-05-03 | 芯动微电子科技(武汉)有限公司 | 基于并行遗传算法的gpu运算gemm调优方法与装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2022198868A1 (zh) | 开放式实体关系的抽取方法、装置、设备及存储介质 | |
CN110673840B (zh) | 一种基于标签图嵌入技术的自动代码生成方法及系统 | |
US20190266246A1 (en) | Sequence modeling via segmentations | |
CN112214608B (zh) | 基于知识推理的文本生成方法、介质、装置和计算设备 | |
KR102405578B1 (ko) | 지식 그래프를 이용한 상황 인지형 다중 문장 관계 추출 방법 및 장치 | |
JP7457125B2 (ja) | 翻訳方法、装置、電子機器及びコンピュータプログラム | |
US20240233877A1 (en) | Method for predicting reactant molecule, training method, apparatus, and electronic device | |
CN117216461A (zh) | 一种搭建遗传优化算法计算平台的方法及平台使用方法 | |
CN113705196A (zh) | 基于图神经网络的中文开放信息抽取方法和装置 | |
US10691901B2 (en) | Sequence generation using neural networks with continuous outputs | |
WO2023010916A1 (zh) | 软件自动修复方法、系统、电子设备及存储介质 | |
CN113761868A (zh) | 文本处理方法、装置、电子设备及可读存储介质 | |
Wang et al. | GP-based approach to comprehensive quality-aware automated semantic web service composition | |
CN116303881A (zh) | 一种基于自监督表示学习的企业单位地址匹配方法及装置 | |
CN113807079A (zh) | 一种基于序列到序列的端到端实体和关系联合抽取方法 | |
CN117573096B (zh) | 一种融合抽象语法树结构信息的智能代码补全方法 | |
CN111328416B (zh) | 用于自然语言处理中的模糊匹配的语音模式 | |
CN117573084B (zh) | 一种基于逐层融合抽象语法树的代码补全方法 | |
CN111160036A (zh) | 一种对基于神经网络的机器翻译模型的更新方法及装置 | |
WO2023078009A1 (zh) | 一种模型权重获取方法以及相关系统 | |
CN115599918B (zh) | 一种基于图增强的互学习文本分类方法及系统 | |
CN111324344A (zh) | 代码语句的生成方法、装置、设备及可读存储介质 | |
CN115221061B (zh) | 测试代码生成方法、装置、存储介质及电子设备 | |
CN116361511A (zh) | 一种复合语义的视频检索方法、装置、设备及存储介质 | |
CN117235205A (zh) | 命名实体识别方法、装置及计算机可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |