基因表达式编程算法的制作方法

文档序号:6405059阅读:289来源:国知局
专利名称:基因表达式编程算法的制作方法
技术领域
本发明涉及基因算法。
背景技术
在应用科学与工程中,广泛使用这样的算法,其将实验数据拟合到一个或多个变量的线性方程或其它预先确定的函数。在将数据拟合到预先确定的函数时,确定该预先确定的函数的参数(例如,系数),其先验为未知的。在将数据拟合到函数时,确定这些参数,其可能代表理论常数(例如,电子质量),或者仅仅是刻画现象的经验值。在这样的情形中,由人基于技术知识或已有证据选择拟合数据的适当函数。例如,相关领域的专家可能知道特定类型的数据由特定数学函数描述。对哪种数学函数描述哪种类型的函数的发现来自于科学与工程的艰苦过程。
类似地,在统计学领域,可将统计数据拟合到适当的分布函数,例如高斯分布,或二项式分布,以确定测量数据的平均值与方差。对于拟合任何给定数据集的适当分布函数的选择基于这样的考虑,即与每种类型的分布相关联的随机偏差类型是否对应于刻画收集到的数据的随机偏差。换言之,选择基本上是统计学技术人员的工作。
特定统计包试图协助统计学家,其自动地尝试将数据集拟合到预先确定的分布函数集,并选择最好地拟合数据的分布函数。
在上述情形中,拟合数据的函数是预先确定的,并且,通过猜想或从头开始推导来发现全新的可以应用到新类型的数据的函数,仍然是科学家或工程师的任务。换言之,发现数学函数的工作留给了人类智力。
人工智能的领域包括基因算法的子领域。在基因算法领域中,试图模仿基因在进化生物学中的角色,以计算工程或其它问题的解。在基因算法中,一群假定的解以模仿达尔文进化论的方式“进化”。
基因算法的领域包括称为基因编程的研究领域。在基因编程中,涉及的群体包括自身为程序的个体。在基因编程中,基于其在执行时解决特定问题的能力判断每个个体程序的适合度。
基因编程被用于进行“符号回归”。在符号回归中,试图通过使用基因编程来取代人类智力,以发现最佳地描述数据集的数学表达式。在基于基因编程的符号回归中进化的个体程序代表数学方程,其基于一个或多个自变量的输入值给出因变量的值。
主要的现有技术的基因编程算法以LISP编程语言实现,由实现者判断其特别适宜于此任务。在这样的算法中,使用LISP编程语言中的S表达式构造来代表数学表达式。在进行进化的过程中,直接操作这些S表达式,其扮演进化的群体成员的角色。这些现有技术的方法的一个局限是没有限制群体中的数学表达式的大小,导致所谓“表达式膨胀”,其中群体内的数学表达式不适当地变大。这些现有技术的方法的另一个局限是这些膨胀的表达式倾向于过拟合到基因编程算法用以检查数学表达式正确性的数据。过拟合意味着表达式非常接近地符合数据,包括数据中的测量误差,而不符合来自同一来源的额外数据,其之后被用于检查表达式的正确性。还一个局限是诸如Java、或C++等现代程序语言不支持S表达式构造,而这些语言被首选地用在科学与工程编程中。
符号回归使用的另一种类型的基因算法是基因表达式编程(GEP)。在基因表达式编程中,表达式以符号串表示,其中每个符号表示数学表达式的一个记号(例如,操作数、操作符)。使用基因表达式编程时,要出现在基因编程算法正在寻找的表达式中的常数的值可能不能事先得知。因此,GEP算法可能不得不创建这样的程序,其在给定的常数(例如,零和一)的有限集合上进行不定数目的操作。后一必要性增大了基因表达式编程算法收敛的时间,并且也不必要地增大了找到的解程序的大小。而且,既然基因表达式编程算法产生的表达式被限制为有限大小,为获取所需常数所必需的操作可能消耗最大表达式大小的主要部分,并限制其它所需的操作符与变量可获得的部分。
在基因表达式编程中,执行多种模仿群体进化中涉及的自然过程的行动。这包括一点与两点交换与突变(crossover and mutation)。这些过程涉及交换点的随机选择与在(染色体)表达的表示中替换已有记号(操作数或操作符)的新记号的随机选择。由于其随机本性,在基因表达式编程的情形中,这些对于进化适应而言重要的操作可能,不幸地,导致句法上不正确的表达式(程序)。对于候选的解决方案而言,这句法上的不正确是不合适的,并可能产生基因表达式编程算法中的程序执行错误。


