專利名稱:基因表達(dá)式編程算法的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及基因算法。
背景技術(shù):
在應(yīng)用科學(xué)與工程中,廣泛使用這樣的算法,其將實(shí)驗(yàn)數(shù)據(jù)擬合到一個(gè)或多個(gè)變量的線性方程或其它預(yù)先確定的函數(shù)。在將數(shù)據(jù)擬合到預(yù)先確定的函數(shù)時(shí),確定該預(yù)先確定的函數(shù)的參數(shù)(例如,系數(shù)),其先驗(yàn)為未知的。在將數(shù)據(jù)擬合到函數(shù)時(shí),確定這些參數(shù),其可能代表理論常數(shù)(例如,電子質(zhì)量),或者僅僅是刻畫現(xiàn)象的經(jīng)驗(yàn)值。在這樣的情形中,由人基于技術(shù)知識(shí)或已有證據(jù)選擇擬合數(shù)據(jù)的適當(dāng)函數(shù)。例如,相關(guān)領(lǐng)域的專家可能知道特定類型的數(shù)據(jù)由特定數(shù)學(xué)函數(shù)描述。對(duì)哪種數(shù)學(xué)函數(shù)描述哪種類型的函數(shù)的發(fā)現(xiàn)來(lái)自于科學(xué)與工程的艱苦過(guò)程。
類似地,在統(tǒng)計(jì)學(xué)領(lǐng)域,可將統(tǒng)計(jì)數(shù)據(jù)擬合到適當(dāng)?shù)姆植己瘮?shù),例如高斯分布,或二項(xiàng)式分布,以確定測(cè)量數(shù)據(jù)的平均值與方差。對(duì)于擬合任何給定數(shù)據(jù)集的適當(dāng)分布函數(shù)的選擇基于這樣的考慮,即與每種類型的分布相關(guān)聯(lián)的隨機(jī)偏差類型是否對(duì)應(yīng)于刻畫收集到的數(shù)據(jù)的隨機(jī)偏差。換言之,選擇基本上是統(tǒng)計(jì)學(xué)技術(shù)人員的工作。
特定統(tǒng)計(jì)包試圖協(xié)助統(tǒng)計(jì)學(xué)家,其自動(dòng)地嘗試將數(shù)據(jù)集擬合到預(yù)先確定的分布函數(shù)集,并選擇最好地?cái)M合數(shù)據(jù)的分布函數(shù)。
在上述情形中,擬合數(shù)據(jù)的函數(shù)是預(yù)先確定的,并且,通過(guò)猜想或從頭開始推導(dǎo)來(lái)發(fā)現(xiàn)全新的可以應(yīng)用到新類型的數(shù)據(jù)的函數(shù),仍然是科學(xué)家或工程師的任務(wù)。換言之,發(fā)現(xiàn)數(shù)學(xué)函數(shù)的工作留給了人類智力。
人工智能的領(lǐng)域包括基因算法的子領(lǐng)域。在基因算法領(lǐng)域中,試圖模仿基因在進(jìn)化生物學(xué)中的角色,以計(jì)算工程或其它問(wèn)題的解。在基因算法中,一群假定的解以模仿達(dá)爾文進(jìn)化論的方式“進(jìn)化”。
基因算法的領(lǐng)域包括稱為基因編程的研究領(lǐng)域。在基因編程中,涉及的群體包括自身為程序的個(gè)體。在基因編程中,基于其在執(zhí)行時(shí)解決特定問(wèn)題的能力判斷每個(gè)個(gè)體程序的適合度。
基因編程被用于進(jìn)行“符號(hào)回歸”。在符號(hào)回歸中,試圖通過(guò)使用基因編程來(lái)取代人類智力,以發(fā)現(xiàn)最佳地描述數(shù)據(jù)集的數(shù)學(xué)表達(dá)式。在基于基因編程的符號(hào)回歸中進(jìn)化的個(gè)體程序代表數(shù)學(xué)方程,其基于一個(gè)或多個(gè)自變量的輸入值給出因變量的值。
主要的現(xiàn)有技術(shù)的基因編程算法以LISP編程語(yǔ)言實(shí)現(xiàn),由實(shí)現(xiàn)者判斷其特別適宜于此任務(wù)。在這樣的算法中,使用LISP編程語(yǔ)言中的S表達(dá)式構(gòu)造來(lái)代表數(shù)學(xué)表達(dá)式。在進(jìn)行進(jìn)化的過(guò)程中,直接操作這些S表達(dá)式,其扮演進(jìn)化的群體成員的角色。這些現(xiàn)有技術(shù)的方法的一個(gè)局限是沒(méi)有限制群體中的數(shù)學(xué)表達(dá)式的大小,導(dǎo)致所謂“表達(dá)式膨脹”,其中群體內(nèi)的數(shù)學(xué)表達(dá)式不適當(dāng)?shù)刈兇?。這些現(xiàn)有技術(shù)的方法的另一個(gè)局限是這些膨脹的表達(dá)式傾向于過(guò)擬合到基因編程算法用以檢查數(shù)學(xué)表達(dá)式正確性的數(shù)據(jù)。過(guò)擬合意味著表達(dá)式非常接近地符合數(shù)據(jù),包括數(shù)據(jù)中的測(cè)量誤差,而不符合來(lái)自同一來(lái)源的額外數(shù)據(jù),其之后被用于檢查表達(dá)式的正確性。還一個(gè)局限是諸如Java、或C++等現(xiàn)代程序語(yǔ)言不支持S表達(dá)式構(gòu)造,而這些語(yǔ)言被首選地用在科學(xué)與工程編程中。
符號(hào)回歸使用的另一種類型的基因算法是基因表達(dá)式編程(GEP)。在基因表達(dá)式編程中,表達(dá)式以符號(hào)串表示,其中每個(gè)符號(hào)表示數(shù)學(xué)表達(dá)式的一個(gè)記號(hào)(例如,操作數(shù)、操作符)。使用基因表達(dá)式編程時(shí),要出現(xiàn)在基因編程算法正在尋找的表達(dá)式中的常數(shù)的值可能不能事先得知。因此,GEP算法可能不得不創(chuàng)建這樣的程序,其在給定的常數(shù)(例如,零和一)的有限集合上進(jìn)行不定數(shù)目的操作。后一必要性增大了基因表達(dá)式編程算法收斂的時(shí)間,并且也不必要地增大了找到的解程序的大小。而且,既然基因表達(dá)式編程算法產(chǎn)生的表達(dá)式被限制為有限大小,為獲取所需常數(shù)所必需的操作可能消耗最大表達(dá)式大小的主要部分,并限制其它所需的操作符與變量可獲得的部分。
在基因表達(dá)式編程中,執(zhí)行多種模仿群體進(jìn)化中涉及的自然過(guò)程的行動(dòng)。這包括一點(diǎn)與兩點(diǎn)交換與突變(crossover and mutation)。這些過(guò)程涉及交換點(diǎn)的隨機(jī)選擇與在(染色體)表達(dá)的表示中替換已有記號(hào)(操作數(shù)或操作符)的新記號(hào)的隨機(jī)選擇。由于其隨機(jī)本性,在基因表達(dá)式編程的情形中,這些對(duì)于進(jìn)化適應(yīng)而言重要的操作可能,不幸地,導(dǎo)致句法上不正確的表達(dá)式(程序)。對(duì)于候選的解決方案而言,這句法上的不正確是不合適的,并可能產(chǎn)生基因表達(dá)式編程算法中的程序執(zhí)行錯(cuò)誤。
圖1是算法流程圖的第一部分,該算法遵照本發(fā)明的優(yōu)選實(shí)施例進(jìn)化數(shù)學(xué)表達(dá)式表示群體。
圖2是開始于圖1的流程圖的第二部分。
圖3顯示用于存儲(chǔ)數(shù)學(xué)表達(dá)式表示群體的矩陣,該群體由圖1-2中顯示的方法進(jìn)化。
圖4是算法流程圖,該算法遵照本發(fā)明的優(yōu)選實(shí)施例驗(yàn)證數(shù)學(xué)表達(dá)式表示的語(yǔ)法。
圖5是操作符與操作數(shù)數(shù)組,其包括數(shù)學(xué)表達(dá)式表示。
圖6是索引數(shù)組,其表示圖5中顯示的數(shù)組。
圖7是圖1中顯示的方法要確定的假定數(shù)學(xué)表達(dá)式。
圖8是圖7中顯示的數(shù)學(xué)表達(dá)式的近似,其包括基于素?cái)?shù)的常數(shù)。
圖9是表示圖8中顯示的方程的樹形圖。
圖10是電腦框圖,該電腦用于遵照本發(fā)明的優(yōu)選實(shí)施例執(zhí)行圖1、2與4中顯示的算法。
具體實(shí)施例方式
圖1是算法100的流程圖的第一部分,該算法遵照本發(fā)明的優(yōu)選實(shí)施例進(jìn)化數(shù)學(xué)表達(dá)式表示群體,圖2是開始于圖1的流程圖的第二部分。圖1、2中顯示的算法100是基因表達(dá)式編程(GEP)類型的基因算法(GA)。基因算法100用于確定良好地符合數(shù)據(jù)的數(shù)學(xué)表達(dá)式。該數(shù)據(jù)可包括一或多組相關(guān)聯(lián)的自變量與因變量的值。根據(jù)要搜尋的數(shù)學(xué)表達(dá)式的特性,可能有一個(gè)或多個(gè)自變量。
參照?qǐng)D1,在步驟102,讀入要用的操作符與操作數(shù)的列表。該列表可保存于配置文件中。對(duì)于許多技術(shù)領(lǐng)域而言,在步驟102讀入的操作符中包括加法、減法、乘法、與除法是適宜的。在許多技術(shù)領(lǐng)域中,包括三角函數(shù)操作符,例如正弦、余弦、正切,以及反三角函數(shù)操作符,例如反正弦、反余弦、反正切,也是適宜的。注意操作符可根據(jù)其操作的操作數(shù)的數(shù)目分類。也可包括其它類型的函數(shù)。MAX函數(shù)接受兩個(gè)操作數(shù)或數(shù)學(xué)子表達(dá)式作為參數(shù),評(píng)估兩個(gè)參數(shù),并返回較大的參數(shù)的值。也可包括互補(bǔ)的MIN函數(shù)。
還可包括另一種類型的操作數(shù),其類似于編程中的流控結(jié)構(gòu),也就是IF{子表達(dá)式一<=子表達(dá)式二}THEN{子表達(dá)式三}ELSE{子表達(dá)式四}(簡(jiǎn)稱為IF操作符)。后者對(duì)于發(fā)現(xiàn)分段定義的函數(shù)是有用的。注意IF操作符接受四個(gè)參數(shù),用于不等式條件的第一與第二子表達(dá)式,滿足該條件時(shí)執(zhí)行的第三子表達(dá)式,以及不滿足該條件時(shí)計(jì)算的第四子表達(dá)式。
包含基于經(jīng)常在特定領(lǐng)域中出現(xiàn)的特定函數(shù)的操作符可能是適宜的。例如,如果要將算法100施加于神經(jīng)網(wǎng)絡(luò)領(lǐng)域,包括基于S形函數(shù)的操作符可能是適宜的。
表I包括可在步驟102中讀入的操作符的示例性的列表。在表I中,第一列指示操作符名稱,第二列指示操作符類型,其等價(jià)于操作符作為自變量接受的操作數(shù)的數(shù)目,第三列為值保留(其不適用于操作符,因此在表I中沒(méi)有值),第四列給出與每個(gè)操作符相關(guān)聯(lián)的成本,該成本為每個(gè)操作符增加數(shù)學(xué)表達(dá)式復(fù)雜度的測(cè)度,第五列為引用操作符的索引。
表I
在步驟102中讀入的操作數(shù)包括常數(shù)與自變量。下面的表II包括在步驟102中讀入的操作數(shù)的示例性的列表。表II中列的標(biāo)識(shí)與表I中相同。表II中的索引號(hào)繼續(xù)了始于表I的索引號(hào)序列。
表II的第一行(索引號(hào)為行17)包括Pi,包括它是因?yàn)榻?jīng)驗(yàn)顯示它經(jīng)常出現(xiàn)在與科學(xué)和工程問(wèn)題相關(guān)的數(shù)學(xué)表達(dá)式中而包括進(jìn)來(lái)的。也可在表II中包括在許多領(lǐng)域中重要的其它適宜的常數(shù)(例如,自然對(duì)數(shù)基,e)或適用于特定研究領(lǐng)域的常數(shù)(例如普朗克常數(shù)),如果認(rèn)為它們有機(jī)會(huì)出現(xiàn)在要搜尋的數(shù)學(xué)表達(dá)式中的話。表II的其后的行(索引18)包括零操作數(shù)。包括零允許算法100通過(guò),比如說(shuō),將子表達(dá)式乘以零,來(lái)有效率地關(guān)閉算法100正在進(jìn)化的數(shù)學(xué)表達(dá)式的某些部分,而不擾亂該數(shù)學(xué)表達(dá)式?;虮磉_(dá)式編程對(duì)于操作符與操作數(shù)在數(shù)學(xué)表達(dá)式表示中的順序敏感。根據(jù)另一種實(shí)施例,在步驟102中讀入的操作符中間包括uno()函數(shù)。uno()函數(shù)返回其自變量而不作改變。包括uno()函數(shù)允許GEP算法使由群體成員表示的數(shù)學(xué)表達(dá)式的某些部分停止活動(dòng),而不擾亂該群體成員。停止活動(dòng)的部分在后繼操作中可通過(guò)交換或突變來(lái)激活。
表II的下一行(索引19)包括數(shù)一(1)。一在實(shí)數(shù)系統(tǒng)中具有特殊地位,這是因?yàn)槿魏握麛?shù)或有理數(shù)可通過(guò)將一相加或除以一的和數(shù)來(lái)分別形成。因此,向算法100提供一,原則上允許算法100在需要時(shí)在要生成的數(shù)學(xué)表達(dá)式中生成任何數(shù)目的前述類型。
表I與II包括原始材料,算法100使用該原始材料來(lái)確定數(shù)學(xué)表達(dá)式。表I與II的內(nèi)容(實(shí)踐中可使用數(shù)組或其它數(shù)據(jù)結(jié)構(gòu)來(lái)表示該內(nèi)容)將被用于生成數(shù)學(xué)表達(dá)式表示的初始群體,并將從進(jìn)行突變操作中提取(draw from)。
表II的下一組行(索引20-42)包括一系列素?cái)?shù)。通過(guò)將兩個(gè)或更多個(gè)素?cái)?shù)相乘、相加、相除與相減,子表達(dá)式可生成多個(gè)數(shù),這比僅使用數(shù)一生成同樣的數(shù)要相對(duì)簡(jiǎn)單。因此,在表中包括素?cái)?shù)序列傾向于減少算法100為找尋描述實(shí)際數(shù)據(jù)集的數(shù)學(xué)表達(dá)式所需的世代(generation)數(shù)目,也傾向于減少找到的數(shù)學(xué)表達(dá)式的復(fù)雜度。
要包含在由算法100生成的數(shù)學(xué)表達(dá)式中的自變量可在文件中標(biāo)識(shí),該文件包括用于評(píng)估由GEP算法100生成的程序的擬合性的訓(xùn)練數(shù)據(jù)。一種用于訓(xùn)練數(shù)據(jù)和包含與該數(shù)據(jù)相關(guān)聯(lián)的自變量的標(biāo)識(shí)的標(biāo)準(zhǔn)文件格式被稱作是學(xué)術(shù)數(shù)據(jù)挖掘研究文件格式或ARFF。表II中的最后兩項(xiàng)——X和Y是示例性的自變量。表II中的自變量的數(shù)目對(duì)應(yīng)于實(shí)際數(shù)據(jù)中的自變量的數(shù)目,算法100為該數(shù)據(jù)搜尋數(shù)學(xué)表達(dá)式。對(duì)于特定問(wèn)題,可能只有一個(gè)自變量,或者超過(guò)兩個(gè)自變量。
表II
再次參照?qǐng)D1,在下一步驟104中,為生成N個(gè)數(shù)學(xué)表達(dá)式表示(群體成員)的群體,對(duì)于該N個(gè)表示中的每一個(gè),隨機(jī)地從步驟102(例如顯示于圖1、2中的)中讀入的操作數(shù)與操作符列表中選擇K個(gè)元素的集合圖3顯示用于存儲(chǔ)數(shù)學(xué)表達(dá)式表示群體的矩陣300,該群體在步驟104(圖2)中生成并由圖1-2中顯示的算法進(jìn)化。優(yōu)選地,將步驟104中生成的每個(gè)群體成員保存為行或列(圖3中顯示為行)。矩陣的元素寫作PA(l,m),其中行索引l指定群體成員,而列索引m指定每個(gè)群體成員內(nèi)的第m元素。(PA代表群體數(shù)組。)因此,矩陣300的每一行是包括數(shù)學(xué)表達(dá)式表示的數(shù)組。在此初始階段,每個(gè)表達(dá)式的語(yǔ)法有待檢驗(yàn)。矩陣300的矩陣元素包括(根據(jù)表I與II的第五列)對(duì)應(yīng)于特定操作符或操作數(shù)的索引號(hào)。可將矩陣300看作數(shù)組集,每個(gè)數(shù)組表示一群體成員。由于編程語(yǔ)言通常被設(shè)計(jì)為高速地執(zhí)行矩陣處理操作(例如行拷貝、元素交換),要在數(shù)學(xué)表達(dá)式表示群體上進(jìn)行的操作(例如選擇、交換、突變)得到推動(dòng)和加速(也就是具有減小的計(jì)算成本),這是因?yàn)閿?shù)學(xué)表達(dá)式表示群體由數(shù)組集,例如,由矩陣300來(lái)表示。
圖5顯示操作符與操作數(shù)的數(shù)組500,其包括數(shù)學(xué)表達(dá)式表示。圖5闡釋了在矩陣300(圖3)的每一行中引用的操作符與操作數(shù)序列。圖6是索引數(shù)組600,其表示圖5中顯示的數(shù)組。如圖6所示,操作數(shù)與操作符以索引集表示,該索引集(通過(guò)表I與II)對(duì)應(yīng)于圖5中顯示的操作符與操作數(shù)序列。也就是說(shuō),說(shuō)明性的數(shù)組500中出現(xiàn)的每個(gè)操作符或操作數(shù)實(shí)際上由數(shù)組600與矩陣300內(nèi)的索引號(hào)代表。數(shù)組600內(nèi)存儲(chǔ)的索引是操作符或操作數(shù)的密碼子(codon)。矩陣300(圖3)包括圖6中作為行顯示的類型數(shù)組的編號(hào)N。注意每個(gè)群體成員由矩陣300(圖3)的行表示,且數(shù)組500(圖5)與600(圖6)在基因算法100執(zhí)行期間可包括超過(guò)為組成句法上正確的數(shù)學(xué)表達(dá)式所需要的數(shù)量的元素。盡管如此,位于數(shù)組500、600的末尾的多余的元素被攜帶到后繼操作中,并可通過(guò)交換操作或突變而變?yōu)閿?shù)學(xué)表達(dá)式的一部分。
再次參照?qǐng)D1,下一框106是循環(huán)的頂部,該循環(huán)連續(xù)地檢查每個(gè)新的群體成員(矩陣300的行)的語(yǔ)法,以確定其是否代表有效的數(shù)學(xué)表達(dá)式。在步驟108,檢查數(shù)學(xué)表達(dá)式表示的語(yǔ)法。在步驟108中遵照本發(fā)明的優(yōu)選實(shí)施例執(zhí)行的過(guò)程的細(xì)節(jié)在下面參照?qǐng)D4進(jìn)行詳細(xì)描述。框112是決定框,其結(jié)果取決于在步驟108檢查的語(yǔ)法是否正確。如果語(yǔ)法不正確,則算法100分支到步驟110,在這里重新生成群體成員(數(shù)學(xué)表達(dá)式表示)??赏ㄟ^(guò)隨機(jī)地重新選擇操作數(shù)與操作符來(lái)重新生成群體成員。作為可供選擇的另一種替代方案,可(例如隨機(jī)地)修改群體成員,以改正語(yǔ)法。在步驟110后,算法100返回到步驟108。如果在框112確定在步驟108中檢查的數(shù)學(xué)表達(dá)式的語(yǔ)法是正確的,則算法繼續(xù)到框114。在框114中,確定是否還有群體成員需要檢查。如果是這樣,則算法100返回到步驟106,并且其后處理下一個(gè)群體成員。如果已檢查所有群體成員,則算法100繼續(xù)到步驟116。
在步驟116,為群體中(例如,數(shù)組300中,圖3)表示的數(shù)學(xué)表達(dá)式計(jì)算第一擬合性測(cè)度。第一擬合性測(cè)度涉及群體中表示的數(shù)學(xué)表達(dá)式的復(fù)雜性。按照第一擬合性測(cè)度,較大的復(fù)雜性等于減少的擬合性。第一擬合性測(cè)度涉及對(duì)被表示的數(shù)學(xué)表達(dá)式與操作符和操作數(shù)相關(guān)聯(lián)的成本求和。與操作符和操作數(shù)相關(guān)聯(lián)的成本由表I與II的第四列給出。遵照本發(fā)明的優(yōu)選實(shí)施例,第一擬合性測(cè)度通過(guò)下面的方程計(jì)算方程1FMi=AvgCostAvgCost+Costi]]>其中,F(xiàn)Mi是第i個(gè)群體成員(數(shù)學(xué)表達(dá)式)的第一(關(guān)于擬合性的)擬合性測(cè)度,Costi是與第i個(gè)表達(dá)式的操作符相關(guān)聯(lián)的成本的和,AvgCost是群體中的成本Costi的和的平均值。
與每個(gè)操作符相關(guān)聯(lián)的成本在表1的第四列給出。注意第一擬合性測(cè)度FMi始終在零到一之間。方程1也可用于為群體的后繼世代計(jì)算第一擬合性測(cè)度。
再次參照?qǐng)D1,在步驟118,將每個(gè)群體成員(例如矩陣300的行)轉(zhuǎn)化為可執(zhí)行程序,該程序?qū)崿F(xiàn)該群體成員內(nèi)表示的數(shù)學(xué)表達(dá)式。
圖7顯示圖1中顯示的方法要決定的假定數(shù)學(xué)表達(dá)式700,圖8顯示圖7中顯示的數(shù)學(xué)表達(dá)式700的近似800。圖7中顯示的表達(dá)式700中出現(xiàn)的常數(shù)在圖8中顯示的表達(dá)式800中使用素?cái)?shù)與一來(lái)近似。圖8中顯示的表達(dá)式800對(duì)應(yīng)于圖5、6中顯示的數(shù)組中包括的數(shù)學(xué)表達(dá)式表示。圖9是表示圖8中顯示的方程的樹形圖900。圖9也有助于理解圖8中顯示的表達(dá)式800同圖5、6中顯示的數(shù)學(xué)表達(dá)式表示之間的對(duì)應(yīng)關(guān)系。通過(guò)從數(shù)組500的左邊開始,并在構(gòu)建樹形圖900時(shí)遵循廣度優(yōu)先規(guī)則,從圖5中顯示的數(shù)組構(gòu)造樹形圖900。樹形圖900反映關(guān)于操作順序的普通規(guī)則。
遵照本發(fā)明的優(yōu)選實(shí)施例,算法100使用現(xiàn)代的面向?qū)ο蟮木幊陶Z(yǔ)言寫成。優(yōu)選地,每個(gè)密碼子(操作數(shù)或操作符)的基本信息封裝在類的實(shí)例中。下面顯示了稱為codon(密碼子)的Java類的原型,該類適宜于封裝每個(gè)操作數(shù)或操作符的基本信息。優(yōu)選地,codon類包含用于表I與II的五列中列出的每個(gè)條目(也就是名稱、類型、值、成本與索引)的實(shí)例變量。為表I與II的每一行生成codon類的實(shí)例。
<pre listing-type="program-listing"><![CDATA[public class Codon{public String Name;//密碼子名稱public intType;//操作元素的數(shù)目//=3 IF(if...then...else...//=2操作符{+,-,*,/,...}//=1函數(shù) {sqrt,sigmoid,...}//=0常數(shù) {1,2,3,5,...}//=-1變量public intIndex;//用于快速處理的位置索引public double Cost;//要應(yīng)用的密碼子的成本public double Value;//常數(shù)與變量類型的密碼子的值}]]></pre>使用codon類的實(shí)例作為基本構(gòu)建元件來(lái)生成可執(zhí)行程序,該程序編碼由群體成員表示的數(shù)學(xué)表達(dá)式。codon類的實(shí)例可用在節(jié)點(diǎn)類的實(shí)例中,該節(jié)點(diǎn)類的實(shí)例還包含額外信息(實(shí)例變量),包括父節(jié)點(diǎn)引用與子節(jié)點(diǎn)引用。節(jié)點(diǎn)類的實(shí)例可用在表達(dá)式樹類中,該表達(dá)式樹類為整個(gè)數(shù)學(xué)表達(dá)式保存結(jié)構(gòu)信息。表達(dá)式樹類的實(shí)例中的信息包括表達(dá)式樹結(jié)構(gòu),例如如圖9中圖形化地表示的那樣。
再次參照?qǐng)D1,在步驟120中,使用一個(gè)或多個(gè)測(cè)試數(shù)據(jù)集執(zhí)行步驟118中生成的可執(zhí)行程序。測(cè)試數(shù)據(jù)可以,比如說(shuō),包括若干個(gè)相關(guān)聯(lián)的自變量與因變量集,其通過(guò)(例如在試驗(yàn)或調(diào)查的情況下)觀察收集到。在步驟118中執(zhí)行程序時(shí),將自變量值作為程序參數(shù)使用,并將在步驟118執(zhí)行的程序的輸出與相關(guān)聯(lián)的因變量值的值進(jìn)行對(duì)比。例如,在搜尋近似匹配兩個(gè)變量的函數(shù)的數(shù)學(xué)表達(dá)式時(shí),將使用多個(gè)(Xj,Yj,Zj)形式的數(shù)據(jù)集,其中Xj與Yj是自變量,而Zj是因變量。每個(gè)集內(nèi)的自變量Xj、Yj作為程序參數(shù),并將每個(gè)程序執(zhí)行的輸出與相關(guān)聯(lián)的Zj進(jìn)行比較。在面向?qū)ο蟮木幊陶Z(yǔ)言實(shí)現(xiàn)中,該實(shí)現(xiàn)包含表達(dá)式樹類,該樹類具有對(duì)節(jié)點(diǎn)類的引用,該節(jié)點(diǎn)類引用codon類,程序執(zhí)行相當(dāng)于對(duì)前述表達(dá)式樹類的實(shí)例求值。
在步驟122,使用在步驟122中獲得的輸出計(jì)算第二擬合性測(cè)度,該測(cè)度基于每個(gè)群體成員表示的數(shù)學(xué)表達(dá)式擬合一個(gè)或多個(gè)測(cè)試數(shù)據(jù)集的程度。優(yōu)選地,第二擬合性測(cè)度基于由下面的方程2給出的擬合性的原始均方根(RMS)測(cè)度方程2RMSi=1MΣj=1M(zj-PROGi(Xj1,Xj2,Xj3,...XjL))2]]>其中,Zj是第j個(gè)測(cè)試數(shù)據(jù)集中的因變量值;Xj1,Xj2,Xj3,...XjL是第j個(gè)測(cè)試數(shù)據(jù)集中的自變量值集合;L是因變量的數(shù)目;PROGi表示第i個(gè)程序,其實(shí)現(xiàn)由第i個(gè)群體成員表示的數(shù)學(xué)表達(dá)式;M是測(cè)試數(shù)據(jù)集的數(shù)目;和RMSi是第i個(gè)程序的擬合性的原始均方根測(cè)度的值。
優(yōu)選地,使用下面的方程3來(lái)調(diào)節(jié)由方程2給出的原始RMS擬合度的尺度,以導(dǎo)出第二擬合性測(cè)度方程3SMi=AvgRMSAvgRMS+RMSi]]>其中,AvgRMS是一個(gè)世代上的RMSi的平均值。
在使用方程三為后繼世代中的群體成員求值第二擬合性測(cè)度時(shí),優(yōu)選地,使用前面世代中AvgRMS的最低值,如果它比當(dāng)前時(shí)代的AvgRMS值低的話。在使用方程一為群體成員求值第一擬合性測(cè)度時(shí),使用到目前為止具有最低的AvgRMS值的世代的AvgRMS。第二擬合性測(cè)度SMi的值介于零到一之間。
在步驟124,計(jì)算考慮了第一擬合性測(cè)度與第二擬合性測(cè)度的總的擬合性測(cè)度。優(yōu)選地,使用下面的方程4計(jì)算總的擬合性測(cè)度。
方程4Fi=(1-p)·SMi+p·FMi其中,F(xiàn)i是第i個(gè)程序的總的擬合性測(cè)度,該程序?qū)崿F(xiàn)由第i個(gè)群體成員表示的函數(shù)的數(shù)學(xué)表達(dá)式;和p是吝嗇權(quán)重因子(parsimony weighting factor),其確定在總的擬合性測(cè)度中要給予第一(關(guān)于成本的)擬合性測(cè)度的權(quán)重。
遵照使用算法100的優(yōu)選模式,吝嗇權(quán)重因子p被初始地設(shè)置為零,并在獲取擬合性的原始均方根測(cè)度的低值之后設(shè)置為有限值。吝嗇權(quán)重因子優(yōu)選地為正數(shù),其小于0.2,并且更優(yōu)選地,小于0.1,使得不會(huì)以第二(關(guān)于擬合性的)擬合性測(cè)度為代價(jià)而給予第一(關(guān)于成本的)擬合性測(cè)度不適當(dāng)?shù)臋?quán)重。當(dāng)設(shè)置為有限值時(shí),吝嗇權(quán)重因子優(yōu)選地至少是0.05。通過(guò)在總的擬合性測(cè)度中包括第一(關(guān)于成本的)擬合性測(cè)度,減小了算法100找到的數(shù)學(xué)表達(dá)式的大小。包括第一關(guān)于成本的擬合性測(cè)度也傾向于消除過(guò)擬合測(cè)試數(shù)據(jù)集的數(shù)學(xué)表達(dá)式。
參照?qǐng)D2,顯示了算法100的第二部分???26是決定框,其結(jié)果取決于是否滿足擬合度標(biāo)準(zhǔn)。優(yōu)選地,測(cè)試的擬合度標(biāo)準(zhǔn)是這樣的標(biāo)準(zhǔn),即總的擬合性測(cè)度(包括第一與第二擬合性測(cè)度)超過(guò)總擬合度門限。如果滿足擬合度標(biāo)準(zhǔn),則算法100繼續(xù)步驟130,在這里輸出最佳群體成員。如果沒(méi)有滿足擬合度標(biāo)準(zhǔn),則算法100繼續(xù)框128。如果滿足總的擬合性測(cè)度,但吝嗇權(quán)重因子被設(shè)置為零,則在步驟126將不會(huì)判定已滿足擬合度標(biāo)準(zhǔn)。
在框128,確定是否已超過(guò)世代限制。上面給出的討論解決了施行于初始群體(也就是在步驟104中生成的群體)的步驟,然而,如下面余下的討論將澄清的那樣,算法100遞歸地操作,使得對(duì)于后繼世代中的每一世代將到達(dá)框128。優(yōu)選地,施加世代限制,以限制基因算法100可能遞歸地生成的世代的數(shù)目。世代限制用于控制計(jì)算機(jī)資源的消耗以及算法100的運(yùn)行時(shí)間。如果達(dá)到世代限制,則算法100進(jìn)行到步驟130,在這里輸出最佳群體成員。作為可供選擇的另一種替代方案,在停止的情形中可隨機(jī)地打亂群體,并繼續(xù)執(zhí)行。如果沒(méi)有超過(guò)世代限制,算法100繼續(xù)框132。
框132是另一個(gè)決定框,其結(jié)果取決于是否已獲得對(duì)測(cè)試數(shù)據(jù)的好的擬合??赏ㄟ^(guò)比較當(dāng)前世代的擬合性的最低原始均方根測(cè)度和RMS門限來(lái)判定是否已獲得好的擬合。如果在框132判定已獲得好的擬合,則算法100繼續(xù)步驟134,在這里增加吝嗇權(quán)重因子。在步驟134,優(yōu)選地,在一個(gè)步驟中將吝嗇權(quán)重因子從零變?yōu)橛邢拗?。在步驟134之后,算法繼續(xù)步驟136。如果在步驟132中判定尚未獲得好的擬合,則算法直接進(jìn)行到步驟136。
在步驟136,從當(dāng)前群體選擇群體成員,以在后繼世代中復(fù)制。優(yōu)選地,至少一部分被選擇以進(jìn)行復(fù)制的群體成員是被基于其擬合度選擇的。遵照本發(fā)明的優(yōu)選實(shí)施例,使用隨機(jī)殘留法來(lái)選擇群體成員以進(jìn)行復(fù)制。在隨機(jī)殘留法中,選擇每個(gè)群體成員的至少特定數(shù)目Ii份拷貝,以在后繼世代中進(jìn)行復(fù)制。數(shù)目Ii由下面的方程給出方程5Ii=Trunc(N*FiΣi=1NFi)]]>其中,N是每個(gè)世代中的群體成員的數(shù)目;和Trunc是截?cái)嗪瘮?shù)。
方程5中的截?cái)嗪瘮?shù)內(nèi)的量的分?jǐn)?shù)部分被用于確定每個(gè)群體成員是否有(超出由方程五確定的拷貝數(shù)目的)任何額外的拷貝將在后繼世代中進(jìn)行復(fù)制。如下使用前述分?jǐn)?shù)部分。生成介于零到一之間的隨機(jī)數(shù)。如果前述分?jǐn)?shù)部分超過(guò)該隨機(jī)數(shù),則向后繼世代添加第i個(gè)群體成員的額外的拷貝。調(diào)解使用隨機(jī)數(shù)與數(shù)目Ii的分?jǐn)?shù)部分生成的選擇數(shù)目,使得后繼群體維持成員總數(shù)N。
使用上面描述的隨機(jī)殘留法導(dǎo)致主要基于擬合度,同時(shí)具有一定程度的隨機(jī)性,來(lái)選擇群體成員以進(jìn)行復(fù)制。后一種選擇方法模擬生物系統(tǒng)中的自然選擇。
在步驟138,進(jìn)行交換操作??蛇M(jìn)行一或兩點(diǎn)或兩種類型的交換操作。在進(jìn)行交換操作時(shí),隨機(jī)地配對(duì)群體成員(矩陣300的行)??墒褂脝蝹€(gè)交換概率或分立的交換概率,以決定是否進(jìn)行一與兩點(diǎn)交換操作。對(duì)于每種類型的交換操作,并且對(duì)于每對(duì)群體成員,生成介于零到一之間的隨機(jī)數(shù)。如果該隨機(jī)數(shù)小于交換概率,則進(jìn)行交換操作,如果該隨機(jī)數(shù)大于交換操作,則群體成員對(duì)保持不變。可使用替代方案來(lái)確定是否進(jìn)行交換操作。如果確定要在一對(duì)群體成員之間進(jìn)行一點(diǎn)交換操作,則隨機(jī)地選擇交換點(diǎn)。其后,兩個(gè)群體成員(矩陣300的行)中在該交換點(diǎn)之后的全部元素(密碼子)在兩行之間進(jìn)行交換。如果確定要在兩個(gè)群體成員之間進(jìn)行兩點(diǎn)交換操作,則隨機(jī)地選擇兩點(diǎn),交換群體成員(矩陣300的行)中在這兩點(diǎn)之間的元素。通過(guò)將每個(gè)群體表示為索引數(shù)組集(更優(yōu)選地,索引矩陣),有可能使用快速數(shù)組處理操作(例如,選擇拷貝)來(lái)進(jìn)行交換操作。
在步驟140,進(jìn)行突變操作。如在自然生物系統(tǒng)中那樣,突變發(fā)生的速率相對(duì)地低(相對(duì)于交換)。在算法100中,突變的速率由突變概率參數(shù)控制。為決定每個(gè)群體成員是否要突變,生成隨機(jī)數(shù)并比較其與突變概率。如果為給定群體成員生成的隨機(jī)數(shù)小于突變概率,則指定該給定的群體成員突變。在進(jìn)行突變時(shí),隨機(jī)地選擇群體成員的元素,并將其替換為操作數(shù)或操作符,該操作數(shù)或操作符從在步驟102中讀入的操作符或操作數(shù)中隨機(jī)地選擇。
在步驟142,進(jìn)行旋轉(zhuǎn)操作。為決定每個(gè)群體成員(數(shù)組)是否要被旋轉(zhuǎn),生成隨機(jī)數(shù)并將其與旋轉(zhuǎn)概率進(jìn)行比較。如果為給定群體成員生成的隨機(jī)數(shù)小于旋轉(zhuǎn)概率,則指定旋轉(zhuǎn)該群體成員。為進(jìn)行旋轉(zhuǎn),隨機(jī)地選擇指定的群體成員數(shù)組的位置,并將數(shù)組循環(huán)地向左移動(dòng),以將指定位置的密碼子帶到數(shù)組最前面。
步驟142之后,算法返回到步驟框106,在這里開始檢查新群體成員語(yǔ)法的過(guò)程,該新成員由交換與突變創(chuàng)建。其后,算法重復(fù)上面描述的后繼步驟,繼續(xù)進(jìn)化后繼世代,直到找到高擬合性群體成員,或者達(dá)到世代限制。
初始群體世代中固有的隨機(jī)性104、交換138與突變140操作可導(dǎo)致表示具有無(wú)效語(yǔ)法的數(shù)學(xué)表達(dá)式的群體成員。這樣的無(wú)效群體成員當(dāng)然不適合作為候選解決方案,并有可能引起執(zhí)行錯(cuò)誤。因此,如上面提到的那樣,與步驟108、112(圖1)有關(guān),檢查每個(gè)新群體成員的語(yǔ)法。圖4是語(yǔ)法檢查算法的流程圖400,該算法遵照本發(fā)明的優(yōu)選實(shí)施例驗(yàn)證數(shù)學(xué)表達(dá)式表示的語(yǔ)法。圖4是圖1中顯示的步驟108的優(yōu)選形式。參照?qǐng)D4,在第一個(gè)框402,將所需長(zhǎng)度變量初始化為值一。下一框404是循環(huán)的頂部,其考慮群體成員數(shù)組的后繼元素。遵照本發(fā)明的優(yōu)選實(shí)施例,數(shù)組采用圖6中顯示的形式,其中每個(gè)數(shù)組元素引用操作數(shù)或操作符。開始于第二個(gè)框404的循環(huán)的循環(huán)計(jì)數(shù)器被用作指針,其指向考慮中的群體成員(數(shù)組)的后繼元素。數(shù)組元素被標(biāo)注為1到N。在步驟406,將所需長(zhǎng)度變量增加要求的額外元素的數(shù)目,該數(shù)目基于循環(huán)計(jì)數(shù)器的當(dāng)前值指向的元素的類型。表I與II的第二列將每個(gè)操作數(shù)與操作符的類型指定為整數(shù)型。類型數(shù)指示每個(gè)操作數(shù)或操作符所要求的額外元素的數(shù)目。例如,加法與乘法操作符屬于類型二,要求兩個(gè)操作數(shù)。正弦操作符屬于類型一,僅要求一個(gè)操作數(shù)。常數(shù)與變量屬于類型零。作為示例,如果,比方說(shuō),循環(huán)計(jì)數(shù)器指向數(shù)組600(圖6)的第一元素,該元素包含索引14,在表I的第一列中查找14,發(fā)現(xiàn)其指代SQRT操作符,從表I的第二列中發(fā)現(xiàn)該操作符屬于類型一。因此,將所需長(zhǎng)度從一(初始值)增加到二。在循環(huán)的下次迭代中,語(yǔ)法檢查算法讀取索引2,其代表加操作符,并且將所需長(zhǎng)度變量相應(yīng)地增加二,取值為四。在GEP算法100的面向?qū)ο蟮膶?shí)現(xiàn)中,優(yōu)選地將類型信息作為上面顯示的codon類的實(shí)例變量存儲(chǔ)。
在步驟408,將在框406中設(shè)置的所需長(zhǎng)度與最大基因長(zhǎng)度(最大數(shù)組長(zhǎng)度,在圖3、6中顯示為K)進(jìn)行比較。如果在步驟408,發(fā)現(xiàn)所需長(zhǎng)度超過(guò)最大基因長(zhǎng)度,則在步驟410,輸出無(wú)效基因消息(例如報(bào)告給算法100)。
在框412,確定循環(huán)計(jì)數(shù)器的當(dāng)前值(其指向數(shù)組600的元素,圖6)是否等于所需長(zhǎng)度變量。循環(huán)計(jì)數(shù)器等于所需長(zhǎng)度變量意味著有充足的操作數(shù)來(lái)完成在要檢查的群體成員數(shù)組中包含的操作符指定的操作,并且數(shù)組中編碼了有效語(yǔ)法的數(shù)學(xué)表達(dá)式。所需長(zhǎng)度變量等于循環(huán)計(jì)數(shù)器指示已到達(dá)要檢查的數(shù)組中包含的基因的末尾?;蚴敲總€(gè)數(shù)組中這樣的一部分,其表示有效語(yǔ)法的數(shù)學(xué)表達(dá)式。時(shí)常地,要求少于完整長(zhǎng)度的群體成員數(shù)組來(lái)表示有效語(yǔ)法的數(shù)學(xué)表達(dá)式。然而,任何未使用的數(shù)組元素可通過(guò)交換或突變而在后繼世代中變?yōu)榛顒?dòng)的。如果循環(huán)計(jì)數(shù)器的當(dāng)前值等于所需長(zhǎng)度變量,則輸出有效基因消息(例如報(bào)告給算法100)。如果不相等,則算法400返回步驟404,在這里增加循環(huán)計(jì)數(shù)器索引,其后考慮基因(數(shù)組)的下一元素。
使用語(yǔ)法檢查算法400允許對(duì)數(shù)學(xué)表達(dá)式的數(shù)組表示進(jìn)行隨機(jī)的交換、突變與旋轉(zhuǎn)操作,同時(shí)避免將計(jì)算機(jī)時(shí)間浪費(fèi)在產(chǎn)生和試圖執(zhí)行具有無(wú)效語(yǔ)法的程序上。
有利地,語(yǔ)法檢查操作能夠操作在群體成員的數(shù)組表示(例如,600,圖6)上。因此,無(wú)需從群體成員生成程序以驗(yàn)證語(yǔ)法,從而節(jié)省了計(jì)算機(jī)資源,削減了語(yǔ)法檢查400與主算法100的執(zhí)行時(shí)間。
盡管本發(fā)明被參照?qǐng)D中包括的流程圖進(jìn)行描述,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)說(shuō)將顯而易見的是,可使用不同的程序流程,而不偏離本發(fā)明的實(shí)質(zhì)。
圖10是電腦1000的框圖,該電腦遵照本發(fā)明的優(yōu)選實(shí)施例執(zhí)行圖1、2與4中顯示的算法。電腦1000包括微處理器1002、隨機(jī)存取存儲(chǔ)器(RAM)1004、只讀存儲(chǔ)器(ROM)1006、硬盤驅(qū)動(dòng)器1008、顯示器適配器1010(例如顯卡)、可移動(dòng)電腦可讀介質(zhì)讀取器1014、網(wǎng)絡(luò)適配器1016、鍵盤以及I/O端口1020,可通過(guò)數(shù)字信號(hào)總線1026通信地連接。視頻顯示器1012電氣連接到顯示器適配器1010,以接收視頻信號(hào)。指示設(shè)備1022,優(yōu)選地為鼠標(biāo),電氣連接到I/O端口1020,以接收指示設(shè)備1022的用戶操作生成的電子信號(hào)。根據(jù)本發(fā)明的一個(gè)實(shí)施例,使用網(wǎng)絡(luò)適配器1016,以將電腦通信地連接到外部數(shù)據(jù)源,例如遠(yuǎn)程服務(wù)器。電腦可讀介質(zhì)讀取器1014優(yōu)選地包括光盤(CD)驅(qū)動(dòng)器。提供電腦可讀介質(zhì)1024,其包括上面參照?qǐng)D1、2、4描述的算法使用的軟件。電腦可讀介質(zhì)上包括的軟件通過(guò)可移動(dòng)電腦可讀介質(zhì)讀取器1014裝載,以配置電腦1000執(zhí)行上面參照流程圖描述的本發(fā)明的過(guò)程。電腦1000可以,比如說(shuō),包括個(gè)人電腦或工作站電腦。
對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)說(shuō)將顯而易見的是,本發(fā)明可使用硬件或軟件或其組合實(shí)現(xiàn)。使用本發(fā)明或其部分的程序可存儲(chǔ)在多種類型的電腦可讀介質(zhì)中,包括光盤、硬盤驅(qū)動(dòng)器、磁帶、可編程只讀存儲(chǔ)器芯片。網(wǎng)絡(luò)電路也可以暫時(shí)地作為電腦可讀介質(zhì),從該網(wǎng)絡(luò)電路讀取本發(fā)明教導(dǎo)的程序。
盡管已闡釋和描述本發(fā)明的優(yōu)選實(shí)施例以及其它實(shí)施例,顯然的是,本發(fā)明不限于此。本領(lǐng)域普通技術(shù)人員可作出多種修改、變動(dòng)、變形、替換、及等價(jià),而不偏離如所附的權(quán)利要求書所定義的本發(fā)明的實(shí)質(zhì)與范圍。
權(quán)利要求
1.一種基于基因算法的方法,用于確定描述實(shí)際數(shù)據(jù)集的數(shù)學(xué)表達(dá)式,所述方法包括以下步驟生成數(shù)學(xué)表達(dá)式表示的初始群體,其包括多個(gè)素?cái)?shù);和從所述初始群體進(jìn)化后繼世代。
2.如權(quán)利要求1所述的方法,其中,所述多個(gè)素?cái)?shù)從預(yù)先定義的素?cái)?shù)列表中選擇。
3.如權(quán)利要求1所述的方法,其中,所述的進(jìn)化后繼世代的步驟包括以下步驟對(duì)于多個(gè)后繼世代,通過(guò)引入一個(gè)或多個(gè)素?cái)?shù)的表示,從所述數(shù)學(xué)表達(dá)式表示的當(dāng)前群體突變一個(gè)或多個(gè)數(shù)學(xué)表達(dá)式表示。
4.如權(quán)利要求1所述的方法,其中,所述的進(jìn)化后繼世代的步驟包括以下步驟對(duì)于多個(gè)后繼世代生成一組實(shí)現(xiàn)數(shù)學(xué)表達(dá)式的程序,所述數(shù)學(xué)表達(dá)式表示在當(dāng)前世代的數(shù)學(xué)表達(dá)式表示的群體中;為一個(gè)或多個(gè)測(cè)試數(shù)據(jù)集執(zhí)行所述程序集中的一個(gè)或多個(gè),以獲得與所述程序集中的所述一個(gè)或多個(gè)相對(duì)應(yīng)的一個(gè)或多個(gè)結(jié)果;從所述一個(gè)或多個(gè)結(jié)果導(dǎo)出所述程序集中的所述一個(gè)或多個(gè)的一個(gè)或多個(gè)擬合性指示;基于所述擬合性指示,從所述當(dāng)前世代的數(shù)學(xué)表達(dá)式表示的群體中選擇一個(gè)或多個(gè)所述表示,以在后繼世代中進(jìn)行復(fù)制;在所述后繼世代中的表示對(duì)之間進(jìn)行一個(gè)或多個(gè)交換操作。
5.如權(quán)利要求4所述的方法,其進(jìn)一步包括以下步驟對(duì)于所述多個(gè)后繼世代中的一個(gè)或多個(gè),通過(guò)引入一個(gè)或多個(gè)素?cái)?shù)的表示,從所述數(shù)學(xué)表達(dá)式表示的當(dāng)前群體突變一個(gè)或多個(gè)數(shù)學(xué)表達(dá)式表示。
6.如權(quán)利要求1所述的方法,其中,數(shù)學(xué)表達(dá)式表示的所述初始群體包括索引數(shù)組集,其中多個(gè)所述數(shù)組包括表示數(shù)學(xué)表達(dá)式的索引列表;和多個(gè)所述索引指示從包括操作符與操作數(shù)的組中選擇的元素。
7.一種基于基因算法的方法,用于確定描述實(shí)際數(shù)據(jù)集的數(shù)學(xué)表達(dá)式,所述方法包括以下步驟遞歸地生成一系列數(shù)學(xué)表達(dá)式表示群體,其中每個(gè)表示包括從操作符集中選擇的一個(gè)或多個(gè)操作符的標(biāo)識(shí);和從包括常數(shù)與變量的操作數(shù)集中選擇的一個(gè)或多個(gè)操作數(shù)的標(biāo)識(shí);其中所述操作數(shù)集中的每一操作數(shù),以及所述操作符集中的每一操作符與一成本相關(guān)聯(lián);對(duì)于所述群體系列中的每第k個(gè)群體,生成一組實(shí)現(xiàn)數(shù)學(xué)表達(dá)式的程序,所述數(shù)學(xué)表達(dá)式表示在所述的第k個(gè)表示群體中;通過(guò)包括以下步驟的過(guò)程,為所述程序集中的每一程序?qū)С龅谝粩M合性測(cè)度在一個(gè)或多個(gè)測(cè)試數(shù)據(jù)集上運(yùn)行所述程序,并比較輸出值與預(yù)先確定的值,以獲取殘留誤差的測(cè)度;通過(guò)包括以下步驟的過(guò)程,為所述程序集中的每一程序?qū)С龅诙M合性測(cè)度對(duì)所述程序內(nèi)的每一操作符與操作數(shù)的成本求和;和在每一后繼世代中,基于所述第一與第二擬合性測(cè)度,選擇性地復(fù)制數(shù)學(xué)表達(dá)式的個(gè)體表示。
8.如權(quán)利要求7所述的方法,其進(jìn)一步包括以下步驟組合所述第一擬合性測(cè)度與所述第二擬合性測(cè)度,以獲取總的擬合性測(cè)度。
9.一種基于基因算法的方法,用于確定描述實(shí)際數(shù)據(jù)集的數(shù)學(xué)表達(dá)式,所述方法包括以下步驟將一系列數(shù)學(xué)表達(dá)式群體中的每一個(gè)表示為索引數(shù)組集,其中每一數(shù)組表示數(shù)學(xué)表達(dá)式,且所述索引數(shù)組集中的一個(gè)或多個(gè)索引指向從包含操作符與操作數(shù)的元素組中選擇的表達(dá)式元素的表示;對(duì)于所述系列群體中的每第k個(gè)群體生成實(shí)現(xiàn)所述數(shù)學(xué)表達(dá)式的程序,所述數(shù)學(xué)表達(dá)式由所述群體中的所述數(shù)組集中的一個(gè)或多個(gè)中的每一個(gè)表示;導(dǎo)出每一程序的擬合性測(cè)度;基于所述擬合性測(cè)度,從所述數(shù)組集選擇一個(gè)或多個(gè)高擬合性數(shù)組,以繼續(xù)到第(k+1)世代;在所述的繼續(xù)到第(k+1)世代的高擬合性數(shù)組中的一個(gè)或多個(gè)之間進(jìn)行交換操作。
10.如權(quán)利要求9所述的方法,其中,每一索引指向面向?qū)ο蟮木幊陶Z(yǔ)言的類的實(shí)例,所述類封裝從包括操作符與操作數(shù)的組中選擇的元素的標(biāo)識(shí)。
11.如權(quán)利要求9所述的方法,其中,所述的進(jìn)行交換操作的步驟包括以下子步驟將高擬合性數(shù)組的一部分與第二數(shù)組的一部分交換,其中隨機(jī)地選擇所述高擬合性數(shù)組的一部分與所述第二數(shù)組的一部分的開始點(diǎn)。
12.如權(quán)利要求9所述的方法,其中,所述數(shù)組集作為矩陣存儲(chǔ)。
13.一種基于基因算法的方法,用于確定描述實(shí)際數(shù)據(jù)集的數(shù)學(xué)表達(dá)式,所述方法包括以下步驟遞歸地生成符號(hào)序列的群體的一系列世代,其中每一符號(hào)序列表示數(shù)學(xué)表達(dá)式;對(duì)于每一世代,確定每一符號(hào)序列是否可轉(zhuǎn)譯為有生存力的程序,其通過(guò)對(duì)于每一符號(hào)序列初始化所需長(zhǎng)度變量;從每一序列的第一符號(hào)開始,并且對(duì)于每一序列內(nèi)的一系列第k個(gè)符號(hào)將所需長(zhǎng)度變量增加根據(jù)語(yǔ)法規(guī)則使用所述第k個(gè)符號(hào)組成有生存力的操作所必需的符號(hào)的數(shù)目;如果所需長(zhǎng)度變量在增加后等于k,報(bào)告有效語(yǔ)法;和如果所需長(zhǎng)度變量在增加到k時(shí)超過(guò)最大序列長(zhǎng)度,報(bào)告無(wú)效語(yǔ)法。
14.如權(quán)利要求13所述的方法,其中,所述的遞歸地生成一系列世代的步驟包括以下子步驟在一個(gè)或多個(gè)符號(hào)序列中隨機(jī)地改變符號(hào)。
15.如權(quán)利要求13所述的方法,其中,所述的遞歸地生成以系列世代的步驟包括以下子步驟隨機(jī)地選擇一個(gè)或多個(gè)點(diǎn),其定義符號(hào)序列的邊界,以在所述群體中的符號(hào)序列之間進(jìn)行交換。
16.一種包含編程指令的計(jì)算機(jī)可讀介質(zhì),其用于確定描述實(shí)際數(shù)據(jù)集的數(shù)學(xué)表達(dá)式,其包括以下編程指令生成數(shù)學(xué)表達(dá)式表示的初始群體,其包括多個(gè)素?cái)?shù);和從所述初始群體進(jìn)化一系列后繼世代。
17.如權(quán)利要求16所述的計(jì)算機(jī)可讀介質(zhì),其中,所述的進(jìn)化后繼世代的編程指令包括以下編程指令從預(yù)先確定的素?cái)?shù)列表中選擇所述的多個(gè)素?cái)?shù)。
18.如權(quán)利要求16所述的計(jì)算機(jī)可讀介質(zhì),其中,所述的進(jìn)化后繼世代的編程指令包括以下編程指令對(duì)于多個(gè)后繼世代,通過(guò)引入一個(gè)或多個(gè)素?cái)?shù)的表示,從所述數(shù)學(xué)表達(dá)式表示的當(dāng)前群體突變一個(gè)或多個(gè)數(shù)學(xué)表達(dá)式表示。
19.如權(quán)利要求16所述的計(jì)算機(jī)可讀介質(zhì),其中,所述的進(jìn)化后繼世代的編程指令包括以下編程指令對(duì)于多個(gè)后繼世代生成一組實(shí)現(xiàn)數(shù)學(xué)表達(dá)式的程序,所述數(shù)學(xué)表達(dá)式表示在當(dāng)前世代的數(shù)學(xué)表達(dá)式表示的群體中;為一個(gè)或多個(gè)測(cè)試數(shù)據(jù)集執(zhí)行所述程序集中的一個(gè)或多個(gè),以獲得與所述程序集中的所述一個(gè)或多個(gè)相對(duì)應(yīng)的一個(gè)或多個(gè)結(jié)果;從所述一個(gè)或多個(gè)結(jié)果導(dǎo)出所述程序集中的所述一個(gè)或多個(gè)的一個(gè)或多個(gè)擬合性指示;基于所述擬合性指示,從所述當(dāng)前世代的所述數(shù)學(xué)表達(dá)式表示的群體中選擇一個(gè)或多個(gè)所述表示,以在后繼世代中進(jìn)行復(fù)制;在所述后繼世代中的表示對(duì)之間進(jìn)行一個(gè)或多個(gè)交換操作。
20.如權(quán)利要求19所述的計(jì)算機(jī)可讀介質(zhì),其中,所述的進(jìn)化后繼世代的編程指令進(jìn)一步包括以下編程指令對(duì)于所述多個(gè)后繼世代中的一個(gè)或多個(gè),通過(guò)引入一個(gè)或多個(gè)素?cái)?shù)的表示,從所述數(shù)學(xué)表達(dá)式表示的所述當(dāng)前群體突變一個(gè)或多個(gè)數(shù)學(xué)表達(dá)式表示。
21.如權(quán)利要求16所述的計(jì)算機(jī)可讀介質(zhì),其中,數(shù)學(xué)表達(dá)式表示的所述初始群體包括索引數(shù)組集,其中多個(gè)所述數(shù)組包括一組表示數(shù)學(xué)表達(dá)式的索引;和多個(gè)所述索引指示從包括操作符與操作數(shù)的組中選擇的元素。
22.一種包含編程指令的計(jì)算機(jī)可讀介質(zhì),其用于確定描述實(shí)際數(shù)據(jù)集的數(shù)學(xué)表達(dá)式,其包括以下編程指令遞歸地生成一系列數(shù)學(xué)表達(dá)式表示的群體,其中每個(gè)表示包括從操作符集中選擇的一個(gè)或多個(gè)操作符的標(biāo)識(shí);和從包括常數(shù)與變量的操作數(shù)集中選擇的一個(gè)或多個(gè)操作數(shù)的標(biāo)識(shí);其中,所述操作數(shù)集中的每一操作數(shù),以及所述操作符集中的每一操作符與一成本相關(guān)聯(lián);對(duì)于所述群體系列中的每第k個(gè)群體,生成一組實(shí)現(xiàn)數(shù)學(xué)表達(dá)式的程序,所述數(shù)學(xué)表達(dá)式表示在所述的第k個(gè)表示群體中;通過(guò)包括以下步驟的過(guò)程,為所述程序集中的每一程序?qū)С龅谝粩M合性測(cè)度在一個(gè)或多個(gè)測(cè)試數(shù)據(jù)集上運(yùn)行所述程序,并比較輸出值與預(yù)先確定的值,以獲取殘留誤差的測(cè)度;通過(guò)包括以下步驟的過(guò)程,為所述程序集中的每一程序?qū)С龅诙M合性測(cè)度對(duì)所述程序內(nèi)的每一操作符與操作數(shù)的成本求和;和在每一后繼世代中,基于所述第一與第二擬合性測(cè)度,選擇性地復(fù)制數(shù)學(xué)表達(dá)式個(gè)體表示。
23.如權(quán)利要求22所述的計(jì)算機(jī)可讀介質(zhì),其進(jìn)一步包括以下編程指令組合所述第一擬合性測(cè)度與所述第二擬合性測(cè)度,以獲取總的擬合性測(cè)度。
24.一種包含編程指令的計(jì)算機(jī)可讀介質(zhì),其用于確定描述實(shí)際數(shù)據(jù)集的數(shù)學(xué)表達(dá)式,其包括以下編程指令將一系列數(shù)學(xué)表達(dá)式群體中的每一個(gè)表示為索引數(shù)組集,其中每一數(shù)組表示數(shù)學(xué)表達(dá)式,且一個(gè)或多個(gè)索引指向從包含操作符與操作數(shù)的元素組中選擇的表達(dá)式元素的表示;對(duì)于所述系列群體中的每第k個(gè)群體生成實(shí)現(xiàn)所述數(shù)學(xué)表達(dá)式的程序,所述數(shù)學(xué)表達(dá)式由所述群體中的每一數(shù)組表示;導(dǎo)出每一生成的程序的擬合性測(cè)度;基于所述擬合性測(cè)度,選擇一個(gè)或多個(gè)高擬合性數(shù)組,以繼續(xù)到第(k+1)世代;在所述的繼續(xù)到第(k+1)世代的高擬合性數(shù)組中的一個(gè)或多個(gè)之間進(jìn)行交換操作。
25.如權(quán)利要求24所述的計(jì)算機(jī)可讀介質(zhì),其中,每一索引指向面向?qū)ο蟮木幊陶Z(yǔ)言的類的實(shí)例,所述類封裝從包括操作符與操作數(shù)的組中選擇的元素的標(biāo)識(shí)。
26.如權(quán)利要求25所述的計(jì)算機(jī)可讀介質(zhì),其中,所述的進(jìn)行交換操作的編程指令包括以下編程指令將高擬合性數(shù)組的一部分與第二數(shù)組的一部分交換,其中,隨機(jī)地選擇所述高擬合性數(shù)組的一部分與所述第二數(shù)組的一部分的開始點(diǎn)。
27.如權(quán)利要求25所述的計(jì)算機(jī)可讀介質(zhì),其中,所述數(shù)組集作為矩陣存儲(chǔ)。
28.一種包含編程指令的計(jì)算機(jī)可讀介質(zhì),其用于確定描述實(shí)際數(shù)據(jù)集的數(shù)學(xué)表達(dá)式,其包括以下編程指令遞歸地生成符號(hào)序列的群體的一系列世代,其中,每一符號(hào)序列表示數(shù)學(xué)表達(dá)式;對(duì)于每一世代,確定每一符號(hào)序列是否可轉(zhuǎn)譯為有生存力的程序,其通過(guò)對(duì)于每一符號(hào)序列初始化所需長(zhǎng)度變量;從每一序列的第一符號(hào)開始,并且對(duì)于每一序列內(nèi)的一系列第k個(gè)符號(hào)將所需長(zhǎng)度變量增加根據(jù)語(yǔ)法規(guī)則使用所述第k個(gè)符號(hào)組成有生存力的操作所必需的符號(hào)的數(shù)目;如果所需長(zhǎng)度變量在增加后等于k,報(bào)告有效語(yǔ)法;和如果所需長(zhǎng)度變量在增加到k時(shí)超過(guò)最大序列長(zhǎng)度,報(bào)告無(wú)效語(yǔ)法。
29.如權(quán)利要求28所述的計(jì)算機(jī)可讀介質(zhì),其中,所述的遞歸地生成一系列世代的編程指令包括以下編程指令在一個(gè)或多個(gè)符號(hào)序列中隨機(jī)地改變符號(hào)。
30.如權(quán)利要求28所述的計(jì)算機(jī)可讀介質(zhì),其中,所述的遞歸地生成一系列世代的編程指令包括以下編程指令隨機(jī)地選擇一個(gè)或多個(gè)點(diǎn),其定義符號(hào)序列的邊界,以在所述群體中的符號(hào)序列之間進(jìn)行交換。
31.一種在其上存儲(chǔ)數(shù)據(jù)結(jié)構(gòu)的計(jì)算機(jī)可讀介質(zhì),所述數(shù)據(jù)結(jié)構(gòu)包括面向?qū)ο蟮木幊陶Z(yǔ)言的類,其包括密碼子名稱實(shí)例變量;密碼子類型實(shí)例變量,其用于存儲(chǔ)第一數(shù)字,所述第一數(shù)字指示與所述密碼子名稱實(shí)例變量?jī)?nèi)指定的密碼子相關(guān)聯(lián)的密碼子的數(shù)目;密碼子值實(shí)例變量,其用于存儲(chǔ)與所述密碼子名稱實(shí)例變量?jī)?nèi)指定的所述密碼子相關(guān)聯(lián)的值;密碼子成本實(shí)例變量,其用于存儲(chǔ)第二數(shù)字,所述第二數(shù)字指示所述密碼子名稱實(shí)例變量?jī)?nèi)指定的所述密碼子指定的操作符或操作數(shù)增加數(shù)學(xué)表達(dá)式復(fù)雜性的程度;和密碼子索引實(shí)例變量,其用于存儲(chǔ)與所述的面向?qū)ο蟮木幊陶Z(yǔ)言的類的每個(gè)實(shí)例相關(guān)聯(lián)的索引。
全文摘要
本發(fā)明公開一種基因表達(dá)式編程基因算法,其用于進(jìn)行符號(hào)回歸。算法通過(guò)實(shí)行反向地依賴于數(shù)學(xué)表達(dá)式復(fù)雜性的擬合函數(shù),避免了表達(dá)式膨脹與過(guò)擬合。算法進(jìn)化的群體成員表示為引用操作數(shù)與操作符的索引的數(shù)組集(例如以矩陣的形式),從而便利了在進(jìn)化群體的過(guò)程中進(jìn)行的選擇、突變與交換操作。算法包括語(yǔ)法檢查部分[108、110、112],其可以施加于群體成員而不必將群體成員首先轉(zhuǎn)化為可執(zhí)行程序。提供面向?qū)ο蟮木幊陶Z(yǔ)言的數(shù)據(jù)結(jié)構(gòu),用于為算法使用的每一密碼子(例如操作數(shù)、操作符)封裝基本數(shù)據(jù)。
文檔編號(hào)G06F15/18GK1643509SQ03806264
公開日2005年7月20日 申請(qǐng)日期2003年3月12日 優(yōu)先權(quán)日2002年3月18日
發(fā)明者肖為民, 托馬斯·邁克爾·蒂爾帕克 申請(qǐng)人:摩托羅拉公司