2010-08-13 36 views
12

進化計算中令人討厭的一件事是,輕度不同且重疊的概念傾向於選擇顯着不同的名稱。我最近的困惑是,基因表達編程似乎與笛卡爾遺傳編程非常相似。基因表達式編程與笛卡爾遺傳編程的區別

  1. (how)這些概念是否完全不同?
  2. 我讀過GP指令的間接編碼是一種有效的技術(GEP和CGP都是這樣做的)。是否已經達成某種共識,即間接編碼已經過時了經典樹基礎GP?

回答

7

嗯,這似乎是有基因表達式編程(GEP)和笛卡兒遺傳程序(CGP還是什麼我認爲作爲經典遺傳編程)之間存在一些差異,但差異可能比它更誇大了真的應該是。請注意,我從未使用過GEP,所以我的所有評論都基於我對CGP的經驗。

在CGP中,基因型和表型之間沒有區別,換句話說,如果您正在查看CGP的「基因」,您也正在查看它們的表達。這裏沒有編碼,即表達樹是基因本身。

GEPGEP將基因型表達爲一種表型,所以如果您在查看基因,您將不會輕易知道表達式的外觀。 GP的「發明人」CândidaFerreira撰寫了一份really good paper,其中有一些other resources試圖對整個概念進行簡要概述。 Ferriera說,好處是「明顯的」,但我真的沒有看到任何必然使GEP比CGP更好的東西。顯然GEP是多基因的,這意味着多個基因參與性狀表達(即表達樹)。在任何情況下,適應度都是在表達的樹上計算的,所以GEP似乎沒有做任何事情來增加適應度。作者聲稱GEP提高了適應速度(即更少的世代),但坦率地說,你可以看到CGP的巨大性能轉變,只是通過具有不同的選擇算法,不同的錦標賽結構,部落之間人口成部落,遷移標本,其中包括分集到健身等

選擇:

    隨機
  • 輪盤
  • 頂部正

錦標賽頻率取:每每一個數據實例

  • 每代一次

    • 每一次劃時代
    • 一次。

    錦標賽結構:

    • 取3,殺死1,並與其他兩個孩子更換。
    • 通過健身對比賽中的所有人進行排序,殺死下半身並將其替換爲上半部分的後代(其中較低的健身和較高的健身較好)。
    • 從比賽中隨機挑選個人配對並殺死多餘的個人。

    部落
    羣體可被分成獨立發展的每其他部落:

    • [遷移週期性地從一個部落個體(一個或多個)將被移動到另一部落
    • 這些部落在邏輯上是分開的,這樣他們就像他們在不同的環境中運行的獨立人羣。

    多樣性健身
    納入多樣性納入健身,你算多少人有相同的健身價值(因而很可能有相同的表型),你通過一個比例值懲罰他們的健身:在具有相同適應值的更多個體,對這些個體更多的懲罰。這樣,將鼓勵具有獨特表型的標本,因此人口停滯的情況會更少。

    這些只是一些可以極大地影響CGP性能的事情,當我說得很重要時,我的意思是它的排列順序要比Ferriera的性能要好。所以,如果Ferriera沒有太多的鼓勵這些想法,那麼她可能會看到CGP的表現慢得多......特別是如果她沒有采取任何措施來阻止停滯。因此,在閱讀GEP的績效統計數據時,我會小心謹慎,因爲有時候人們無法解釋所有可用的「優化」。

  • +0

    非常感謝您的詳細解答!非常感激。 – Jelle 2010-08-15 09:15:22

    +0

    這個答案不正確。笛卡爾GP與傳統GP不一樣。笛卡爾GP也具有間接表示(與GEP類似),並且不是基於樹的,即使您最終構建的圖形與傳統GP樹相似。 – rll 2015-08-12 14:46:39

    2

    一般來說,GEP比GP更簡單。假設您允許程序中使用以下節點:常量,變量,+, - ,*,/,如果... 對於每個具有GP的節點,您必須創建以下操作: - randomize - mutate - 交叉 - 也可能是其他遺傳算子

    在GEP中,每個這樣的節點只需要執行一個操作:反序列化,它接受數組數組(如C或Java中的double),並返回節點。它類似於Java或Python等語言中的對象反序列化(區別在於編程語言中的反序列化使用字節數組,這裏我們有數組數組)。即使這種「反序列化」操作也不一定要由程序員來實現:它可以通過一種通用算法來實現,就像它在Java或Python反序列化中所做的一樣。

    從一個角度來看,這種簡單性可能會使尋找最好的解決方案不太成功,但是從另一方面來看:程序員需要更少的工作,更簡單的算法可以更快地執行(更容易優化,更多的代碼和數據適合CPU緩存,等等)。所以我會說GEP稍微好一些,但是肯定的答案當然取決於問題,對於許多問題,情況可能相反。

    +0

    感謝iirekm,非常有見識! – Jelle 2010-12-20 18:25:00

    2

    這些答案似乎有一些混淆,必須澄清。笛卡爾GP不同於傳統的GP(又名基於樹的GP)和GEP。儘管它們有着許多概念並從相同的生物機制中獲得靈感,但個體的表徵(解決方案)各不相同。表示(基因型和表型之間的映射)是間接的,換句話說,並不是CGP基因組中的所有基因都將在phenome中表達(這一概念也見於GEP和許多其他)。基因型可以用網格或節點數組編碼,生成的程序圖只是活動節點的表達式。

    GEP該表示也是間接的,並且同樣不是所有的基因都將在表型中表達。這種情況下的表示與treeGP或CGP有很大不同,但基因型也表示爲程序樹。在我看來,GEP是一種更優雅的表示形式,更容易實現,但也存在一些缺陷,例如:您必須找到合適的尾部和頭部大小,這是特定問題,這種基因型版本是表達式樹之間的一種強制粘合,最後它有太多bloat

    在某些特定問題域中,哪個表示可能比其他表示更好,它們是通用目的,只要可以對其進行編碼就可以應用於任何域。