图1是算法流程图的第一部分,该算法遵照本发明的优选实施例进化数学表达式表示群体。
图2是开始于图1的流程图的第二部分。
图3显示用于存储数学表达式表示群体的矩阵,该群体由图1-2中显示的方法进化。
图4是算法流程图,该算法遵照本发明的优选实施例验证数学表达式表示的语法。
图5是操作符与操作数数组,其包括数学表达式表示。
图6是索引数组,其表示图5中显示的数组。
图7是图1中显示的方法要确定的假定数学表达式。
图8是图7中显示的数学表达式的近似,其包括基于素数的常数。
图9是表示图8中显示的方程的树形图。
图10是电脑框图,该电脑用于遵照本发明的优选实施例执行图1、2与4中显示的算法。
具体实施例方式
图1是算法100的流程图的第一部分,该算法遵照本发明的优选实施例进化数学表达式表示群体,图2是开始于图1的流程图的第二部分。图1、2中显示的算法100是基因表达式编程(GEP)类型的基因算法(GA)。基因算法100用于确定良好地符合数据的数学表达式。该数据可包括一或多组相关联的自变量与因变量的值。根据要搜寻的数学表达式的特性,可能有一个或多个自变量。
参照图1,在步骤102,读入要用的操作符与操作数的列表。该列表可保存于配置文件中。对于许多技术领域而言,在步骤102读入的操作符中包括加法、减法、乘法、与除法是适宜的。在许多技术领域中,包括三角函数操作符,例如正弦、余弦、正切,以及反三角函数操作符,例如反正弦、反余弦、反正切,也是适宜的。注意操作符可根据其操作的操作数的数目分类。也可包括其它类型的函数。MAX函数接受两个操作数或数学子表达式作为参数,评估两个参数,并返回较大的参数的值。也可包括互补的MIN函数。
还可包括另一种类型的操作数,其类似于编程中的流控结构,也就是IF{子表达式一<=子表达式二}THEN{子表达式三}ELSE{子表达式四}(简称为IF操作符)。后者对于发现分段定义的函数是有用的。注意IF操作符接受四个参数,用于不等式条件的第一与第二子表达式,满足该条件时执行的第三子表达式,以及不满足该条件时计算的第四子表达式。
包含基于经常在特定领域中出现的特定函数的操作符可能是适宜的。例如,如果要将算法100施加于神经网络领域,包括基于S形函数的操作符可能是适宜的。
表I包括可在步骤102中读入的操作符的示例性的列表。在表I中,第一列指示操作符名称,第二列指示操作符类型,其等价于操作符作为自变量接受的操作数的数目,第三列为值保留(其不适用于操作符,因此在表I中没有值),第四列给出与每个操作符相关联的成本,该成本为每个操作符增加数学表达式复杂度的测度,第五列为引用操作符的索引。
表I

在步骤102中读入的操作数包括常数与自变量。下面的表II包括在步骤102中读入的操作数的示例性的列表。表II中列的标识与表I中相同。表II中的索引号继续了始于表I的索引号序列。
表II的第一行(索引号为行17)包括Pi,包括它是因为经验显示它经常出现在与科学和工程问题相关的数学表达式中而包括进来的。也可在表II中包括在许多领域中重要的其它适宜的常数(例如,自然对数基,e)或适用于特定研究领域的常数(例如普朗克常数),如果认为它们有机会出现在要搜寻的数学表达式中的话。表II的其后的行(索引18)包括零操作数。包括零允许算法100通过,比如说,将子表达式乘以零,来有效率地关闭算法100正在进化的数学表达式的某些部分,而不扰乱该数学表达式。基因表达式编程对于操作符与操作数在数学表达式表示中的顺序敏感。根据另一种实施例,在步骤102中读入的操作符中间包括uno()函数。uno()函数返回其自变量而不作改变。包括uno()函数允许GEP算法使由群体成员表示的数学表达式的某些部分停止活动,而不扰乱该群体成员。停止活动的部分在后继操作中可通过交换或突变来激活。
表II的下一行(索引19)包括数一(1)。一在实数系统中具有特殊地位,这是因为任何整数或有理数可通过将一相加或除以一的和数来分别形成。因此,向算法100提供一,原则上允许算法100在需要时在要生成的数学表达式中生成任何数目的前述类型。
表I与II包括原始材料,算法100使用该原始材料来确定数学表达式。表I与II的内容(实践中可使用数组或其它数据结构来表示该内容)将被用于生成数学表达式表示的初始群体,并将从进行突变操作中提取(draw from)。
表II的下一组行(索引20-42)包括一系列素数。通过将两个或更多个素数相乘、相加、相除与相减,子表达式可生成多个数,这比仅使用数一生成同样的数要相对简单。因此,在表中包括素数序列倾向于减少算法100为找寻描述实际数据集的数学表达式所需的世代(generation)数目,也倾向于减少找到的数学表达式的复杂度。
要包含在由算法100生成的数学表达式中的自变量可在文件中标识,该文件包括用于评估由GEP算法100生成的程序的拟合性的训练数据。一种用于训练数据和包含与该数据相关联的自变量的标识的标准文件格式被称作是学术数据挖掘研究文件格式或ARFF。表II中的最后两项——X和Y是示例性的自变量。表II中的自变量的数目对应于实际数据中的自变量的数目,算法100为该数据搜寻数学表达式。对于特定问题,可能只有一个自变量,或者超过两个自变量。
表II

