推 s3748679:推前面的想法與插圖.. 後面的問題@_@" 交給樓下加油 12/07 00:10
推 cowbaying:這串差不多可以收精華了 XDDD 12/07 01:08
推 cowbaying:暫時收錄在z-4-13-7-22 12/07 01:10
→ cowbaying:幫我更正一下 是z-4-13-7 12/07 01:11
推 LayerZ:睡前靈光一閃,如果是找必敗棋步呢.. 12/07 01:38
→ LayerZ:感覺有兩個問題,計算權重應該只有8個方向有意義吧,再判斷 12/07 01:48
→ LayerZ:有沒有被擋住或是牆壁,才會歸零,另外就是防守,有時候對 12/07 01:49
→ LayerZ:方要連起來會不得不防守,原本預測就會被打亂? 12/07 01:50
→ LayerZ:變成,黑、白要同時計算權重,在勝利的權重減掉對方會勝利 12/07 01:51
→ LayerZ:的權重才會做出更好的預測? 不然就要計算這步下去幾步內會 12/07 01:52
→ LayerZ:不會被封死或被勝利,如果必敗就跳過,再來選比較好的? 12/07 01:52
→ LayerZ:唔,我又發作了= =我臨時想的可能沒你考慮的多,如果有亂七 12/07 01:53
→ LayerZ:八糟的地方歡迎打臉(死 12/07 01:53
推 ddavid:如果是要用窮舉逆推,你要把所有跑過的盤面都存下來並建立 12/07 04:36
→ ddavid:關聯,也就是你要知道從那個盤面走一步可以到哪些盤面。 12/07 04:37
→ ddavid:然後就是做逆推判斷了,簡單的幾點判斷: 12/07 04:37
→ ddavid:1.一個輪到X下的盤面只要能通往任何一個被標為勝的盤面,那 12/07 04:38
→ ddavid: 這個盤面就也是該被標為勝的盤面。 12/07 04:38
→ ddavid:2.一個輪到X的盤面只要所有可通往的盤面都被標為敗,那這個 12/07 04:39
→ ddavid: 盤面就要標為敗。 12/07 04:40
→ ddavid:上面那些勝、敗都要改為X勝跟X敗XD 12/07 04:40
→ ddavid:然後就用以上原則,從下到結束確定勝負的盤面逆推回去這樣 12/07 04:41
推 Grunt:哈哈哈,開頭的影片快把我笑死了 12/07 09:40
→ LaPass:等等,那是刪除多餘節點後的樹才會通往全勝。 12/07 09:44
推 LayerZ:"要通往全勝"本身就是個盲點了不是? 12/07 09:51
→ LayerZ:這句話我解釋成,"去掉所有不會贏的節點,再加入所有會贏的 12/07 09:53
→ LayerZ:節點"..這東西不管怎麼用演算法包起來,還是窮舉法阿 12/07 09:53
→ LaPass:找路徑好像還蠻難的.... orz..... 12/07 11:41
推 LayerZ:一個節點找下去就是一個tree 如果找到底是能破解所有組合 12/07 12:45
→ LayerZ:問題應該在怎麼加判斷,找到第幾層該收手? 12/07 12:45
→ LaPass:那我就來寫個網頁板的 XD 12/07 12:51
推 s3748679:難道就不能用窮舉法把結果存起來.. 對戰時再取要的部分? 12/07 20:37
推 cowbaying:這個資料結構要很強... 12/07 20:43
→ LaPass:好像翻到Alpha-Beta 搜索之類的關鍵字,可是我看不懂 = = 12/07 21:04
→ LaPass:誰來個連半路出家的看的懂的教學啊 囧" 12/07 21:05
推 yoco315:觀念好像怪怪的 XD 12/07 21:35
→ LaPass:那邊怪怪的? @@ 12/08 02:29
→ ddavid:首先我先澄清一下,當你提到「窮舉法」的時候基本上我假設 12/08 02:35
→ ddavid:你是要算到完的,這種情況下就是用我的方法逆推回去就好。 12/08 02:36
→ ddavid:如果你並沒有要算到完,那你就必須要寫有一個基本規則之外 12/08 02:37
→ ddavid:的評分機制(人為制定的)來算出每個子節點的分數。Alpha- 12/08 02:37
→ ddavid:Beta就是往下算個n層,然後又從那n層逆推回來找出最佳的分 12/08 02:38
→ ddavid:數。那個逆推過程其實很接近窮舉逆推,只是把「必勝」跟「 12/08 02:38
→ ddavid:必敗」調整為分數的高低。 12/08 02:39
→ ddavid:比如一個輪到我方下A node,其child分別為10 20 30分,因為 12/08 02:40
→ ddavid:是輪我下,所以我一定可以選最高分的,因此A就可計為30分。 12/08 02:40
→ ddavid:反之一個輪對手下的B node,其children分別為10 20 30(都 12/08 02:41
→ ddavid:當做是你的得分,實際寫時有可能要考慮分數是我方的或對方 12/08 02:41
→ ddavid:的),那因為你要認為對手一定可以走到對你最不利的下法, 12/08 02:42
→ ddavid:因此B node的分數逆推上來計為10分。就這樣一路回推回目前 12/08 02:42
→ ddavid:著手的node,選最高分的走下去這樣。 12/08 02:42
→ ddavid:簡單原則:我方著手的分數是所有子節點取最高分,對方著手 12/08 02:43
→ ddavid:的分數是所有子節點取最低分。 12/08 02:43
→ ddavid:剩下就看你推的層數及Evaluation function夠不夠好了這樣。 12/08 02:44
→ ddavid:然後因為取最高最低的情況,就會有些東西你發現不用算完就 12/08 02:45
→ ddavid:肯定可以被cut掉,那就是alpha-beta裡面做的pruning了 12/08 02:46
推 ddavid:致歉修正一下,上面那個逆推過程其實只是Minimax這樣,加入 12/08 02:49
→ ddavid:預測函數做pruning之後才是alpha-beta這樣XD 12/08 02:49