• 沒有找到結果。

梅姬之環(Rings of the Magi)遊戲的電腦解法研究

N/A
N/A
Protected

Academic year: 2021

Share "梅姬之環(Rings of the Magi)遊戲的電腦解法研究"

Copied!
25
0
0

加載中.... (立即查看全文)

全文

(1)

師大學報 tt 理與科技類 !弋圈。 l 年,47( 1)

,

41 吊自

梅姬之環 (Rings

ofthe

Magi) 遊戲的電腦解法研究

賴信全

林 )1頂喜

國立台灣師範大學資訊教育率 團立台灣師範大學資訊工程所

在本文中,我們嘗試利用電腦的高速連算能力及龐大的記憶空間,配合資料結構及適 當的演算法來求出梅姬之環 (Rings of the Magi) 遊戲各種盤面的可行解。一般人在玩此 遊戲時並無一定的規則可循,大多以直覺、本能判斷及經驗來求解,大多數人類的專注力 及推理力很難判斷下一步所有的狀況並記憶所有走過的盤面,而且也無法週詳的考慮如何 走對盤面的影響會有解或無解。而且此遊戲有許多盤面的解法步數極大,且盤面狀態總數 極為龐大,不能以暴力法或尋常方法搜尋求解,因此我們構思如何解決此困難的問題。在 此論文中,我們發展了一些有用的技術,目標是能求出一些矩形無障礙盤面的解答,並實 際搜寫程式測試,要求在可忍受的時間內求得可行解。希望拋磚引玉,藉此論文引起大家 對此問題進一步研究的興趣。 關鏈宇:暴力法避戲樹雜湊表

緒論

4-/

一、遊戲介紹:

梅姬之環 (Rings

of the

Magi) 被電腦遊戲世界

(Computer Gaming

World)選為 1996 年中的最好的益 智遊戲共享軟體,並同時被稱為共享軟體中“最易沈 j弱的 jfj1戲“ o Ac'Rained 的神秘主義者製作指環以防止 他們世界的生命力量枯竭,但是現在他們的秘密技藝 處於消失的危險,身為他們的學徒,你被召集來學習 和 l 利用指環的力量,此即為梅姬之環 (Rings

of the

Magi) 遊戲的開場白 [1 ]。 的標示點一下,表示該列的球都會往右移動;在「↓」 的標示點一下,則表示該行的球都會往下移動。而當 有兩個以上的相同球直接相鄰時,它們便會消失掉, 但玩家最後必須將棋盤上所有的球都清除掉,才能算 是過關。因此在移動的同時,佈局的技巧相當重要, 玩家每一步都得經過鎮密思考,才有辦法找出破解之 道。 MVP 公司設計的遊戲盤面特殊且變化多端,規 則以一次消掉球數的平方值為得分計算累積分數,這 個遊戲可在下列網站 [3]

[4]

[5] 找到程式下載來玩:

梅~~臣之環(Rings

of the

Magi)jfj1戲是由 MVP 軟體

公 liJ[2] 出的的益智遊戲,這是一個挑戰性很高的益智 遊戲 , {t)1t戲的畫面上,有-個棋盤以及一些不同顏 色的球,玩家的目的就是要想辦法消除所有的球。遊

戲的規則是這樣子的:所有的球都可以移動,但只能 依照棋盤周圍的箭頭指示方向來移動。例如在「→」

t1:p://ft口 .mvpsoft, com/pub/rotmw12,

exe

http://coolftles .to臼t.com,

tw /ouzzle/rotmw 12 .exe

htto:/ /cardgames.com/mvp/rotomw 12.exe

可惰的是,到目前為止我們尚未看到有任何文章

討論如何解決梅姬之環(Rings

ofthe

Magi)的問題。因 此引起了我們研究此問題的興趣。

(2)

42