再次参照图1,在下一步骤104中,为生成N个数学表达式表示(群体成员)的群体,对于该N个表示中的每一个,随机地从步骤102(例如显示于图1、2中的)中读入的操作数与操作符列表中选择K个元素的集合图3显示用于存储数学表达式表示群体的矩阵300,该群体在步骤104(图2)中生成并由图1-2中显示的算法进化。优选地,将步骤104中生成的每个群体成员保存为行或列(图3中显示为行)。矩阵的元素写作PA(l,m),其中行索引l指定群体成员,而列索引m指定每个群体成员内的第m元素。(PA代表群体数组。)因此,矩阵300的每一行是包括数学表达式表示的数组。在此初始阶段,每个表达式的语法有待检验。矩阵300的矩阵元素包括(根据表I与II的第五列)对应于特定操作符或操作数的索引号。可将矩阵300看作数组集,每个数组表示一群体成员。由于编程语言通常被设计为高速地执行矩阵处理操作(例如行拷贝、元素交换),要在数学表达式表示群体上进行的操作(例如选择、交换、突变)得到推动和加速(也就是具有减小的计算成本),这是因为数学表达式表示群体由数组集,例如,由矩阵300来表示。
图5显示操作符与操作数的数组500,其包括数学表达式表示。图5阐释了在矩阵300(图3)的每一行中引用的操作符与操作数序列。图6是索引数组600,其表示图5中显示的数组。如图6所示,操作数与操作符以索引集表示,该索引集(通过表I与II)对应于图5中显示的操作符与操作数序列。也就是说,说明性的数组500中出现的每个操作符或操作数实际上由数组600与矩阵300内的索引号代表。数组600内存储的索引是操作符或操作数的密码子(codon)。矩阵300(图3)包括图6中作为行显示的类型数组的编号N。注意每个群体成员由矩阵300(图3)的行表示,且数组500(图5)与600(图6)在基因算法100执行期间可包括超过为组成句法上正确的数学表达式所需要的数量的元素。尽管如此,位于数组500、600的末尾的多余的元素被携带到后继操作中,并可通过交换操作或突变而变为数学表达式的一部分。
再次参照图1,下一框106是循环的顶部,该循环连续地检查每个新的群体成员(矩阵300的行)的语法,以确定其是否代表有效的数学表达式。在步骤108,检查数学表达式表示的语法。在步骤108中遵照本发明的优选实施例执行的过程的细节在下面参照图4进行详细描述。框112是决定框,其结果取决于在步骤108检查的语法是否正确。如果语法不正确,则算法100分支到步骤110,在这里重新生成群体成员(数学表达式表示)。可通过随机地重新选择操作数与操作符来重新生成群体成员。作为可供选择的另一种替代方案,可(例如随机地)修改群体成员,以改正语法。在步骤110后,算法100返回到步骤108。如果在框112确定在步骤108中检查的数学表达式的语法是正确的,则算法继续到框114。在框114中,确定是否还有群体成员需要检查。如果是这样,则算法100返回到步骤106,并且其后处理下一个群体成员。如果已检查所有群体成员,则算法100继续到步骤116。
在步骤116,为群体中(例如,数组300中,图3)表示的数学表达式计算第一拟合性测度。第一拟合性测度涉及群体中表示的数学表达式的复杂性。按照第一拟合性测度,较大的复杂性等于减少的拟合性。第一拟合性测度涉及对被表示的数学表达式与操作符和操作数相关联的成本求和。与操作符和操作数相关联的成本由表I与II的第四列给出。遵照本发明的优选实施例,第一拟合性测度通过下面的方程计算方程1FMi=AvgCostAvgCost+Costi]]>其中,FMi是第i个群体成员(数学表达式)的第一(关于拟合性的)拟合性测度,Costi是与第i个表达式的操作符相关联的成本的和,AvgCost是群体中的成本Costi的和的平均值。
与每个操作符相关联的成本在表1的第四列给出。注意第一拟合性测度FMi始终在零到一之间。方程1也可用于为群体的后继世代计算第一拟合性测度。
再次参照图1,在步骤118,将每个群体成员(例如矩阵300的行)转化为可执行程序,该程序实现该群体成员内表示的数学表达式。
图7显示图1中显示的方法要决定的假定数学表达式700,图8显示图7中显示的数学表达式700的近似800。图7中显示的表达式700中出现的常数在图8中显示的表达式800中使用素数与一来近似。图8中显示的表达式800对应于图5、6中显示的数组中包括的数学表达式表示。图9是表示图8中显示的方程的树形图900。图9也有助于理解图8中显示的表达式800同图5、6中显示的数学表达式表示之间的对应关系。通过从数组500的左边开始,并在构建树形图900时遵循广度优先规则,从图5中显示的数组构造树形图900。树形图900反映关于操作顺序的普通规则。
遵照本发明的优选实施例,算法100使用现代的面向对象的编程语言写成。优选地,每个密码子(操作数或操作符)的基本信息封装在类的实例中。下面显示了称为codon(密码子)的Java类的原型,该类适宜于封装每个操作数或操作符的基本信息。优选地,codon类包含用于表I与II的五列中列出的每个条目(也就是名称、类型、值、成本与索引)的实例变量。为表I与II的每一行生成codon类的实例。
<pre listing-type="program-listing"><![CDATA[public class Codon{public String Name;//密码子名称public intType;//操作元素的数目//=3 IF(if...then...else...//=2操作符{+,-,*,/,...}//=1函数 {sqrt,sigmoid,...}//=0常数 {1,2,3,5,...}//=-1变量public intIndex;//用于快速处理的位置索引public double Cost;//要应用的密码子的成本public double Value;//常数与变量类型的密码子的值}]]></pre>使用codon类的实例作为基本构建元件来生成可执行程序,该程序编码由群体成员表示的数学表达式。codon类的实例可用在节点类的实例中,该节点类的实例还包含额外信息(实例变量),包括父节点引用与子节点引用。节点类的实例可用在表达式树类中,该表达式树类为整个数学表达式保存结构信息。表达式树类的实例中的信息包括表达式树结构,例如如图9中图形化地表示的那样。
再次参照图1,在步骤120中,使用一个或多个测试数据集执行步骤118中生成的可执行程序。测试数据可以,比如说,包括若干个相关联的自变量与因变量集,其通过(例如在试验或调查的情况下)观察收集到。在步骤118中执行程序时,将自变量值作为程序参数使用,并将在步骤118执行的程序的输出与相关联的因变量值的值进行对比。例如,在搜寻近似匹配两个变量的函数的数学表达式时,将使用多个(Xj,Yj,Zj)形式的数据集,其中Xj与Yj是自变量,而Zj是因变量。每个集内的自变量Xj、Yj作为程序参数,并将每个程序执行的输出与相关联的Zj进行比较。在面向对象的编程语言实现中,该实现包含表达式树类,该树类具有对节点类的引用,该节点类引用codon类,程序执行相当于对前述表达式树类的实例求值。
在步骤122,使用在步骤122中获得的输出计算第二拟合性测度,该测度基于每个群体成员表示的数学表达式拟合一个或多个测试数据集的程度。优选地,第二拟合性测度基于由下面的方程2给出的拟合性的原始均方根(RMS)测度方程2RMSi=1M&Sigma;j=1M(zj-PROGi(Xj1,Xj2,Xj3,...XjL))2]]>其中,Zj是第j个测试数据集中的因变量值;Xj1,Xj2,Xj3,...XjL是第j个测试数据集中的自变量值集合;L是因变量的数目;PROGi表示第i个程序,其实现由第i个群体成员表示的数学表达式;M是测试数据集的数目;和RMSi是第i个程序的拟合性的原始均方根测度的值。
优选地,使用下面的方程3来调节由方程2给出的原始RMS拟合度的尺度,以导出第二拟合性测度方程3SMi=AvgRMSAvgRMS+RMSi]]>其中,AvgRMS是一个世代上的RMSi的平均值。
在使用方程三为后继世代中的群体成员求值第二拟合性测度时,优选地,使用前面世代中AvgRMS的最低值,如果它比当前时代的AvgRMS值低的话。在使用方程一为群体成员求值第一拟合性测度时,使用到目前为止具有最低的AvgRMS值的世代的AvgRMS。第二拟合性测度SMi的值介于零到一之间。
在步骤124,计算考虑了第一拟合性测度与第二拟合性测度的总的拟合性测度。优选地,使用下面的方程4计算总的拟合性测度。
方程4Fi=(1-p)·SMi+p·FMi其中,Fi是第i个程序的总的拟合性测度,该程序实现由第i个群体成员表示的函数的数学表达式;和p是吝啬权重因子(parsimony weighting factor),其确定在总的拟合性测度中要给予第一(关于成本的)拟合性测度的权重。
遵照使用算法100的优选模式,吝啬权重因子p被初始地设置为零,并在获取拟合性的原始均方根测度的低值之后设置为有限值。吝啬权重因子优选地为正数,其小于0.2,并且更优选地,小于0.1,使得不会以第二(关于拟合性的)拟合性测度为代价而给予第一(关于成本的)拟合性测度不适当的权重。当设置为有限值时,吝啬权重因子优选地至少是0.05。通过在总的拟合性测度中包括第一(关于成本的)拟合性测度,减小了算法100找到的数学表达式的大小。包括第一关于成本的拟合性测度也倾向于消除过拟合测试数据集的数学表达式。
参照图2,显示了算法100的第二部分。框126是决定框,其结果取决于是否满足拟合度标准。优选地,测试的拟合度标准是这样的标准,即总的拟合性测度(包括第一与第二拟合性测度)超过总拟合度门限。如果满足拟合度标准,则算法100继续步骤130,在这里输出最佳群体成员。如果没有满足拟合度标准,则算法100继续框128。如果满足总的拟合性测度,但吝啬权重因子被设置为零,则在步骤126将不会判定已满足拟合度标准。
在框128,确定是否已超过世代限制。上面给出的讨论解决了施行于初始群体(也就是在步骤104中生成的群体)的步骤,然而,如下面余下的讨论将澄清的那样,算法100递归地操作,使得对于后继世代中的每一世代将到达框128。优选地,施加世代限制,以限制基因算法100可能递归地生成的世代的数目。世代限制用于控制计算机资源的消耗以及算法100的运行时间。如果达到世代限制,则算法100进行到步骤130,在这里输出最佳群体成员。作为可供选择的另一种替代方案,在停止的情形中可随机地打乱群体,并继续执行。如果没有超过世代限制,算法100继续框132。
框132是另一个决定框,其结果取决于是否已获得对测试数据的好的拟合。可通过比较当前世代的拟合性的最低原始均方根测度和RMS门限来判定是否已获得好的拟合。如果在框132判定已获得好的拟合,则算法100继续步骤134,在这里增加吝啬权重因子。在步骤134,优选地,在一个步骤中将吝啬权重因子从零变为有限值。在步骤134之后,算法继续步骤136。如果在步骤132中判定尚未获得好的拟合,则算法直接进行到步骤136。
在步骤136,从当前群体选择群体成员,以在后继世代中复制。优选地,至少一部分被选择以进行复制的群体成员是被基于其拟合度选择的。遵照本发明的优选实施例,使用随机残留法来选择群体成员以进行复制。在随机残留法中,选择每个群体成员的至少特定数目Ii份拷贝,以在后继世代中进行复制。数目Ii由下面的方程给出方程5Ii=Trunc(N*Fi&Sigma;i=1NFi)]]>其中,N是每个世代中的群体成员的数目;和Trunc是截断函数。
方程5中的截断函数内的量的分数部分被用于确定每个群体成员是否有(超出由方程五确定的拷贝数目的)任何额外的拷贝将在后继世代中进行复制。如下使用前述分数部分。生成介于零到一之间的随机数。如果前述分数部分超过该随机数,则向后继世代添加第i个群体成员的额外的拷贝。调解使用随机数与数目Ii的分数部分生成的选择数目,使得后继群体维持成员总数N。
使用上面描述的随机残留法导致主要基于拟合度,同时具有一定程度的随机性,来选择群体成员以进行复制。后一种选择方法模拟生物系统中的自然选择。
在步骤138,进行交换操作。可进行一或两点或两种类型的交换操作。在进行交换操作时,随机地配对群体成员(矩阵300的行)。可使用单个交换概率或分立的交换概率,以决定是否进行一与两点交换操作。对于每种类型的交换操作,并且对于每对群体成员,生成介于零到一之间的随机数。如果该随机数小于交换概率,则进行交换操作,如果该随机数大于交换操作,则群体成员对保持不变。可使用替代方案来确定是否进行交换操作。如果确定要在一对群体成员之间进行一点交换操作,则随机地选择交换点。其后,两个群体成员(矩阵300的行)中在该交换点之后的全部元素(密码子)在两行之间进行交换。如果确定要在两个群体成员之间进行两点交换操作,则随机地选择两点,交换群体成员(矩阵300的行)中在这两点之间的元素。通过将每个群体表示为索引数组集(更优选地,索引矩阵),有可能使用快速数组处理操作(例如,选择拷贝)来进行交换操作。
在步骤140,进行突变操作。如在自然生物系统中那样,突变发生的速率相对地低(相对于交换)。在算法100中,突变的速率由突变概率参数控制。为决定每个群体成员是否要突变,生成随机数并比较其与突变概率。如果为给定群体成员生成的随机数小于突变概率,则指定该给定的群体成员突变。在进行突变时,随机地选择群体成员的元素,并将其替换为操作数或操作符,该操作数或操作符从在步骤102中读入的操作符或操作数中随机地选择。
在步骤142,进行旋转操作。为决定每个群体成员(数组)是否要被旋转,生成随机数并将其与旋转概率进行比较。如果为给定群体成员生成的随机数小于旋转概率,则指定旋转该群体成员。为进行旋转,随机地选择指定的群体成员数组的位置,并将数组循环地向左移动,以将指定位置的密码子带到数组最前面。
步骤142之后,算法返回到步骤框106,在这里开始检查新群体成员语法的过程,该新成员由交换与突变创建。其后,算法重复上面描述的后继步骤,继续进化后继世代,直到找到高拟合性群体成员,或者达到世代限制。
初始群体世代中固有的随机性104、交换138与突变140操作可导致表示具有无效语法的数学表达式的群体成员。这样的无效群体成员当然不适合作为候选解决方案,并有可能引起执行错误。因此,如上面提到的那样,与步骤108、112(图1)有关,检查每个新群体成员的语法。图4是语法检查算法的流程图400,该算法遵照本发明的优选实施例验证数学表达式表示的语法。图4是图1中显示的步骤108的优选形式。参照图4,在第一个框402,将所需长度变量初始化为值一。下一框404是循环的顶部,其考虑群体成员数组的后继元素。遵照本发明的优选实施例,数组采用图6中显示的形式,其中每个数组元素引用操作数或操作符。开始于第二个框404的循环的循环计数器被用作指针,其指向考虑中的群体成员(数组)的后继元素。数组元素被标注为1到N。在步骤406,将所需长度变量增加要求的额外元素的数目,该数目基于循环计数器的当前值指向的元素的类型。表I与II的第二列将每个操作数与操作符的类型指定为整数型。类型数指示每个操作数或操作符所要求的额外元素的数目。例如,加法与乘法操作符属于类型二,要求两个操作数。正弦操作符属于类型一,仅要求一个操作数。常数与变量属于类型零。作为示例,如果,比方说,循环计数器指向数组600(图6)的第一元素,该元素包含索引14,在表I的第一列中查找14,发现其指代SQRT操作符,从表I的第二列中发现该操作符属于类型一。因此,将所需长度从一(初始值)增加到二。在循环的下次迭代中,语法检查算法读取索引2,其代表加操作符,并且将所需长度变量相应地增加二,取值为四。在GEP算法100的面向对象的实现中,优选地将类型信息作为上面显示的codon类的实例变量存储。
在步骤408,将在框406中设置的所需长度与最大基因长度(最大数组长度,在图3、6中显示为K)进行比较。如果在步骤408,发现所需长度超过最大基因长度,则在步骤410,输出无效基因消息(例如报告给算法100)。
在框412,确定循环计数器的当前值(其指向数组600的元素,图6)是否等于所需长度变量。循环计数器等于所需长度变量意味着有充足的操作数来完成在要检查的群体成员数组中包含的操作符指定的操作,并且数组中编码了有效语法的数学表达式。所需长度变量等于循环计数器指示已到达要检查的数组中包含的基因的末尾。基因是每个数组中这样的一部分,其表示有效语法的数学表达式。时常地,要求少于完整长度的群体成员数组来表示有效语法的数学表达式。然而,任何未使用的数组元素可通过交换或突变而在后继世代中变为活动的。如果循环计数器的当前值等于所需长度变量,则输出有效基因消息(例如报告给算法100)。如果不相等,则算法400返回步骤404,在这里增加循环计数器索引,其后考虑基因(数组)的下一元素。
使用语法检查算法400允许对数学表达式的数组表示进行随机的交换、突变与旋转操作,同时避免将计算机时间浪费在产生和试图执行具有无效语法的程序上。
有利地,语法检查操作能够操作在群体成员的数组表示(例如,600,图6)上。因此,无需从群体成员生成程序以验证语法,从而节省了计算机资源,削减了语法检查400与主算法100的执行时间。
尽管本发明被参照图中包括的流程图进行描述,对于本领域普通技术人员来说将显而易见的是,可使用不同的程序流程,而不偏离本发明的实质。
图10是电脑1000的框图,该电脑遵照本发明的优选实施例执行图1、2与4中显示的算法。电脑1000包括微处理器1002、随机存取存储器(RAM)1004、只读存储器(ROM)1006、硬盘驱动器1008、显示器适配器1010(例如显卡)、可移动电脑可读介质读取器1014、网络适配器1016、键盘以及I/O端口1020,可通过数字信号总线1026通信地连接。视频显示器1012电气连接到显示器适配器1010,以接收视频信号。指示设备1022,优选地为鼠标,电气连接到I/O端口1020,以接收指示设备1022的用户操作生成的电子信号。根据本发明的一个实施例,使用网络适配器1016,以将电脑通信地连接到外部数据源,例如远程服务器。电脑可读介质读取器1014优选地包括光盘(CD)驱动器。提供电脑可读介质1024,其包括上面参照图1、2、4描述的算法使用的软件。电脑可读介质上包括的软件通过可移动电脑可读介质读取器1014装载,以配置电脑1000执行上面参照流程图描述的本发明的过程。电脑1000可以,比如说,包括个人电脑或工作站电脑。
对于本领域普通技术人员来说将显而易见的是,本发明可使用硬件或软件或其组合实现。使用本发明或其部分的程序可存储在多种类型的电脑可读介质中,包括光盘、硬盘驱动器、磁带、可编程只读存储器芯片。网络电路也可以暂时地作为电脑可读介质,从该网络电路读取本发明教导的程序。
尽管已阐释和描述本发明的优选实施例以及其它实施例,显然的是,本发明不限于此。本领域普通技术人员可作出多种修改、变动、变形、替换、及等价,而不偏离如所附的权利要求书所定义的本发明的实质与范围。
权利要求
1.一种基于基因算法的方法,用于确定描述实际数据集的数学表达式,所述方法包括以下步骤生成数学表达式表示的初始群体,其包括多个素数;和从所述初始群体进化后继世代。
2.如权利要求1所述的方法,其中,所述多个素数从预先定义的素数列表中选择。
3.如权利要求1所述的方法,其中,所述的进化后继世代的步骤包括以下步骤对于多个后继世代,通过引入一个或多个素数的表示,从所述数学表达式表示的当前群体突变一个或多个数学表达式表示。
4.如权利要求1所述的方法,其中,所述的进化后继世代的步骤包括以下步骤对于多个后继世代生成一组实现数学表达式的程序,所述数学表达式表示在当前世代的数学表达式表示的群体中;为一个或多个测试数据集执行所述程序集中的一个或多个,以获得与所述程序集中的所述一个或多个相对应的一个或多个结果;从所述一个或多个结果导出所述程序集中的所述一个或多个的一个或多个拟合性指示;基于所述拟合性指示,从所述当前世代的数学表达式表示的群体中选择一个或多个所述表示,以在后继世代中进行复制;在所述后继世代中的表示对之间进行一个或多个交换操作。
5.如权利要求4所述的方法,其进一步包括以下步骤对于所述多个后继世代中的一个或多个,通过引入一个或多个素数的表示,从所述数学表达式表示的当前群体突变一个或多个数学表达式表示。
6.如权利要求1所述的方法,其中,数学表达式表示的所述初始群体包括索引数组集,其中多个所述数组包括表示数学表达式的索引列表;和多个所述索引指示从包括操作符与操作数的组中选择的元素。
7.一种基于基因算法的方法,用于确定描述实际数据集的数学表达式,所述方法包括以下步骤递归地生成一系列数学表达式表示群体,其中每个表示包括从操作符集中选择的一个或多个操作符的标识;和从包括常数与变量的操作数集中选择的一个或多个操作数的标识;其中所述操作数集中的每一操作数,以及所述操作符集中的每一操作符与一成本相关联;对于所述群体系列中的每第k个群体,生成一组实现数学表达式的程序,所述数学表达式表示在所述的第k个表示群体中;通过包括以下步骤的过程,为所述程序集中的每一程序导出第一拟合性测度在一个或多个测试数据集上运行所述程序,并比较输出值与预先确定的值,以获取残留误差的测度;通过包括以下步骤的过程,为所述程序集中的每一程序导出第二拟合性测度对所述程序内的每一操作符与操作数的成本求和;和在每一后继世代中,基于所述第一与第二拟合性测度,选择性地复制数学表达式的个体表示。
8.如权利要求7所述的方法,其进一步包括以下步骤组合所述第一拟合性测度与所述第二拟合性测度,以获取总的拟合性测度。
9.一种基于基因算法的方法,用于确定描述实际数据集的数学表达式,所述方法包括以下步骤将一系列数学表达式群体中的每一个表示为索引数组集,其中每一数组表示数学表达式,且所述索引数组集中的一个或多个索引指向从包含操作符与操作数的元素组中选择的表达式元素的表示;对于所述系列群体中的每第k个群体生成实现所述数学表达式的程序,所述数学表达式由所述群体中的所述数组集中的一个或多个中的每一个表示;导出每一程序的拟合性测度;基于所述拟合性测度,从所述数组集选择一个或多个高拟合性数组,以继续到第(k+1)世代;在所述的继续到第(k+1)世代的高拟合性数组中的一个或多个之间进行交换操作。
10.如权利要求9所述的方法,其中,每一索引指向面向对象的编程语言的类的实例,所述类封装从包括操作符与操作数的组中选择的元素的标识。
11.如权利要求9所述的方法,其中,所述的进行交换操作的步骤包括以下子步骤将高拟合性数组的一部分与第二数组的一部分交换,其中随机地选择所述高拟合性数组的一部分与所述第二数组的一部分的开始点。
12.如权利要求9所述的方法,其中,所述数组集作为矩阵存储。
13.一种基于基因算法的方法,用于确定描述实际数据集的数学表达式,所述方法包括以下步骤递归地生成符号序列的群体的一系列世代,其中每一符号序列表示数学表达式;对于每一世代,确定每一符号序列是否可转译为有生存力的程序,其通过对于每一符号序列初始化所需长度变量;从每一序列的第一符号开始,并且对于每一序列内的一系列第k个符号将所需长度变量增加根据语法规则使用所述第k个符号组成有生存力的操作所必需的符号的数目;如果所需长度变量在增加后等于k,报告有效语法;和如果所需长度变量在增加到k时超过最大序列长度,报告无效语法。
14.如权利要求13所述的方法,其中,所述的递归地生成一系列世代的步骤包括以下子步骤在一个或多个符号序列中随机地改变符号。
15.如权利要求13所述的方法,其中,所述的递归地生成以系列世代的步骤包括以下子步骤随机地选择一个或多个点,其定义符号序列的边界,以在所述群体中的符号序列之间进行交换。
16.一种包含编程指令的计算机可读介质,其用于确定描述实际数据集的数学表达式,其包括以下编程指令生成数学表达式表示的初始群体,其包括多个素数;和从所述初始群体进化一系列后继世代。
17.如权利要求16所述的计算机可读介质,其中,所述的进化后继世代的编程指令包括以下编程指令从预先确定的素数列表中选择所述的多个素数。
18.如权利要求16所述的计算机可读介质,其中,所述的进化后继世代的编程指令包括以下编程指令对于多个后继世代,通过引入一个或多个素数的表示,从所述数学表达式表示的当前群体突变一个或多个数学表达式表示。
19.如权利要求16所述的计算机可读介质,其中,所述的进化后继世代的编程指令包括以下编程指令对于多个后继世代生成一组实现数学表达式的程序,所述数学表达式表示在当前世代的数学表达式表示的群体中;为一个或多个测试数据集执行所述程序集中的一个或多个,以获得与所述程序集中的所述一个或多个相对应的一个或多个结果;从所述一个或多个结果导出所述程序集中的所述一个或多个的一个或多个拟合性指示;基于所述拟合性指示,从所述当前世代的所述数学表达式表示的群体中选择一个或多个所述表示,以在后继世代中进行复制;在所述后继世代中的表示对之间进行一个或多个交换操作。
20.如权利要求19所述的计算机可读介质,其中,所述的进化后继世代的编程指令进一步包括以下编程指令对于所述多个后继世代中的一个或多个,通过引入一个或多个素数的表示,从所述数学表达式表示的所述当前群体突变一个或多个数学表达式表示。
21.如权利要求16所述的计算机可读介质,其中,数学表达式表示的所述初始群体包括索引数组集,其中多个所述数组包括一组表示数学表达式的索引;和多个所述索引指示从包括操作符与操作数的组中选择的元素。
22.一种包含编程指令的计算机可读介质,其用于确定描述实际数据集的数学表达式,其包括以下编程指令递归地生成一系列数学表达式表示的群体,其中每个表示包括从操作符集中选择的一个或多个操作符的标识;和从包括常数与变量的操作数集中选择的一个或多个操作数的标识;其中,所述操作数集中的每一操作数,以及所述操作符集中的每一操作符与一成本相关联;对于所述群体系列中的每第k个群体,生成一组实现数学表达式的程序,所述数学表达式表示在所述的第k个表示群体中;通过包括以下步骤的过程,为所述程序集中的每一程序导出第一拟合性测度在一个或多个测试数据集上运行所述程序,并比较输出值与预先确定的值,以获取残留误差的测度;通过包括以下步骤的过程,为所述程序集中的每一程序导出第二拟合性测度对所述程序内的每一操作符与操作数的成本求和;和在每一后继世代中,基于所述第一与第二拟合性测度,选择性地复制数学表达式个体表示。
23.如权利要求22所述的计算机可读介质,其进一步包括以下编程指令组合所述第一拟合性测度与所述第二拟合性测度,以获取总的拟合性测度。
24.一种包含编程指令的计算机可读介质,其用于确定描述实际数据集的数学表达式,其包括以下编程指令将一系列数学表达式群体中的每一个表示为索引数组集,其中每一数组表示数学表达式,且一个或多个索引指向从包含操作符与操作数的元素组中选择的表达式元素的表示;对于所述系列群体中的每第k个群体生成实现所述数学表达式的程序,所述数学表达式由所述群体中的每一数组表示;导出每一生成的程序的拟合性测度;基于所述拟合性测度,选择一个或多个高拟合性数组,以继续到第(k+1)世代;在所述的继续到第(k+1)世代的高拟合性数组中的一个或多个之间进行交换操作。
25.如权利要求24所述的计算机可读介质,其中,每一索引指向面向对象的编程语言的类的实例,所述类封装从包括操作符与操作数的组中选择的元素的标识。
26.如权利要求25所述的计算机可读介质,其中,所述的进行交换操作的编程指令包括以下编程指令将高拟合性数组的一部分与第二数组的一部分交换,其中,随机地选择所述高拟合性数组的一部分与所述第二数组的一部分的开始点。
27.如权利要求25所述的计算机可读介质,其中,所述数组集作为矩阵存储。
28.一种包含编程指令的计算机可读介质,其用于确定描述实际数据集的数学表达式,其包括以下编程指令递归地生成符号序列的群体的一系列世代,其中,每一符号序列表示数学表达式;对于每一世代,确定每一符号序列是否可转译为有生存力的程序,其通过对于每一符号序列初始化所需长度变量;从每一序列的第一符号开始,并且对于每一序列内的一系列第k个符号将所需长度变量增加根据语法规则使用所述第k个符号组成有生存力的操作所必需的符号的数目;如果所需长度变量在增加后等于k,报告有效语法;和如果所需长度变量在增加到k时超过最大序列长度,报告无效语法。
29.如权利要求28所述的计算机可读介质,其中,所述的递归地生成一系列世代的编程指令包括以下编程指令在一个或多个符号序列中随机地改变符号。
30.如权利要求28所述的计算机可读介质,其中,所述的递归地生成一系列世代的编程指令包括以下编程指令随机地选择一个或多个点,其定义符号序列的边界,以在所述群体中的符号序列之间进行交换。
31.一种在其上存储数据结构的计算机可读介质,所述数据结构包括面向对象的编程语言的类,其包括密码子名称实例变量;密码子类型实例变量,其用于存储第一数字,所述第一数字指示与所述密码子名称实例变量内指定的密码子相关联的密码子的数目;密码子值实例变量,其用于存储与所述密码子名称实例变量内指定的所述密码子相关联的值;密码子成本实例变量,其用于存储第二数字,所述第二数字指示所述密码子名称实例变量内指定的所述密码子指定的操作符或操作数增加数学表达式复杂性的程度;和密码子索引实例变量,其用于存储与所述的面向对象的编程语言的类的每个实例相关联的索引。
全文摘要
本发明公开一种基因表达式编程基因算法,其用于进行符号回归。算法通过实行反向地依赖于数学表达式复杂性的拟合函数,避免了表达式膨胀与过拟合。算法进化的群体成员表示为引用操作数与操作符的索引的数组集(例如以矩阵的形式),从而便利了在进化群体的过程中进行的选择、突变与交换操作。算法包括语法检查部分[108、110、112],其可以施加于群体成员而不必将群体成员首先转化为可执行程序。提供面向对象的编程语言的数据结构,用于为算法使用的每一密码子(例如操作数、操作符)封装基本数据。
文档编号G06F15/18GK1643509SQ03806264
公开日2005年7月20日 申请日期2003年3月12日 优先权日2002年3月18日
发明者肖为民, 托马斯·迈克尔·蒂尔帕克 申请人:摩托罗拉公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1