<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

組合29個簡單Python代碼塊,自動發現新算法

DPVg_AI_era ? 來源:lp ? 2019-04-19 13:47 ? 次閱讀

英特爾的研究人員提出一種新的自動算法生成器(AAD),利用演化算法框架,以Python語言的基本子集作為語法架構,能夠對29個數組/向量問題的代碼塊進行組合,通過學習,自動生成更復雜問題的解決方案。

本文介紹一種自動算法發現器(AAD),這是一種用于合成高復雜度計算程序的演化算法框架。此前的演化算法依賴于客觀的適應函數,這在給算法設計上增加了難度。

本文提出的AAD采用問題式引導演化過程(PGE),這需要將一組問題一起引入,針對更簡單問題發現解決方案,用于解決同一組問題中的更復雜的問題。PGE還支持幾種新的進化策略,并自然地應用于高性能計算(HPC)技術。

AAD可以為29個數組/向量問題生成Python代碼,范圍從min,max,reverse到更具挑戰性的問題,如排序和矩陣向量乘法。此外,AAD顯示出對受限環境/受限輸入的強適應性,以及針對“開箱即用”的問題的解決能力。

AAD是將相對簡單的問題解決組件自動組合程序,可以實現搜索由這些組件的所有可能排列所組成的整個空間,然后尋找滿足給定要求的解決方案。目前已經提出了許多這樣的搜索策略(例如枚舉,基于演繹,約束求解,隨機)來應對這類挑戰。

使用AAD的分類算法代碼塊示例

本文提出了一種基于演化算法的搜索策略,將其AAD中實現。AAD可以基于Python的子集作為語法結構,組合成復雜度相對較高的程序(循環,嵌套塊,嵌套函數調用等),并生成可執行的Python代碼。在本文中使用AAD來發現數組/向量問題的算法解決方案。

總的來說,AAD實現了以下目標:

使用問題導向型的演化策略來消除算法中的目標函數。

使用多樣化的演化策略(多環境解決方案,異花授粉和聯合演化),并通過廣泛的實驗評估其有效性。

利用AAD解決通用Python語言中的29個數組/向量問題,表明演化算法能夠解決復雜的新問題。

支持循環模塊,可以發現任何(非零)輸入的算法。

AAD結構設計方案和原理

AAD主要架構示意圖,主要由問題生成器、解決方案生成器和檢測器組成

問題生成器(ProbGen)

我們想要解決的每個問題都從問題生成器開始。這部分負責:(1)指定輸入和輸出的數量和類型。(2)為給定的問題生成輸入。例如,對于最大查找(Max),問題生成器指定Max將一個數組作為輸入,并生成一個數字作為輸出。另外,當請求為大小為N的問題生成輸入時,會產生一個由N個數字組成的輸入數組。

檢測器(Checker)

檢測器負責接受/拒絕為給定問題生成解決方案。檢測器使用問題生成器生成的輸入執行生成的程序,并生成輸出。檢測器中包含接受/拒絕輸出的邏輯。因此,檢測器與給定的問題生成器對應,兩者齊頭并進。

檢測器不一定真正需要實現其想要發現的算法。比如,針對“排序問題”的檢測器不必對真的對輸入數組進行排序,而是可以比較輸出數組中的每兩個相鄰元素,并查看這兩個元素是否按預期順序排列。一旦檢測到未排序數據對,檢測器會做出“失敗”的聲明。如果每對相鄰元素都是有序的,并且輸出數組中包含的元素與輸入數組完全相同,則檢測器宣布可接受該解決方案。

解決方案生成器(SolGen)

SolGen主要由兩部分組成:(1)表達式/短語存儲,以及(2)演化器。

表達式/短語存儲器(ExpStore)

解決方案生成器使用語法構造源程序。AAD使用的Python語法子集存儲在ExpStore中,如表1所示。在AAD中,語法規則使用類型信息進行擴充。

AAD支持四種數據類型:數字(NUM),布爾數(BOOL),數組(ARR)和數組的數組(AoA),它們可以對矩陣進行建模。此外,表達式的每個操作數都標記為Consumer(只讀),Producer(只寫)或ProdCon(讀-修改-寫)。