領{言全林順喜 圖 1 2 按向右箭頭,如果球碰到邊框就不再移動,其他的球繼續移動,如圖二所示。 遊戲由以下簡圖說明: l 按向右箭頭可推動第二列的球,如圖一所示。

→兩

-4

亡〉

c=>

圖 2 3 如果有相同顏色的球碰在一起球即會消掉,如圖三所示。

~

‘闖

個頓,

‘回

圖通,

‘間

~

‘閻

L一一 一一

?

LL

+

c=>

4 當所有球都消失就算過關 這個遊戲除了矩陣的盤面以外, MVP 公司的這 個軟體尚有設計特殊造型的盤面,雖然規則簡單,但 球的擺法及種類組合起來的盤面變化卻是極為龐大 的,解法更是不只一種,所以不論其形式如何變,總 是能帶給人們無窮的樂趣及挑戰。由於各種盤面及排 法都是矩形盤面的變形,所以我們在研究的時候就先 圖 3 專注於矩形盤面上,並由 4x4 的盤面推廣到 9x9 及 MVP 公司所設計的特殊盤面,構思一些演算法及一 些技術想找出所有任意盤面上任意球的擺放位置的 最佳走法,也希望藉由這個問題的研究及推廣,讓這 個演算法的相關技術能適用於其他類似的問題。 二、以人腦求解及電腦求解的不同:

(3)

梅生臣之環遊戲的電腦解法研究

43

一般人在玩這類遊戲時,多半會很直覺地看那些 尋相同重覆的路徑,當電腦走到無法走下去的情況 箭頭可以移動球,然後便隨意移動箭頭來消掉同色 時,就退回到之前的盤面,改走另一種可能的走法而 球,等到發現錯誤時才回到上一步。有些人依直覺, 繼續求出解。而在求解的過程中要讓電腦學習,每次 或者依據著經驗法則運用一些策略來求解,例如有些 電腦求得最佳解便可學到這種盤面的最佳走法,在下 人會先想法子先消掉某一顏色的球、有人會決定儘量 次走到這種盤面時,便可以不用再浪費時間繼續展開 將所有球往中間集中,不論如何,大多數人都以隨機 下去,而是直接以此最佳走法為解,此即為讓電腦在 方式來決定如何走下一步,而且在求解過程中,走過 每次求解中「學習」而越來越聰明,知道如何去玩這 重覆盤面而不自知 o 個遊戲。 利用電腦來求解時,不會以隨機方式求解,而是 其實人類在求解時也會考慮比較多種走法,以及 以有系統的方法找出較佳的下一步,然後以一些策略 各種可能的變化然後選擇最佳的走法,但在步數一多 嚐試走可能的路徑去找到最後的答案 C 由於電腦具有 及盤面變化大的時候,人腦就無法記得這麼多的走法 大量準確的記憶能力,所以我們讓電腦嚐試所有可能 及變化,而電腦的記憶能力便可做得到,甚至做得吏 的路徑,並記錄下那些盤面走過,避免浪費時間在搜 好,當然這取決於電腦的運算能力及程式的好壞了。

電腦解題所遇到的困難

由於此遊戲的盤面變化性極大,棋盤小自 4x4 有 16 個格子,大至 9的有 81 個格子,而盤面上球的種 類最多可至IJ 6 種,每種球最少 2 個最多有 10 個,所 以全部最多可能有 60 個球。因此,所有的盤面組合 的數目是大到難以想像的,以 4x4 的棋盤為例,如果 每種顏色的球各有 2 個,即棋盤上共 12 個球, !,!IJ此 盤面可能的組合數,高達

(l6l211 的1

)>×

=

」斗-一:::.:...

=

1朋

叩仙叫

36

6位仙伽

2幻2160

何圳馴

6ω削0仰8

l口2J 2!以Ix2!以Ix2!以x2!以x2!x2到 1536 種,相當於 136 億種以上的盤面組合,更遑論 9的的 棋盤上有更多球數的盤面組合,由此可以想見盤面組 合數量之可怕。所以要是只用暴力法去展開這個遊戲 樹來求解,一個簡單的盤面就可能有一、二十步才求 得解。因此展開樹最深會到一、二十層,每一層又有 許多分枝,則此樹之龐大可能無法在可接受的時間內 完成求解。當然,在這樹中有許多重覆的節點是表示 相同的盤面,有些路徑是不必要搜尋的,所以我們努 力的方向就在於減少經過這些重覆的節點,並刪掉不 必要的搜尋路徑,以減少搜尋空間及時問。 在搜尋演算法及儲存盤面方面,為了要減少重覆 的搜尋,所以我們需要記錄走過的盤面。因為盤面可 能大到 81 格,不太可能直接用二維陣列儲存,可走 的方向最多可能有 36 個,而解答可能有超過 30 步以 上,如此搜尋樹會以相當可怕的比例成長,所以不能 以暴力法或尋常搜尋法去窮舉。下一節我們將說明如 何去克服此難題。 由於此遊戲的各關卡盤面設計奇妙(圖四)且有 些盤面十分龐大,所以不能直接以二維陣列來儲存走 過的盤面;假設一個 5 門的盤面以二維陣列儲存,則 一個盤面需佔用 25*4

bytes=100 bytes

(一個整數佔 4 bytes) 的記憶空間,每展開 A 個盤面便需記錄一次, 如果此關卡有 20 個方向可移動,即每層每個盤面的 搜尋便有 20 條路徑,貝 IJ只要搜尋到第十步,在最糟

的情況下便需記錄(201l-1)/19 個盤面,記憶空間需佔

用 IOV(20l0.l)/l9bytes' 以目前之個人電腦不太可

能有如此大的儲存容量,此為儲存資料及搜尋演算法 所造成解題的困難之處。

(4)

44

賴{言全林順喜

(a)

r'.‘、 hu 、、,',

(c)

圖 4 在許多象棋的相關研究中,有關儲存盤面的方 法,一般是依棋子的位置將盤面編碼成一個數字,但 在棋子及可走位置很多時,編出來的數字可能會超過 倍精數(double)可以儲存的範圍,所以不能加以採用 而需自行設計盤面儲存方法。在搜尋演算法方面,我 們知道廣度優先搜尋法 (Breadth-First Search) 之展 開樹可能太大不適用。另外,欲採用最佳優先搜尋法

(Best-First

Search) 的搜尋方法,但在計算限制

(

bound) 值時無法準確的預知如何計算才是最佳的

結果,所以只好採用深度優先搜尋法(

Depth-First

Search) 加上限制 (bound) 函數,再配合刪除不必要 展開的盤面及路徑來儘快求得可行解。

電腦解題之演算法

我們針對矩形盤面做了下列幾個搜尋策略的研 究: 1 重覆出現過的盤面不往下搜尋 2 球較少的盤面先搜尋以儘快求得解 3 設計一個限制 (bound) 函數,限制 (bound) 值小的盤面先做展開 4 記錄已求過的最佳解存在檔案中以利日後求

(5)

梅姓之 1罩遊戲的電腦解法研究 45 解使用。在開始撰寫程式前,我們先利用各關卡的資 料來對棋盤做分析,以圖五為例:每個可走的格子編 號:從左上到右下依序由 O 開始編號(表1);再對每 個箭頭做編號:從左上到右下依序由 O 開始(表 2 四 周圍的數字編號) ,以做為搜尋下一步的可能方向; 表 1 可走的格子編號 O

1

2

4

::J

6

7

8

9

10

11

12

13

14

表 3 將棋子、各方向方塊加以編號

帶豆事|劇院|

i空格

編號

O

1

2

I

3

I

4

11 沒用

之處

13

之前提到盤面的變化及球類組合過多造成難 題,所以我們要將盤面的多樣性減小並特別注意重覆 圖 5 為了識別每個棋子、方向方塊,我們也將棋子及各方 向方塊加以編號(表 3) ;而在移動過程中可能會有相 同類型的球因碰在一起而消失,所以另需一個陣列來 記錄每種球的剩餘個數(表 4) 。 表 2 對每個箭頭做編號

l

2

4

O

1

2

3

5

I

6

4

5

6

7

8

8

9

10

11

9

10

12

13

14

15

11

12

13

14

15

表 4 (各類棋子的數量) 編 O l

2

3

4

3 號 種 男

三島n:主 貓 頭 類 孩 鼠 色 貓 豬 鷹 個

2

3

O O

2

數 的相同盤面。在搜尋求解時我們如果遇到曾經展開過 的重覆盤面時,我們便不再繼續展開以縮減求解的展

(6)

46

賴信全 林,圍喜 開樹,我們可將重覆的盤面分為“同結構" “對稱" 分布在相同的位置,而解法是一樣的,所以遇到此情 及“旋轉"三種: (1)同結構 因為球的種類共有六種,所以不同顏色的球可能

• • •

團 6

(2)對稱 當一個盤面依垂直中線、水平中線和對角線對稱 時所出現的盤面,解法相同只是依所走的方向改變,

• • • •

況便視為重覆盤面不再重新求解。如圖六的紅球和藍 球分布位置跟圖七的綠球和粉紅球分布位置相同,故 視為同結構的相同盤面。

• • •

圖 7 故亦視為對稱的相同盤面。如圖八各依不同中線對

稱。

• •

‘'

(a) 原來盤面 的)左右對稱

(c) 對角線對稱

• •

• •

的)上下對稱

