解決數獨問題用人工智慧還是量子計算?

2020-09-24 deephub


作為一種有趣的棋盤遊戲,數獨誕生100周年之後,它是如何成為計算研究的焦點之一的呢?探索如何使用人工智慧或量子計算機從頭開始創建一個智能數獨求解器。


在深入探究之前,先來了解一下歷史

馬克•布洛赫說:&34;那麼,讓我們來談談著名的數獨遊戲是如何誕生的吧。這個故事可以追溯到19世紀末,起源於法國。法國日報《世紀報》(Le Siecle)發布了一款9x9大小的猜謎遊戲,它需要算術運算而不是邏輯運算,它的數字是兩位數,而不是1- 9。它的遊戲性質與數獨遊戲(Sudoku)類似,即把橫排、列和對角線的數字相加,也會得到相同的數字。1979年,退休的建築師和puzzler Howard Garns被認為是現代數獨遊戲的創造者,該遊戲以數字地名的名義首次在戴爾雜誌上發表。1986年,日本一家名為Nikoli的拼圖公司首次以Sudoku的名字出版了這個拼圖。


在解決數獨遊戲的問題框架

數獨是一個約束滿足問題(CSP)的真實例子,因為變量集、域集和約束集都是有限的。我們必須在一個9x9表中輸入1-9之間的數字,這樣每一行、每列和每3x3子表中的數字都只包含一個數字。 Sudoku也存在另一種變化,即Diagonal Sudoku,它在表對角線的每個對角線中都規定了一組額外的約束,每個數字必須準確地具有一次特徵。 我們知道約束滿足域,最優解必須滿足所有約束,或更具體地說,它應該遵守遊戲規則。 最優解將滿足集合中的所有約束,從而解決難題。

計算上,可以用非確定性多項式時間(NP)解決求解數獨的約束,因為可以使用一些非常特殊的蠻力算法來解決約束,並且也可以在多項式時間內測試解集的有效性,其中輸入 該問題與多項式長度的一組解有關。 完全解決的數獨就是拉丁方格的示例(如Euler所述,n x n數組填充有n個不同的符號)。 數獨問題可以認為是圖形著色問題,其中我們僅需要使用9種顏色對圖形進行著色,而裸露的字母可以認為是部分顏色。

使用人工智慧算法集滿足約束

計算科學的基本原理是依靠邏輯來滿足某些約束的能力。 在解決數獨問題時,我們必須訓練求解器以尋找除基本規則外的一些特定的獲勝模式。 因此,問題在於系統不僅在盲目地遵循規則,而且在考慮其近期和長期影響的同時做出一些決策。 這些模式稱為啟發式。 類似於巧遇遊戲知識和技巧的專家玩家,僅了解基本規則並不能使他們成為遊戲專家。 因此,當我們開發算法並解決問題時,我們必須牢記有用的啟發式方法,我們還應將其包含在程序中,以使其在獲勝時變得更聰明,更有用。

對於我們的Sudoku Solver,我們將輸入81個數字的序列作為字符串,並用&39;(句號)表示未解決的數字。 為了解決該問題,我們將&34;替換為可以放入該單元格的所有可能數字。

根據數獨的限制,我們不能在任何單元格附近的行,列或3x3子正方形中多次使用一個數字。 在對角數獨的情況下,我們還必須考慮相同的約束。 我們首先用所有可能的數字1到9替換句點。我們使用以下grid_values函數以編程方式進行此操作。

39;ABCDEFGHI&39;123456789&every possible cell combination in the grid.def grid_values(grid): &34;&34;&34; values = [] every_digits = &39; for n in grid: if c == &39;: if already solved, causing it no change. values.append(c) assert len(values) == 81 return dict(zip(boxes, values)) reversing the columns for calculating the Diagonal Units.def make_combinations(m, n): &34;&34;&34; return [x + y for x in m for y in n]row_units = [make_combinations(r, columns) for r in rows]column_units = [make_combinations(rows, c) for c in columns]sub_square_units = [make_combinations(m, n) for m in (&39;, &39;, &39;) for n in (&39;,&39;,&39;)]diagonal_1_units = [[rows[i]+columns[i] for i in range(len(rows))]]diagonal_2_units = [[rows[i]+columns_reversed[i] for i in range(len(rows))]]diagonal_units = diagonal_1_units + diagonal_2_unitsall_units = row_units + column_units + square_units + diagonal_unitsunits = dict((b, [u for u in all_units if b in u]) for b in boxes)peers = dict((b, set(sum(units[b], [])) - {b}) for b in boxes)def eliminate(values): &34;&34;&34; solved_cells = [box for box in values.keys() if len(values[box]) == 1] 39;s only one digit for box in solved_cells: value_at_cell = values[box] check for the cell&39;& return the modified values dictionary.