演化器(Evolver)

演化器負責對表達式和短語進行組合,以生成程序(或函數),以解決問題生成器提出的問題。演化器分三個階段構建解決函數(SolFunc)。

階段1:構建解決函數

階段2:在“生產者”(只寫數據)和“消費者”(只讀數據)間建立聯系

階段3:操作和函數調用突變

檢查輸出

一旦解決函數構建出來,就會執行這個函數,使用Python的exec()函數生成輸出結果。檢測器負責檢查輸出,判定接受或拒絕輸出。如果第一個輸出被接受,則使用問題生成器生成的更多不同大小的、與輸入測試相同的解決函數。如果檢測器接受了所有測試,則該解決函數即被聲明為該問題的解決方案。上述三個階段構成了一個循序漸進的步驟。

上表所示為在問題集A中的調用者-被調用者的關系。比如SortDesc函數所在的行顯示,SortAsc在57%的解決方案中調用了Max函數,在14%的解決方案中調用了Min函數,以此類推。Min,Max和ReverseArr函數沒有調用任何其他函數。所有其他函數都依賴于一個或多個函數來得到解決方案,顯示出函數組合的重要性。

上表中列出了3組問題以及在基線方法下的步數表現,并將其與四種演化策略下的表現進行了對比。

未來前景與應用方向

從概念上講,AAD也可用于程序翻譯。對于用C語言,匯編語言甚至二進制語言編寫的程序,可以執行該實例作為AAD的檢測器來生成Python(或類似語言)代碼。這種方式與僅通過觀察另一個對象行為,來構建自身行為方式的機器學習算法類似。很明顯,本文中使用的Python代碼可以被視為“Python到Python”的翻譯,因為不同的檢測器對應了不同的Python實現。

AAD可能不僅僅是一個程序合成器。它還可以用來獲取機器的內在知識。通過調用-被調用關系圖和父子圖捕捉不同問題之間的內在關系。這些關系是由AAD本身發現的,并且可以被認為是不同操作之間的聯想記憶的一種表示,其形式與人類大腦構造和機制類似。

由于AAD可以通過引入越來越多的問題來增加知識儲備的擴展,通過適當的指導機制,就可以引導系統獲取大量技能(算法),并自己構建知識表示。就像我們在自己孩子還小時,向TA們提出許多問題和挑戰,目的是為了引導孩子們獲得大量技能和知識。

AAD是用于綜合高復雜度程序的演化框架,它以Python語言的基本子集作為語法架構。使用AAD能夠對29個數組/向量問題的代碼塊進行組合,其中既有最大值、最小值,矩陣翻轉這類簡單問題,也有更具挑戰性的問題,如排序和矩陣向量乘法等,對于輸入沒有大小限制。

我們評估了解決這些問題策略的有效性,并證明了AAD具備解決“開箱即用”問題的能力。為了應對復雜需求帶來的各種挑戰,AAD工具還能實現與高性能計算(HPC)技術的結合??偟膩碚f,與現有技術相比,采用PGE的演化算法能夠解決類似或更高復雜性的問題。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 算法
    +關注

    關注

    23

    文章

    4474

    瀏覽量

    91082
  • 生成器
    +關注

    關注

    7

    文章

    306

    瀏覽量

    20396
  • python
    +關注

    關注

    52

    文章

    4698

    瀏覽量

    83609

原文標題:英特爾“演化算法”新框架:29個Python代碼塊,自動生成新算法