(e) 對角線對稱

團 8

(7)

梅姬之 1襄遊戲的電腦解法研究

47

(;))旋轉 當一個盤面旋轉後所出現的盤面亦視為相同盤面,如圖九。

• • •

(a) 原來盤面

• •

(c) 逆時鐘旋轉 90 度 圖 9 遇到上述三類情況,同樣一個盤面經由旋轉、 對稱、及同結構關係,可以同時標記其它相同的盤 面,記錄一個盤面就等於記錄了許多個盤面,因此當 F 次再經其他路徑到達這種盤面時,就可以知道已經 展開過而不必再展開了,而且可以利用這些對稱、旋 轉、同結構關係來減少需要儲存的盤面數量。 在每個盤面要往下 A 步搜尋峙,本來根據箭頭的 編號依序搜尋即可,但如此漫無目的的搜尋是很浪費 時間且沒有效率;由於我們的目的在尋找由給定盤面 開始,到最終所有球均消失的最少需要步數,因此第 →個想法即是利用最佳優先搜尋法(

Best-Fi rst

Search) 配合分支及限制 (Branch

and

Bound) 的策略 求解,如此第一個找到的解一定是最佳解,但是因為 梅姬之環 (Ri

ngs of

the 和fagi) 這個問題的限制 (bound) 函數很難精確地估算出一個下限值(下面 會說明') ,所以故而採用深度優先搜尋法

• •

(b) 順時鐘旋轉 90 度

」一

|.

(c) 順時鐘旋轉 180 度

(Depth-First

Search) 再加上一個限制 (bound) 函

數配合來展開遊戲樹 (Game Tree) 。為了加快深度優 先搜尋法 (Depth-Fi

rst

Search) 的效率,每當找到一 個解峙,則立即記錄到目前為止的最少步數,若目前 步數超過或等於最少步數則不再繼續往 F 展開。 此外,在搜尋時亦有一定的規則來尋找下一步, 我們將以棋盤上球數較少的盤面先展開求解,如此做 是為了可儘快找到一個解,因為球數越少便代表越接 近解。當球一樣多時,我們便以限制 (bound) 值小 的盤面先展開求解,限制 (bound) 值就是球與球之 間的距離的大約值,限制 (bound) 值越小表示同色 球之間的距離越近,越容易發生碰撞消失。 限制 (bound) 值如何計算呢?我們可分同色球二顆、 三顆及四顆以上來計算,計算方法如下: l 同色球只有兩個 當一個盤面同顏色的球只有兩個時,我們可依公

(8)

48

賴信全林JllIí喜 式算出這個盤面的最佳解的步數,所以此種盤面就以 消掉這三個球的最短步數為限制 (bound) 值,依研 究可得知此算法為水平方向相差格數+垂直方向相 差格數 -1 '公式為 1

X2-X1

1

+

1

ì2-

Y1 1 -1 。以 圖十為例,兩個球的座標分別為(1,1) (3 , 3) 則其限 制 (bound) 值為 1

3-1

1

+

1

3-1

1

-1 =3

則 3 即 為此盤面的限制 (bound) 值。我們亦可知此盤面的 最佳解步數為 3 步。

o

1 2 3 4

nu1in/-QUA 吐 圖 10 2 同色球只有三個 當一個盤面同顏色的球只有三個時,我們亦可依 公式算出這個盤面的最佳解的步數,所以此種盤面也 以消掉這三個球的最短步數為限制 (bound) 值,算 法為三個球中兩兩間水平方向相差格數之最大值+ 垂直方向相差格數之最大值一 2 '公式為

Ma:--: (X) +Ma:--:

(Y) 一2 '其中 X , ì 分別代表兩兩之間球的 水平方向及垂直方向的最大差值,也就是說

X=Max{

1

X1-X2

1 ' 1

XI-X3

1 ' 1

X2-X3

1 }

'Y=Max{

1

YI-Y訓,

1

Y1-Y3

1

,

1

Y2-Y3

1

}。以圖十一為例,三