因此,在滿足這些約束的同時,有時我們會遇到一些只能放置一個數字的單元格,但除該數字外,其他數字對於該特定單元格都不再可行。 我們首先要填寫這些內容。 有了適當的解決方案。 我們稱此為&34;,它是解決數獨網格單元的最簡單的啟發式方法。

def only_choice(values): &34;&34;&34; for unit in all_units: 39;123456789& if there exists only a single cell in the unit which is not solved values[to_be_filled[0]] = digit 34;&34; If there are two unsolved cells in a same unit exist such that it can only be filled by only two specific digits, then those two digits can be safely removed from all other cells in the same unit. &34;&confimed Naked Twins for twin in twins: unit1 = twin[0] unit2 = twin[2] peers1 = set(peers[unit1]) peers2 = set(peers[unit2]) common_peers = peers1 & peers2 39;& Erasing the values. return values

現在,我們嘗試通過重複應用這三個約束滿足算法並檢查它是否卡住並且無法進一步減少,來儘可能地減少難題。 我們通過使用reduce_puzzle函數以編程方式執行此操作。 我們要做的是在for循環中調用前三個函數,並在網格值的輸入和輸出序列中的已解決單元數相同時終止該函數,這意味著不能再進一步減小它 僅約束滿足算法。

def reduce_puzzle(values): &34;&34;&34; solved_values = [unit for unit in values.keys() if len(values[unit]) == 1] boolean flag to determine the end of loop while not stuck: prev_solved_values = len([unit for unit in values.keys() if len(values[unit]) == 1]) applying Elimination CSP values = only_choice(values) applying Naked Twins CSP after_solved_values = len([unit for unit in values.keys() if len(values[unit]) == 1]) stuck = after_solved_values == prev_solved_values if there& return the reduced grid values.

如果數獨網格仍未通過約束滿足問題解決,則部分解決方案將到達輸出,其中一些單元格仍將分配給某些可能的值。 在這種情況下,我們要做的是使用搜索樹搜索那些位置中的最佳數字集。 我們使用深度優先搜索(DFS)算法遍歷搜索樹。 因此,基本上,使用DFS,我們用相同的網格創建了幾個實例,並為每個尚未解決的單元嘗試了不同的可能分配。 我們遞歸地要求CSP算法根據搜索結果減少網格。 我們以編程方式實現它,如下所示:

def search(values): &34;&34;&34; values = reduce_puzzle(values) 34;Sudoku Problem Solved!&34;&34; Display the values as a 2-D grid. Input: The sudoku in dictionary form &34;&39;+&39;-&39;&39;|&39;36&39;&39;CF&34;__main__&39;2.............62....1....7...6..8...3...9...7...6..4...4....8....52.............3&34;量子模擬退火&34;組合&34;{row}, {col}_{digit}&39;r&39; &34;Error in row&34;Error in column&39;Error in sub-square&34;__main__": main()

就是這樣。 我們已經成功實現了兩種智能解決方案,其中一種使用經典計算,並且使用了功能非常強大的人工智慧啟發式算法,甚至可以解決對角數獨網格。 第二種方法使用異步混合啟發式採樣器,該採樣器也恰好使用絕熱量子計算模型的模擬退火來將約束滿足問題轉換為二進位二次模型以對其進行採樣,從而獲得最佳採樣解。


作者:Swastik Nath

deephub翻譯組