文章出處:【微信號:AI_era,微信公眾號:新智元】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    KNN分類算法python代碼實現

    kNN分類算法Python實現
    發表于 06-05 12:02

    BP神經網絡算法 python實現

    直接上代碼是最有效的學習方式。這篇教程通過由一段簡短的 python 代碼實現的非常簡單的實例來講解 BP 反向傳播算法。
    發表于 12-29 14:06 ?2.1w次閱讀
    BP神經網絡<b class='flag-5'>算法</b> <b class='flag-5'>python</b>實現

    利用Python代碼自動搶火車票的原理以及代碼解析

    代碼用的Python+Splinter開發,Splinter是一個使用Python開發的開源Web應用測試工具,它可以幫你實現自動瀏覽站點和與其進行交互。Splinter執行的時候會
    的頭像 發表于 01-13 10:32 ?9035次閱讀
    利用<b class='flag-5'>Python</b><b class='flag-5'>代碼</b><b class='flag-5'>自動</b>搶火車票的原理以及<b class='flag-5'>代碼</b>解析

    蟻群算法python編程實現

    本文主要介紹了Python編程實現蟻群算法詳解,涉及螞蟻算法的簡介,主要原理及公式,以及Python中的實現代碼,具有一定參考價值。
    發表于 02-02 10:36 ?7302次閱讀
    蟻群<b class='flag-5'>算法</b><b class='flag-5'>python</b>編程實現

    python設計一個簡單推薦系統的資料和完整代碼

    本文檔的主要內容詳細介紹的是python設計一個簡單推薦系統的資料和完整代碼免費下載。
    發表于 03-30 09:32 ?14次下載

    10種頂流聚類算法Python實現(附完整代碼

    分享一篇關于聚類的文章:10種聚類算法Python代碼。
    的頭像 發表于 01-07 09:33 ?868次閱讀

    10種聚類算法Python代碼1

    分享一篇關于聚類的文章: **10種聚類算法Python代碼** 。文末提供`jupyter notebook`的完整代碼獲取方式。 聚類或聚類分析是
    的頭像 發表于 02-20 13:57 ?585次閱讀
    10種聚類<b class='flag-5'>算法</b>和<b class='flag-5'>Python</b><b class='flag-5'>代碼</b>1

    10種聚類算法Python代碼2

    分享一篇關于聚類的文章: **10種聚類算法Python代碼** 。文末提供`jupyter notebook`的完整代碼獲取方式。 聚類或聚類分析是
    的頭像 發表于 02-20 13:57 ?756次閱讀
    10種聚類<b class='flag-5'>算法</b>和<b class='flag-5'>Python</b><b class='flag-5'>代碼</b>2

    10種聚類算法Python代碼3

    分享一篇關于聚類的文章: **10種聚類算法Python代碼** 。文末提供`jupyter notebook`的完整代碼獲取方式。 聚類或聚類分析是
    的頭像 發表于 02-20 13:57 ?900次閱讀
    10種聚類<b class='flag-5'>算法</b>和<b class='flag-5'>Python</b><b class='flag-5'>代碼</b>3

    10種聚類算法Python代碼4

    分享一篇關于聚類的文章: **10種聚類算法Python代碼** 。文末提供`jupyter notebook`的完整代碼獲取方式。 聚類或聚類分析是
    的頭像 發表于 02-20 13:57 ?1058次閱讀
    10種聚類<b class='flag-5'>算法</b>和<b class='flag-5'>Python</b><b class='flag-5'>代碼</b>4

    [源代碼]Python算法詳解

    [源代碼]Python算法詳解[源代碼]Python算法詳解
    發表于 06-06 17:50 ?0次下載

    python怎樣運行代碼

    Python是一種廣泛使用的編程語言,用于開發各種類型的應用程序。它具有簡單易學的語法和強大的功能,可以用于編寫簡單的腳本、開發桌面應用、構建Web應用、進行科學計算等多種用途。在本文中,我們將詳細
    的頭像 發表于 11-22 10:31 ?719次閱讀

    python運行一次自動再次運行

    使用循環語句是最簡單的一種實現自動運行功能的方法。在Python中,可以使用while循環或for循環來實現。下面是一個使用while循環實現自動運行的例子: while True
    的頭像 發表于 11-23 15:52 ?579次閱讀

    python軟件怎么運行代碼

    Python是一種高級編程語言,它被廣泛用于開發各種類型的應用程序,從簡單的腳本到復雜的網絡應用和機器學習模型。要運行Python代碼,您需要一個P
    的頭像 發表于 11-28 16:02 ?592次閱讀

    python 排列組合c(m,n)怎么算

    排列組合是數學中的一個概念,用于計算從集合中選擇一定數量元素進行排列或組合的方法數。其中,C(m, n)表示從m個元素中選擇n個元素進行排列組合的方法數。 在Python中,可以使用標
    的頭像 發表于 11-29 16:36 ?849次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>