個球的座標分別為(1, 0)

(4

,

2)

(2 , 4) 則其限制

(bound) 值為 14一 1

1

+

1

4一0 卜 2

= 5

則 5 即為

此盤面的限制 (bound) 值。我們亦可知此盤面的最 佳解步數為 5 步。

o

1 2 3 4

2

3

4

,

J﹒|L~

圖 11

(9)

梅姐之環遊戲的電腦解法研究 49 3 同色球四個以上 當一個盤面同顏色的球有四個以上時,我們就很 難算出這個盤面的最佳解的步數,所以只能以計算球 的分布範圖為限制 (bound) 值,算法為最左邊的球 與最右邊的球的水平距離+最上面的球與最下面的 球的垂直距離,公式為 Max

(X) +Max (Y)

,其中 X 代表

最左邊的球與最右邊的球的水平距離, Y 代表最上面 的球與最下面的球的垂直距離。以圖十二為例,四個

球的座標分別為 (2 , 0),

(0

,1), (1,

3

),

(3 , 4) 則其限

制 (bound) 值為 13一01+ 14一o

1

=7

'則 7 為我們

所估的範閻值,即為此盤面的限制 (bound) 值。

0 1 2 3 . 4

1

2

3

圖 12 4 當各色球混合時 當一個盤面有各種顏色球混合時,我們先分別計 算各種顏色球的限制 (bound) 值,然後再全部相加。 以圖十三為例,我們先分別計算只有紅球、藍球及黃 球時的限制 (bound) 值,由前面的例子可知紅球、

|•

-

圓圓,

--

藍球及黃球的限制 (bound) 值分別為 3 、 5 、 7 ,貝 '1此 盤面的限制(

bound

)值為此三個值的總和,即 3(紅)+s(藍 )+7(黃 )=14 。我們以上算法可知,球的種 類越少則限制 (bound) 值越小,程式將視為越接近 解而先處理。

|•

‘--•

--•

‘自﹒ ‘回回

•••••

圖 13 由限制 (bound) 值我們可知如果限制 (bound) 值越小同色球便越接近,貝 '1這樣的盤面就越可能接近 解,所以先處理。在計算限制 (bound) 值時,我們 可同時計算一個最低 (Lowest) 值,最低 (Lowest) 值表 示一個盤面要消掉所有球最少還需要幾步,可以少算 但不可多算,它可預知此盤面的解是否比目前找到的

(10)

50

賴 i言全 林川頁喜 解還要多步。假設一個計 3 的盤面在求解過程中已找 回卜4 個 20 步的解(非最佳解) ,而在後面搜尋時於第 Ei 步展開一個 A 盤面,若我們知道 A 盤面的最低 (Lowest) 值為 6 '表示 A 盤面要找到解最少還需 6 步,如此加上目前已走的 Ei 步等於 21 步,就比目前 最佳解 20 步的步數多,則這個盤面就不展開,這樣 可以減少此盤面從第 15 步到 20 步之間的 3 層展開樹

(約 20-1個)。最低 (Lowest) 值的利用就是要刪除不必

要的展開樹,以減少搜尋時間,而反之限制 (bound) 值的利用是用來決定搜尋樹展開的先後次序。故限制

• •

圖 14 (bound) 值是一估計的值,不一定準,但最低 (Lowest) 值則一定是一個確切的下限值。 最低 (Lowest) 值怎麼算呢?最低 (Lowest) 值要 計算得非常準確,因為要確實知道至少還需幾步,我 們由經驗可知同色球剩兩個或三個時可準確計算,而 剩四個以上因為牽涉太多方向因素所以無法精確計 算,所以最低 (Lowest) 值我們只計算同色球剩兩個或 三個的值列為考慮因素。如圖十四我們計算最低 (Lowest) 值時只考慮紅色(兩個)、粉紅色(兩個)及藍 色球(三個)。

• •

• •

• •

l 先計算同色球只有兩個的狀況 方式最後要減 1 。以圖十五為例,水平方向取粉紅球 同色球只有兩個的狀況,不管有幾種全部一起列 的水平距離,垂直方向取紅球的垂直距離。紅球的座 入考慮。算法為水平方向至少需走的步數+垂直方向 標為(1, 0) 及 (2 , 3) ,粉紅球的座標為 (4 , 2) 及 (0 , 4)

,

至少需走的步數一 1 。公式為 Lowest

=

Max(X)

+ 則水平方向至少需走 (4-0) 步,垂直方向至少需走

Max

(Y) 一 1 '最後減 1 是因為如果水平方向和垂直方 的一0) 步,此盤面的最低 (Lowest) 值為

向都是取同種類球的話,則至少需走的步數等於此種 (4-0)+(3-0)-1=6 。 球最佳解的步數,故依前面限制 (bound) 中的計算

o

1 2

3

4

門 I 1...-‘一I

u

4 國I I~Itj

圍 15

(11)

