2012-02-04 66 views
9

我只是看着丹尼·希利斯過時的1994年進化規劃

在視頻中的一個點一個很酷ted talk,他談到了「進化規劃」,即他要求通過生成隨機生成幾百個節目的電腦然後測試每個程序如何排序數字。他保留10%的數字排序最好的程序,然後根據10%的程序生成下一輪程序,這些程序運行良好並重復多次,最終生成最終的排序程序。

那裏有工具/編程語言嗎?例如。給定一定的約束,生成最能滿足這些約束條件的C代碼。

我訪問了一些與「進化規劃」相關的維基百科文章;那裏似乎有很多理論,但找到一些你可以玩的東西似乎並不容易。

回答

5

一個非常簡單和通用的免費下載源代碼是用Java實現的TinyGP。 順便說一句..有關這方面的更多細節,你應該搜索有關「遺傳編程」,而不是「進化規劃」的信息。它有點令人困惑,因爲有很多進化計算的子域,像「遺傳算法」,「進化策略」,「進化規劃」,「遺傳規劃」這樣的名字有很小的差異......但我認爲你我們討論的實際上是遺傳編程

3

一個實際例子:

Csmith是一種工具,可以生成靜態和動態適形於C99標準隨機C程序。它對壓力測試編譯器,靜態分析器和處理C代碼的其他工具非常有用。 Csmith在它測試過的每一個工具中都發現了錯誤,我們用它來查找和報告超過400個以前未知的編譯器錯誤。

+0

它無關,與進化計算 - 沒有選擇可言,在輸入csmith任何隨機程序是100%有效。 – 2012-02-06 09:03:55

+0

這取決於執行Csmith的驅動程序 - 自動選擇可以基於生成的代碼是否觸發可檢測的編譯器錯誤而發生;新的產出可以從頭開始產生,也可以通過對先前產出進行突變產生。 – smokris 2012-02-06 14:46:05

+0

這很有趣,我會試試看。我以前只使用完全隨機生成的代碼進行測試。 – 2012-02-06 17:56:11

3

典型的例子是TierraAvida

相關領域是硬件演化和演化機器人技術,例如參見this page

關於Mathematica中的進化計算,還有一個不錯的book

1

我討厭成爲一個不說話的人,但我們用進化編程做了一些測試,發現在很多問題上,窮舉搜索速度更快。

有密切相關的領域喜歡遺傳算法,我用它來使機器人走等我使用GALIB的。現在可能是古代了。

雖然這個想法是「酷」,但最好的方法可能是使用演化技術加上學習(即強化學習)的組合。

這更像是人類如何學習。長期的演變使得漸進的實驗成爲可能,而且學習可以解決問題並使系統適應環境。

但是,演化只是需要很長時間纔能有效。

+1

像MA一樣嗎? http://en.wikipedia.org/wiki/Memetic_algorithm – Alexander 2012-12-03 11:46:25

-1

可能是創建進化程序最通用的程序是彙編器。這是我所知道的唯一一種能夠覆蓋其他程序並更改自己的代碼的語言。你可能想看看舊的核心戰爭計劃 - 其中一個計劃的不同或更新版本可能會發展並擊敗競爭對手。此外,只要目錄數量有限,你就有可能適者生存。

+0

與彙編,你可以做的一切,但並不意味着它是易於使用......而且肯定是不是最好的解決方案(有很多的更強大的編程語言,如LISP或C,可用於這些目的)。 – 2013-03-20 14:43:49

2

生成程序的進化計算領域被稱爲遺傳編程(GP)。 GP模擬一代人的生物進化,通過許多代。通常,個體是一個程序(或其代表,通常是一個樹型數據結構),它的存活和複製的機會是根據其在解決任務中的表現來衡量的。

現在你不能爲日常任務生成實際的生產代碼,誠實地說。相反,GP和許多其他機器學習技術在現代研究中得到了研究,並被很多大公司(例如Google,Facebook等)使用。事實上,當你知道你想要目標程序要做什麼(即你知道輸入的輸出)時,GP方法是非常有用的,但你不知道如何(或者你很難)編寫代碼由你自己。

爲了正確理解這個話題,您可能需要從頭開始編寫演化引擎並與之一起玩。從理論描述開始編寫代碼是完美的。這是瞭解這些工作如何工作的最好方式,而不是使用一些「預製軟件」,即imho。另外,我建議你從遺傳算法(GA)開始,因爲它們通常比較簡單。事實上,在遺傳算法中,您通常會評估個體的基因型,即組成它們的位數,而在GP中,您可能想要將樹轉化爲程序,執行它們,查看輸出並最終測量它們的性能(不那麼直接,呃?)。看看這個:http://www.theprojectspot.com/tutorial-post/creating-a-genetic-algorithm-for-beginners/3

我做了碩士論文的實驗室證明GP在從文本提取的例子中生成正則表達式方面表現非常出色。他們建立一個圖形用戶界面,以便發揮他們的引擎:http://regex.inginf.units.it/demo.html。他們還在github上分享了引擎代碼:https://github.com/MaLeLabTs/RegexGenerator。 最後,我的一位朋友在他的博客中使用GP和GA(遺傳算法)編碼了一些有趣的視覺實驗。看一看:http://www.nicassio.it/daniele/gp/enviroment/http://www.nicassio.it/daniele/gp/santaclaus/