填數字遊戲解題機

BillySir發表於2021-07-31

填數字遊戲解題機

  它,是填數字遊戲解題機,是本人設計和製作的一種可以解決所有填數字遊戲的工具軟體。

  許多題目/遊戲都可以化成填數字遊戲。比如幻方、數獨、八皇后問題。他們的特點就是拿著一些卡片往一張地圖上面填,填了之後就不能移動了。填錯之後的移動卡片,不屬於這裡講的移動。另一類帶有移動的或者吃子的就不屬於填數字遊戲,比如華容道(一款遊戲)有移動,圍棋有吃子,象棋既有移動也有吃子。

  有了它,直接或者少量地擴充套件程式碼就能解決幾乎任意填數字遊戲,而且由於它採用高階思維,所以解題速度不會很慢。

它的解題思路是什麼?

  我們知道人腦的運算速度是很慢的,同時人腦也是很聰明的。比如說,像解數獨的時候,人會去尋求比較容易算的格子,然後再去推斷其他比較容易算的格子。還發明和應用了很多的法則,可以說這個思考過程是複雜而高階的。經過大自然的篩選和淘汰,證明這種思考方式是行之有效的。製作它的時候,希望模擬這種高階的思維方式。反之,越簡單的程式,執行的越快,但是就越接近於窮舉,在區域性看起來非常快,在整體就顯得非常慢了。找一千以內的某個整數,計算機解起來很簡單,把1000個數挨個試一遍就行了,而且速度很快。但是人,就不是這麼做。人會根據題目,對1000個數進行大量的排除,之後再對剩下的少量的數進行挨個的試。人的解題方式在解決答案的搜尋空間更大的題目的時候,更顯示出優勢。所以,在解決簡單問題的時候,區域性的快慢起了決定性的因素,而在解決複雜問題的時候整體的快慢才是關鍵所在。

  它的整體解決思路是在能應用高階思維的時候,都儘量的使用高階思維,實在不行了,再使用窮舉。也就是說窮舉是一種兜底的解決方式,是最後的選項。

  應用高階思維,主要在以下這幾點:

  1. 根據遊戲的規則,先排除掉在當前格不可能正確的數字,而不是不管規則把所有能填的數字,都在當前格試一下。
  2. 儘早的發現當前已填的數字的不合理性,減少不必要的,後續的嘗試。比如填上當前的數字,都符合規則的要求,但是後面的某些格,哪怕填上最小的數字(根據某條遊戲規則)都不夠小,那麼也就證明當前填的這個數字是不對的。
  3. 每次填了一格之後,可以決定接下來填哪一格。並且在後續的搜尋中,如果走進死衚衕也能夠正確地返回,即是正確的回溯。

為什麼要做它?

  玩程式設計十多年來,做過許多大大小小的演算法題。已經有點膩了,沒新鮮感了。再去寫程式解決具體的題目顯得有些沒意思。要做就做能解決很多題目的程式。

  窮舉是最容易想到的通用的解決方案,他解決一些很簡單的問題還行,解決一些稍微複雜的問題,就會由於需要的計算時間太長而放棄,比如需要計算200年。而人腦,會用以自己的方式去解決這些複雜的問題,有時候效果比計算機好很多。所以這個是我自己反思人腦解決問題的一個過程,並把思考的結果寫成程式。它的最大的難點在於需要提取通用的思維方式,而不能引入解決具體問題的特有方式。

目前還有哪些沒做好的?

  • 系統還沒有整合“填了當前這一格後,選擇接下來填哪一格”這個機制。
  • 如何使使用者在使用現有類解決具體問題的時候,寫的程式碼儘可能少。

如何下載和執行,如何修改程式碼解決具體的問題,原始碼下載,請到這裡 https://gitee.com/billysir/puzzle-solving-machine

相關文章