梅姐之 J! 遊戲的電腦解法研究 2 同色球只有三個的狀況 同色球只有三個的狀況,算法同限制 (bound) 值即為要消掉這種球的最佳解至少所需的步數。公式 同上面限制 (bound) 值的算法:

51

Lowest=Max(X)+Max(Y) 一2 。 以圖十六為例,有(1, 0) 、 (4 , 2) 、 (2 , 4) 三個球,其 最佳解的步數為 (4-1)+(4一0)-2=5 ,可知這個盤面消 掉這三個球至少要 5 步。

o

1 2 3 4

。 1234 3 全部整合在一起 當某一個盤面太複雜時,我們只能計算各種類球 的個別最少所需步數之大約值,如圖十七,此盤面有 四種球,因為綠色球大於三個,所以計算時不列入考 慮,只拿紅、粉紅、藍球三種球來考慮計算個別之大 約值。即先算同種只有二個球的種類(紅球及粉紅

圖 16

球) ,由前面例子可知至少需要 6 步,再算同種類只 有三個球的種類(藍球) ,由前面例子可知至少需要 5 步。因為我們無法知道消掉某種球的過程中會對不 同種類球的位置造成的影響,所以我們只能取二者的 最大值,因此得知此盤面至少要 6 步才有解。

• • •

• • • •

• •

• • •

圖 17

(12)

52

賴信全林 plR 喜 最低 (Lowest) 值可以刪除許多不必要的節點使 求解更快速,如果未來能對一個盤面的最低 (Lowest) 值函數計算得更精確, f{1J將可刪除更多層的展開樹, 甚至在未來如果可以預算出一個盤面需要走的正確 步數的下限值,就可以直接用最佳優先搜尋法

(Best-First

Search) 的演算法來求最佳解,求解 速度將可大幅提升。 在儲存的資料結構方面,為了能快速地搜尋及存 取,我們利用了一個約有 2~斗個位置的雜湊表 (Hash Table) 來儲存(見圖十八) ,雜湊表 (Hash Table) 的 位置裡記錄已經走過的盤面,位置的索引 (index) 值

即為盤面的雜湊值(lIash

Va 1 ue)

,如果兩個或兩個以

上的盤面的雜湊值(IIash Value) 相同,貝1)稱為發生碰 撞 (collision) ,那麼就用鏈結串列 (linked

1

ist) 接 起來,位置裡儲存的資料如圖十九,資料中的 data 口 為一個動態的整數 (i nteger) 陣列,可完整記錄盤 面。雜湊表(I Iash Table) 裡儲存的資料介紹如下:

2

24個位置

• •

圖的 RN: 記錄此盤面剩餘的球數。 step: 記錄由起始盤面走到此盤面所花的步數。 PreDir: 記錄上一個盤面經由這個編號的箭頭走到 此盤面。 BestDir 假設以前求過此盤面的最佳解,這次求 解便會先記錄此盤面下一步應走那一步 才是最佳解。

Bound

:記錄限制 (bound) 值。 Lowest 記錄最低 (Lowest) 值。

data[]

:動態宣告的整數 (integer) 陣子1) (下面會說 明)。 prelink 鏈結到此盤面的父盤面,所指的盤面可 經由 PreDir 所記錄的箭頭展開到此盤 面。

link 雜湊值 (Hash Value) 一樣時,發生碰撞 (collision) 就以此鏈結。

Null

prelink

(13)

梅宜臣之 1農遊絨的電腦解 J去研究

53

PreDir

BestDir

bound

Lowest

prelink

球 走 上 走 動 指 主IJ 個 J1:

t

f!何bu 匕

生 個 J1:

t

盤 方 '士日' " 碰 數 盤 面 向 主t 仁3 面 8可、

J1:

t

耳'"立亨 陣 面 金間三l三I 子IJ

U。

3 ' 數 頭 的 記 主IJ 走 錄 接 J1:

t

法 此

盤 盤 面 面 面 圖 19 以圖二十為例分別介紹 data 口如何記錄盤面:一 前的個位元 (bi t) 就用來儲存盤面中是否有球,如果

個整數 (i ntege r)有 32 個位元的 it) ,一個整數 有球就存入 1 如果沒有球就存 O(圖中黃色部分)。接

(i

nteger) 利用其中的 30 個位元 (bi t) 來記錄盤面, 下來依序存放由第 O 格到第 15 格的球,沒有球的位 如果需要 30 個位元 (bit) 以下就存在 data [0] 的整數 置就不記錄,因為球的種類有 6 種,所以一個球只要 (integer) 中,如果超過 30 個位元 (bi t) 就存在 用 3 個位元 (bi t) 就可以分別,如:藍色為 1 號,紅

data

[1]的整數 (i nteger) 中,以此頭推。圖二十中為 球為 2 號,儲存結果如下:

(14)

中本戶|員喜 中員{吉全

O

2

3

、.

6

7

8

9

10

1 .

12

1 .

~4

15

54

3 3 ' ) 」

10 11 12 13 14 1S

9

8 尸 6 J 4 3 ι)

位置的球的顏色

位置 H 球的顏色 位置 5

球的顏色

位置 4 球的顏色 位置。心仁 MU data 口的內容 圖 20

Tabl

c) 中,因此我們要計算一個雜湊值 (Hash

Value)

以放入正確的位置。我們利用 data 口這個陣列中的數 值資料配合餘數定理,運用公式可將盤面編碼出一個 雜湊值(J lash

Va1 ue)

,因為這個 Value 要做為雜湊表

(I

Iash

Tab1e) 裡的索引 (1 ndex) 值,所以不可以超過