相關焦點

  • 量子計算獲得突破性進展,人工智慧「奇點」提前?
    這個定律一直對傳統計算有著重大意義,但最近幾年,依照摩爾定律發展的信息技術進步的速度正在逐漸減慢,尤其是在人工智慧領域,摩爾定律顯而易見地逐漸失效,中科院院士杜江峰曾在去年發表言論,稱摩爾定律最多還能使用10年。在這種情況下,量子計算的作用得以發揮。傳統計算幾十年才能解決的數據問題,量子計算可能只需1秒就搞定。
  • 量子計算未必會改變人工智慧:量子的水很渾,需要先沉澱
    量子計算與人工智慧的結合,可能造就更強大的AI是一個美好的願景。但目前不應過分的炒作與追捧:量子的水很渾,需要先沉澱。無論是弱人工智慧還是強人工智慧,採用量子計算都不是什麼好的方案。因為量子疊加的計算方式在人工智慧的解決方案中用處不大。
  • 量子計算和人工智慧的最佳時機相遇
    人工智慧機器學習技術可用於解決量子信息問題,並可幫助量子物理學家前進。處理許多複雜的量子物理數據分析,例如識別相變的機器學習,用於實現量子狀態分類的神經網絡,用於海水量子通道重建的凸優化等。另一方面,當前也受到廣泛關注的方向是如何利用量子計算技術促進人工智慧的發展。
  • 全程燒腦幹貨,當人工智慧遇見量子計算
    【IT168 評論】去年三月,阿里巴巴宣布啟動「NASA」計劃,說要組建獨立的研發部門,為服務20億人的新經濟體儲備核心科技,解決10年、20後的困難。量子計算就被阿里視為能「解決20年後計算資源稀缺的秘密武器」,將應用於目前無法處理的重大科技難題上,其中包括通用人工智慧的市場化、癌症的治療計劃等等。
  • 人工智慧、量子計算,為區塊鏈帶來了新曙光
    畢竟,對於開發者來說,證明自身價值的最好方法,就是用代碼解決問題,此次的Blockworld大會無疑為他們提供了方向。 來自量子計算的衝擊 如今的區塊鏈底層技術和安全問題,毫無疑問正在受到行業外的其他技術挑戰,比如說物理學科領域的量子計算。
  • 量子計算+人工智慧?量子智能或將定義人類未來社會的技術圖景
    同樣命運的還有量子計算,當一系列需要超級計算能力的科學問題急需解決的時候,量子計算+人工智慧也許將是這些問題的解決之道,是人類未來社會的科技圖景,更是21世紀最具顛覆性的技術成就。由於它是在量子狀態,而非人類可讀的數據狀態下運行,所以這之間緩慢的轉換速度足以抵消不少優勢。就好比用一個最新的手機上網,卻還用著2G網絡,結果就是像用舊手機一樣慢。量子神經元無論是經典神經網絡還是量子神經網絡,主要工作都是要識別圖樣。受人腦啟發,它被設計為由基本計算單位「神經元」組成的網格。
  • 量子計算將永遠改變人工智慧的四種方式
    量子計算機將具有驚人的強大功能,比當今的狀態運行速度快上億倍。儘管量子計算將在AI上結合的程度,尚待爭論,但許多專家現在懷疑量子計算肯定會在一定程度上改變AI。在經典計算中,由於編程時使用了計算機語言(AND,OR NOT),我們知道如何解決問題。」 「在位計算中不可行的操作可以用量子計算機來執行。在量子計算機中,可以用N個量子位創建的所有數量和可能性都被疊加(如果有3個量子位,則將同時存在8個可能的排列。)使用1000個量子位,指數可能性遠遠超過了我們在傳統計算中的可能性。
  • 量子糾纏是一個量子計算需要解決的問題
    量子糾纏是一個量子計算需要解決的問題。dancatmull(2018)博士表示,在所有的計算問題中,能利用量子糾纏系統都屬於「超問題」,而非「「非問題」。這意味著,量子計算機不能夠模仿真實世界中的實際數據.事實上,在所有研究的可行性、準確性和可行性方面,沒有一種方法可以被證明可以像模擬神經元那樣模擬量子系統。儘管如此,量子計算正在投入市場。量子計算需要經驗積累。相對來說,大數據存儲的量子系統將需要一個3-5年的正向使用壽命,而小數據量子系統需要6-8年的使用壽命。量子計算需要利用不確定性規則。
  • 18歲華裔大學生證明量子計算在推薦問題上沒什麼用
    【環球網科技頻道8月3日綜合報導】經過幾十年的研究之後,量子計算在人工智慧時代迎來春天。結合了人工神經網絡的量子計算可以滿足機器學習的計算需求,提供傳統計算機無法匹敵的性能表現、比傳統計算機快得多地解決問題。目前全球範圍內已經掀起量子計算的熱潮。
  • 人工智慧?量子計算?沈向洋王海峰等大咖最關心哪些前沿技術
    人工智慧?量子計算?我覺得還是非常值得去關注的。每當一個行業在技術上到了平臺期之後,還是會特別關注,這是我個人的興趣所在。百度CTO王海峰:我思考最多的還是跟人工智慧相關的,人工智慧包括技術方面和產業方面。技術方面,我們已經在做技術不斷的提升,比如圍繞深度學習。另一方面我們也在看深度學習本身還有哪些局限,朝哪些方向突破。因為深度學習需要耗費巨大的算力和巨大的數據,我們也關注小數據低能耗的技術和未來的突破方向。
  • 用量子計算機解決材料問題 | 章魚通
    Quantum計算機具有巨大的潛力,可以利用新的算法進行計算,並涉及遠遠超過當今超級計算機容量的大量數據。雖然這些計算機已經建成,但仍處於起步階段,對解決材料科學和化學方面的複雜問題的適用性有限。例如,它們只允許為材料研究模擬幾個原子的特性。
  • 科學不避爭論:眾學者激辯量子計算九大問題
    直面爭議還是忽略質疑?「九章」論文的作者們選擇了前者。日前,在知識分子、賽先生和墨子沙龍共同組織的直播中,「九章」論文通訊作者潘建偉、陸朝陽就相關質疑進行了解答,並與來自量子科學、計算機、人工智慧等領域的學者就量子計算的現狀與未來等問題展開討論。
  • ASC20超算大賽比試量子計算模擬和人工智慧英語考試
    今年的大賽賽題包括使用經典超級計算機完成量子計算模擬和訓練人工智慧模型完成英語考試試題,這些來自科學研究前沿的賽題對來自世界各國 300多支參賽高校隊伍將是前所未有的巨大挑戰。通過預賽選拔出的20支隊伍將進入到4月25日-29日在位於中國深圳的南方科技大學舉行的總決賽。
  • 人工智慧可以為我們做什麼?搭載量子計算"這艘發展飛船"
    可以說,美國對量子網際網路的希冀不亞於此前的經典網際網路,甚至認為現階段的量子信息科學的發展類似於「經典網際網路的前夜」。量子計算成為了全球範圍內大國必備的科研戰略,其重要性與日俱增。實現AI重要突破的關鍵技術目前來看,量子計算比較有前景和「錢景」的領域之一是人工智慧。
  • 智能醫療:量子計算/人工智慧等將成為未來醫學的重點
    會議期間,廣東省人民醫院黨委書記耿慶山分享了「基於大數據的未來醫學」,在其看來,量子計算、人工智慧、醫療機器人、3D列印等十大技術領域都將成為未來醫學的重要發展方向。  據了解,未來量子計算在醫療領域的應用主要是服務於大數據下的精準醫療發展。
  • 國內量子計算頂級大佬幫你解開對量子計算的困惑
    利用量子計算和人工智慧,我們有可能搭建一個足以匹敵人類大腦的系統,利用我們的知識,創造新的智慧。目前,世界各地的相關研究團隊在探尋未來量子計算與人工智慧的交叉方向。量子人工智慧的計算能力為人工智慧發展提供革命性的工具,能夠指數加速學習能力和速度,促進AI應用發展。而利用人工智慧技術(如深度學習框架)也可能突破量子計算研發的瓶頸。
  • 數獨競賽題小遊戲 數獨快速計算公式解題方法
    數獨的元素 數獨的元素主要包括行、列和宮。這三者劃分出數獨有三種不同形態的區域,而數獨規則就是要求在這些區域內出現的數字都為1~9。 元素坐標圖: 行:數獨盤面內橫向一組九格的區域,用字母表示其位置; 列:數獨盤面內縱向一組九格的區域
  • 人工智慧的下一個飛躍:量子計算機與人工智慧的結合
    我覺得量子計算機應該能夠以量子計算的形式維持多年的運轉,有比特這樣的特性。可以說,量子計算機的計算模型是不同於常規計算機有所不同的模型。我們已經設計出相關的模型,這些模型可以在算法設計的過程中優化量子計算機的性能,從而我們可以知道努力的方向在哪裡,尤其是在工程建設方面。當然這存在爭議,比如到底是退火器還是模擬器更適用於量子計算機?
  • 量子計算,巨頭如何布局?
    而量子計算中提出的大數質因子、隨機資料庫搜索就很好的解決了這兩個問題,能夠應用於複雜的大規模數據處理與計算難題。科學家預測,經典計算機未來仍將承擔收發郵件、視頻音樂、網路遊戲等功能,而量子計算機則將用於解決大型分子模擬、尋找大數質因數等經典計算機無法模擬的領域,並在 AI計算領域對傳統算力進行提升。
  • 前途無量的量子計算
    對照於傳統的通用計算機,其理論模型是通用圖靈機;而通用的量子計算機,其理論模型即是用量子力學規律重新詮釋的通用圖靈機。1982年,美國著名物理學家理察·費曼教授提出了量子計算的概念,並指出以量子力學為基礎的計算機在處理特定問題時,具有遠超傳統計算機的能力優勢。90年代先後誕生了著名的Shor分解算法、Grover搜索算法等,為後來量子計算技術的發展奠定了重要的理論基礎與實踐基石。