雜湊表(I Iash Tab1e) 欄位的最大值,因此我們運用餘 數定理每做一次加法後,便除一次雜湊表 (Hash

Table)

位置的總個數(此處是等於 224) 取其餘數(以%表

示) ,因此程式計算雜湊值 (Hash Value) 之過程如下: 4. 9 』 qL W 、 l/ + A 唾 門/』 門/』 wb 、 2 ,/

]

qu

[

a +lv a '。 + 凡川 T q/ 』 們/勾 心 WO \}/

]

1

[

a 1.u a d + 4 『 門/人} 鬥/心 。。

l

門 U

[

a 嚕L a d ( ( ( 如此 a 來,這個 4*4 的盤面就可以用-個整數

(i

nteged 存起來,圖十九中 data 口的陣列大小為動 態,資料型態為整數 (i

n

tegcr) 的陣子 IJ ,所需使用的 整數 (i nteged 數量為 1

+

(棋盤空格個數+剩餘總球數 *3-1)/30 個,所以. {固有 4 顆球的 4*4 盤面只要 1+(16叫 *:)-1) /扶持 l 個整數 (i ntege r)就可存 F o{ 日如 果 -{[ò] 9 勻的棋盤 t 有三個球的盤面就需要用 81 個 位元 (bi l) 來儲存空格, 9 個{在兀 (bi l) 來儲存球,共 需 90 {崗位元 (b

i

t) 叩至少需要 3 個整數 (i nteger) 來 儲存,所以 dala [J 就被宣告成一個 H 三個整數

(

i 忱。 gcr) 的陣夕IJ 0 整個演算法的流程圖如圖二十一所示。 由 l二所述,假設 data 口的大小為 n' 那麼我們便口I如l 圖 r-Jut1 的 4個記錄共用了 6 個想整數(shol-l) 、兩 個鏈結 (11 nk) 及 n 個整數 (inleged '也就等於 (2 可+斗 *2+4n) {因位元組 (bytc) 。 按著我們需將我們的盤面資料放入雜湊表(II ash

(15)

梅 t臣之 1農遊戲的電腦解法研究

包←|…|←

于三

計算啟始盤面的所有資料 將啟始盤面資料推進堆疊 E1 Æ 依盤面上下一個可走的箭頭方向展開,產生一個子盤面 找到雜湊表 (Hash Table) 中對 F單位置並存入資料 將此子盤面推入堆疊中 圖 21 步數是否小於草 j奏表中的步數? E1 Æ 牙之 仁3 河三 仁司 一一一一句, 55

(16)

56

親信全 林 111員喜

在此程式中,我們利用雜湊值(Ilash

\"a 1

ue) 在雜

湊表(I Iash Tab1e) 中做存取,插入及搜尋速度將會非 常快速 O 如果沒有發生碰撞 (co11;s;on) 的情況下, 4 個盤面將剛好佔用一個位置,搜尋時可以很快的判 斷此盤面是否展開過。 資料的儲存可以避兔重覆的盤面繼續展開,而在 求得最佳解後,我們將會記錄此盤面的最佳解每一步 過程及方向,以供日後利用。當我們找到一個最佳

4

• •

4

• •

圖, aι 圖, 4圓

....

圖,

|‘自

6

圖,

• •

可回 ﹒告,

‘回 圖書,

‘回 ﹒函,

~ 國告,

~

+ + +

?

+ + +

(a)

(b)

圖二十二之盤面 (a) 依序走最佳方向依下列編號 的箭頭 6一>1 一>2 可求得解,因此我們就在一個專門記 錄 4 刊的檔案中記下 a6 、圳、 c2 '此即代表盤面 (a) 的最佳的下步方向為 6 '下次搜尋其他盤面如果遇到 圖二十二之盤面 (a) 就只往方向 6 搜尋,不再往其他 方向搜尋,而且如果記錄圓二十三之盤面 (a) ,在遇 到重覆的對稱旋轉盤面峙,程式將自動改變最佳解的 方向,配合盤面的對稱旋轉往最佳的搜尋方向求解。 以此類推。如果求過最佳解的盤面越多,記錄在檔案 中有最佳解的盤面便越多,以後在未解時便可依此經 驗來求解,如此利用經驗法則可使搜尋速度增快許 多,也會讓電腦越來越聰明。 在求解的流程中,展開一個盤面之前會先判斷是 解,就把這個盤面及最佳解方向記錄在檔案中,以後 在求其他盤面時,便可參考此檔案內的資料,如果展 開到有求過最佳解的盤面時,就直接展開最佳方向的 盤面,其他方向就不展間,而且記錄一個盤面的最佳 解,還可以運用在同結構、旋轉、對稱的同盤面,程 式將自動改變方向, WIJ記錄一個盤面最佳解的方向等 於記錄許多個盤面的最佳解方向,以後電腦求解速度 便會越快也越聰明。如圖二十二的例子。

• • • •

4

圖面, aζ一

....

-苦,

|叫

﹒面,

!•

2

圖書, 1

圖,

• •

時間 圖,

• • •

|•

圖,

|•

圈,

|•

• •

+ +

:•

+

?

+

(c)

(D)

圖 22 否有解,如果盤面中某種顏色只剩一個球便代表無 解。再判斷這個下一步方向是否對盤面有效,假設某 個箭頭所指的行(或列)沒有任何球在上面,表示此 方向無故則不展開。然後再從雜湊表(Ilash Table) 裡 搜尋該盤面是否已經展開過了;若無,則總續展開; 若有,貝 IJ表示該盤面之前已經展開過了,所以不展開 此重複的盤面,但是除了一種特殊情況:雖然此盤面 之前已經展開過了,但是當時走到此盤面的步數比目 前走到此盤面的步數還多, ~iJ得重新由此盤面展開一 次,並更新雜湊表(J lash Table) 裡此盤面所記錄的步 數。因為日前的步數較少,表示此時由起始盤面至此 盤面的解較先前走到此盤面時的解為佳,重新展開的 日的在於更新雜湊表(Ilash Table) 裡的步數記錄。

(17)

梅生臣之環遊戲的電腦解法研究

57

研究結果

我們使用一台普通的個人電腦做為測試工具:

Pentium II 450MMX CPU' 128MB PC-133 SD-RAM

0

使用的編譯器(Compiler)為 Borland

C++ Builder

5.0 。

利用電腦在不同的棋盤中隨機在不同的位置放入不 同顏色的球,先從球的個數少的盤面開始測試,再慢 慢增加球的個數,求得最佳解後將求得結果存在檔案 第 1 步

第 2 步

第 5 步

第 6 步 第 9 步 第 10 步 中。程式在 9均以下的矩形盤求解時,無論球的數量 多寡都可在 10 秒中內求得一個可行解,但不一定是 最佳解。如果要求得最佳解都要花上數小時的時間, 而在球數少於 8 個球的盤面都可在十分鐘內求得最 佳解。首先先舉幾個隨機盤面,以我們的方法求得的 最佳解。其中紅色箭頭代表按的按紐(走的動作)。

第 3 步

第 7 步

十 LLLLUi

l

f]

J::'

11

內強

11

111喔喔i

「1111111111

第 11 步 第 4 步 ,-弋ρE

‘...~-___w

1 _ _ _ _ _

們學.

|鬥嚷111

'~

jl

一一 …~­ 一一-1-":三-徊,高董 ,可~--I-'~---_---.~_

…•\--「

第 8 步

i

._--~--._-

i

i i ijE

_lIII你川 J 、有糾正-­ 一= H 可 E ﹒ 時忌

,

-自 I

_

時ι(ι

______1

,­

.

卜,­

111

「11111111111

過關 圖 23 4勻的盤面,展開 658 個盤面,耗用 3 秒求得解

(18)

5 日

'的口 1i

第 4 步

第 8 步

第 l 步 第 5 步 第 9 步 賴信全 林川員喜 第 2 步 第 6 步 過關

第 3 步

第 7 步 圖 24 5可的盤面,展開 7717 個盤面,耗用 39 秒求得解

(19)

梅姬之 1表 i2i 戲的電腦解法研究 59

起始盤面 第 l 步 第 2 步

第 3 步 第 4 步

第 5 步

第 6 步 過關

(20)

60

總信全林 NIi喜 以 F 再以 MVP 公司設計之特殊盤面為例,以我們的方法求得的最佳解。 起始盤面

第 l 步

第 2 步

第 3 步

第 4 步 第 5 步 第 6 步 第 7 步

第 8 步

第 9 步

第 10 步

第 11 步

第 12 步 過關

(21)

起始盤面 第 4 步

第 8 步

梅姬之 1袁遊戲的電腦解法研究 第 1 步

第 5 步

第 9 步

第 12 步 過關

第 2 步

第 6 步

第 10 步

61

菌研

EEE

髒一

臨巨一

陣嘴一個暑酹間悶悶一

爾會主副棋鍾會巨

髒嚕一嚨醉

EEFF

臨學們知一

第 3 步

第 7 步

第 11 步

圖 27 Keyhole ,展開 993 個盤面,耗用 4 秒求得解

(22)

62

起始盤面

第 4 步

第 8 步 第 12 步 第 1 步 第 5 步 第 9 步 第 13 步 車員{吉全 林1'1頁喜 第 2 步 第 6 步 第 10 步 第 14 步 第 3 步 第 7 步 ll

」叫叫司

Ill­

CCE-M

1

…ER

nmr

會辜會們關

「民

••

R

仁閃轉曹

mhh

F

arr

p

叮叮罔聞位

--rfkι

第 11 步

1.1111兩

l

I_Hl14閥 l

F間[11阿

拉IKJ嚕,車

. .

R門,脅.4:::11

:.曰嚕~I通

I

!II口( .511悶

I

' . .

[!u了111悶

..

l

l

F

第 15 步

(23)

梅姬之 1袁遊戲的電腦解;去研究 63 第 16 步 第 17 步

第 18 步

過關

圖 28

川utua

l

Support' 展開 1061853 個盤面,耗用 4 小時 21 分 41 秒求得解

結論

日前我們已能將十個球以卡的盤面在有限時間 內求得」個可行解,也就是說,任何盤面不論球數的 多寡都可在一分鐘內求得一解(但不-定是最佳 解) ,而且若除去對稱及旋轉的判斷,便可運用在叭T 公司出品的特殊盤函,各關卡都可求出一個可行解。 在這種變化性很大的遊戲中,其複雜程度很類似 象棋等棋戲。由於特殊盤面的求解耗時頗長(由 4 分 平:--+小時不宇) ,可見這→類遊戲的求解問題並沒有 特別有殼的經驗法則。如果要求得最佳解一定要展開 什倒很大的搜尋樹才能找到目標,因為每走一步都會 影響卜」步是仟為最佳解,不太可能依公式知道那一 步是比較好的,所以只能儘呈讓球互相接近,以求快 速找到解。 征求得最佳解後記錄下這些步驟及盤面, 叮 UI~ll 後搜尋直接往最佳角平方向走,則深度優先搜尋 法(

Depth--j

i rst

Seal-ch) 可漸漸將部分的搜尋改變 為最佳優先搜尋法 (ßest-Fil-st

Seal-ch)

,如此可讓 速度越來越快。日後如果有人對此遊戲有興趣,將這 個最佳步法資料庫越建越大,經驗越來越多便可讓程 式利用越多的最佳步法,則要求解的速度將會越來越 1吏。當然,如果在未來有人能對此類盤面的平面幾何 理論加以研究,計算出更好更精確的限制 (bound) 函數,這樣或許就可以越快求得最佳解並可將不需要 搜尋的盤面刪除以減少更多的搜尋時間。此外,若要 求得最佳解,或許也可採行回溯分析法 (Retrograde ~na1ysis) ,這有待未來的研究者加以考慮。由於這 是第一個針對梅姬之環 (Rings

of the

Magi) 問題的 研究,我們認為尚有許多改進的地方,希望本研究有 拋磚引玉的作用 O 目前我們已將本遊戲的程式放在網 站卡.http://wwlV .csie.ntnu.edu.tw/-1

i nss/

'讀者 可下載來執行得解,歡迎大家使用。此一電腦應用研 究亦歡迎資訊教育相關課程作參考。

(24)

64 精 f吉全林 1噸喜

參考文獻

http://www.gamers.com/cgw/index.jsp htto:!!www.mvosoft.com!

tto:!!fto.mvosoft.com!oub!rotmw12.exe

htto:!!∞ol fi1 es. toget.com. tw!ouzzle!rotmw 12.ex~ htto:!!cardgames ∞m!mvo!rotomw12.exe

R. P. Grimaldi (1998)

Discrete and Combinatorial Mathematics

An Applied Introduction

, 4th Ed叫 Addison-Wesley.

E. Horowitz and S. Sahni (1995)

Fundamenta/s 01 Data

Structures in Pasca//

C/

C

+ 弋 N Y: W. H. Freeman and Company

R.

Lafore (1995)

Object-Oriented Programming in C++

(2nd Ed.), Waite Group Press .

.Iohn Miano 原著,林逸文譯(1997) 0 C -<-+ Builder 技術問答(I)

(lI)。松格資訊有限公司出版。

R. Ne叩olitan and K. Naimipour (1998)

Foundations 01

Algorithms: Using C++ Pseudocode

(2nd Ed.), Jones and Bartlett. 洗鏡光 (1998 再版)0 c 名題精選百則-使用 C 語言技巧扁。 懦林圖書公司出版。 後記 圍之色彩,固於黑白印刷之緣故,色彩無法呈現,在此致 歉,但可在師大學報網路版上呈現 o 查詢網址: http://www.ntnu.edu.tw/acad/ 收稿日期: 91 年 02 月 18 日 修正日期: 91 年 03 月 26 日 接受日期: 91 年的月 28 日

(25)

梅娃之 1農遊戲的電腦解 J去研究

Use Computers to Study the Solutions ofthe Game

"Ri

ngs ofthe Magi"

Hsin-Chuan Lai

1

Shun-Shii Lin

2

Department of Information and Computer Education

,

National Taiwan Normal University

,

Taipei

,

Taiw側, Republlc ofChlnal

2

Graduate Institute ofComputer Science and Information Engineering

,

National Taiwan Normal

Universi吵, Talp間,

Taiwan

,

Republic ofChina

Abstract

In this paper

,

we will use computers to design data structures as well as algorithms to derive

the solutions for the game "Rings of the Magi". Since many initial configurations of this game

need lots of steps to reach the final configurations

,

its game tree grows very rapidly. We could not

search the entire game tree with the "brute force" approach. Previously

,

there are no computer

solutions for this hard problem

,

but there are many manual trials that are found in many software

documents. In this paper

,

we w

iJJ

explore some useful techniques for solving this game. The

results show that we can get ava

i\

able solutions for most boards in a reasonable amount of time.

We hope that this paper can introduce the interest of subsequent researchers.

Keywords: brute force approach game tree hash table

數據

Tabl  c) 中,因此我們要計算一個雜湊值 (Hash Value)  以放入正確的位置。我們利用 data 口這個陣列中的數 值資料配合餘數定理,運用公式可將盤面編碼出一個 雜湊值(J lash Va1  ue)  ,因為這個 Value 要做為雜湊表
圖 25 9勻的盤面,展開 10447 個盤面,耗用 1 分 4 秒求得解
圖 26 Sl ash  And  Burn  '展開 38107 個盤面,耗用 4 分的秒求得解圖

參考文獻

相關文件

建立活動 默契 工作分配 遊戲規則 說明. 發下活動

小一,我來了!(升小一) 49.00 小豬漫遊通識樂園.

ª創設讓幼兒⾃主探索的環境 ª滿⾜幼兒快樂遊戲的情緒需要

可以設定遊戲音 效以及是否離開

學生在專注理解遊戲時, 不自覺的要理 解文字提供的線索, 閱讀的目的明確而 有意義, 有助練習認字讀句。..

運用學校的區角圖片,讓 兒童從「找不同」的遊戲

H2-7:不同 Facebook 得知管道的 Facebook 遊戲使用者在 Facebook 遊戲動機有顯著 差異。. H2-8:不同 Facebook 平均每次使用時間的 Facebook

為了改善唯讀記憶體無法寫入資料的限制,電腦廠商研發出數種除了「讀」還可 以「寫」的 ROM ,其中以 快閃記憶體 ( flash