製作混亂時鐘弈棋AI計畫

分享讨论IT相关的内容
头像
ejsoon
圈圈精英
圈圈精英
帖子: 2175
注册时间: 2022年 11月 18日 17:36
为圈友点赞: 96 次
被赞次数: 92 次
联系:

製作混亂時鐘弈棋AI計畫

帖子 ejsoon »

前些日子我在製作和完善立體生成器,弈棋AI的事情就延後了。現在我將開始啟動:製作「混亂時鐘」弈棋AI計畫。

我做了四個動畫來介紹混亂時鐘的四種結局:共贏、同輸、樿贏、樿輸。

跟其它弈棋不同的是,混亂時鐘的平局分成了兩種:共贏和同輸。也就是說,如果只能是平局的話,也要優先選擇共贏。在自己沒法贏的情況下,就要阻止對方獲勝。

混亂時鐘規則說明:https://ejsoon.win/chaosclock/
https://ejsoon.win/
天蒼人頡:發掘好玩事物
头像
ejsoon
圈圈精英
圈圈精英
帖子: 2175
注册时间: 2022年 11月 18日 17:36
为圈友点赞: 96 次
被赞次数: 92 次
联系:

Re: 製作混亂時鐘弈棋AI計畫

帖子 ejsoon »

生成了一個經典棋局,大家想一下,欆的第一步應先走哪個?

图片
https://ejsoon.win/
天蒼人頡:發掘好玩事物
头像
ejsoon
圈圈精英
圈圈精英
帖子: 2175
注册时间: 2022年 11月 18日 17:36
为圈友点赞: 96 次
被赞次数: 92 次
联系:

【視頻講解】混亂時鐘

帖子 ejsoon »

錄了五個視頻來講解混亂時鐘。當然這只是我昨日隨機生成的一個局面,混亂時鐘有無數種局面,每種局面的思路都不盡相同。


混亂時鐘基本規則





混亂時鐘(2)為何乙方天然落後至少一步





混亂時鐘(3)乙方如何吃到奇數位上的偶數棋子





混亂時鐘(4)甲方偷跑!





混亂時鐘(5)乙方妙計取得共贏

https://ejsoon.win/
天蒼人頡:發掘好玩事物
头像
ejsoon
圈圈精英
圈圈精英
帖子: 2175
注册时间: 2022年 11月 18日 17:36
为圈友点赞: 96 次
被赞次数: 92 次
联系:

Re: 製作混亂時鐘弈棋AI計畫

帖子 ejsoon »

根據研究,該局最終是甲方必勝。
https://ejsoon.win/
天蒼人頡:發掘好玩事物
头像
ejsoon
圈圈精英
圈圈精英
帖子: 2175
注册时间: 2022年 11月 18日 17:36
为圈友点赞: 96 次
被赞次数: 92 次
联系:

Re: 製作混亂時鐘弈棋AI計畫

帖子 ejsoon »

對於這個局面,如果乙方先走8,則甲方走6可勝;如果乙方先走11,則甲方走5可勝。

但對於一般人而言,面對一個沒研究過的局面,他是算不到這麼深的。

可以說乙方如果走8,她已經達到了第六層,甲方如果會應6,也達到了第六層。乙方如果開始是先走11,那是第七層,甲方應5亦為第七層。

人類只有通過不斷的演練,才能破解某些複雜的局面。這跟象棋殘局的情況差不多。
https://ejsoon.win/
天蒼人頡:發掘好玩事物
头像
ejsoon
圈圈精英
圈圈精英
帖子: 2175
注册时间: 2022年 11月 18日 17:36
为圈友点赞: 96 次
被赞次数: 92 次
联系:

Re: 製作混亂時鐘弈棋AI計畫

帖子 ejsoon »

後面我將開始製作混亂時鐘的AI。

首先要做規則及結局判定。

因為效率有點低,並且AI對於我而言還處於學習探索的階段,因此這部份預先估計要做五日。

局面用一個字符串保存:

let cchao="2,8,6,4,9,1,7,3,11,10,12,5;1";

其中分號後面是當前輪到哪位,1表示輪到乙方,-1表示輪到甲方,0表示結束。2表示甲方剛放棄行動輪到乙方,-2表示乙方剛放棄行動輪到甲方。

分號前面是鐘面位置,即2放在1點鐘位置,8放在2點鐘的位置,依次類推。如果是0表示空位。

場上沒有的數字,那就是被拿在了手上。雙數在乙方手上,甲數在甲方手上。
https://ejsoon.win/
天蒼人頡:發掘好玩事物
头像
ejsoon
圈圈精英
圈圈精英
帖子: 2175
注册时间: 2022年 11月 18日 17:36
为圈友点赞: 96 次
被赞次数: 92 次
联系:

Re: 製作混亂時鐘弈棋AI計畫

帖子 ejsoon »

https://ejsoon.win/
天蒼人頡:發掘好玩事物
头像
ejsoon
圈圈精英
圈圈精英
帖子: 2175
注册时间: 2022年 11月 18日 17:36
为圈友点赞: 96 次
被赞次数: 92 次
联系:

用機動性判斷局勢

帖子 ejsoon »

機動類

初始每個棋子都有「機動性」,就是它可能走到的地方,寫進一個數組。

如:

move_available={
1:[1,2,...],
3:[2,5,8,11]
}

當一個棋子被吃掉,則它失去機動性(從機動類中移除)。

當一方行動結束,若棋子處於正位,則所有棋子的機動性要重新計算。


卡住判定

當一個棋子無法往前走一步,它的機動性是空。換句話說,這個棋子被卡住了。

這些被卡住的棋子所處的位置,如果處於其它棋子的機動範圍,則它能被走子解救。否則不能。

如果它處於一個己方能落子的地方,己方手上也有這顆棋子,則能被落子解救。

如果它不處於己方能落子的地方,或者兩顆原本能互相落子解救的棋都同時被卡住(雙扣),則不能被落子解救。

一方只要有一顆無法走且不能被解救的棋子,那他就是「被卡住」了。

勝負提前判定


甲方被卡住,己方全部到手:甲輸乙贏
乙方被卡住,甲方全部到手:乙輸甲贏
雙方都被卡住,同輸。
雙方都沒有被卡且不會被卡,場上正位棋子數量判斷輸贏,相差1為共贏。

舉例說明

第五個視頻02:04,這時輪到甲方,如果走6吃掉11,則為同輸,因為3跟4都是被卡住的棋子,場上唯一有機動性且能吃到3和4的只有11,把11吃掉,那3跟4將不處於任何棋子的機動範圍內。

行動優先


甲方永遠不會主動走12

一方似乎不會走使自己被卡住的棋,但是其實未必,因為卡住後,他就可以停在那裏等待有機動性的棋子前來解救。

乙方落後至少一步

乙方處於單數位的棋子,我們認為它們天然是被卡住的,只能用單數棋子走子解救,乙方無法落子解救。

只要乙方的這些棋子不處於單數棋子的機動範圍,則乙方必輸(同輸或乙輸甲贏)。

機動性分析

12沒有機動性,6的機動性也很差,最多只能走到兩個地方。

不過對於「機動性」而言,並不特別屬於哪一方,因為場上不處於正位的棋子誰都可以走。5跟7的機動性是最好的,但它不屬於甲方,反倒是乙方經常可以利用。

1跟11原本機動性也很好,但是很容易被阻擋。

路是一步一步走的,不管它機動性再好都會被卡住(除了12)。剛出場時,所有棋子機動性都是滿格(除了12),但越往後機動性會越少。
https://ejsoon.win/
天蒼人頡:發掘好玩事物
头像
ejsoon
圈圈精英
圈圈精英
帖子: 2175
注册时间: 2022年 11月 18日 17:36
为圈友点赞: 96 次
被赞次数: 92 次
联系:

Re: 製作混亂時鐘弈棋AI計畫

帖子 ejsoon »

代码: 全选

stack.h:82:31: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for (int i = index; i < capacity - 1; i++) {
                             ~~^~~~~~~~~~~~~~
根據這裏的描述,在int前加一個unsigned就不會有警告了。雖然好像問題不大,C++警告有點太多了。
https://ejsoon.win/
天蒼人頡:發掘好玩事物
头像
ejsoon
圈圈精英
圈圈精英
帖子: 2175
注册时间: 2022年 11月 18日 17:36
为圈友点赞: 96 次
被赞次数: 92 次
联系:

手動生成一個混亂時鐘經典局面

帖子 ejsoon »

图片

這個局面是一次性生成的,正好屬於「二欆在單」。完全隨機,閉眼生成。

玩棋還是盡量玩實物,電腦只是用來證明它的可玩性和公平性。

本局乙方必走11,否則難以共贏。

乙方走完11吃掉2之後,10仍是一個難處理的棋子,但是乙方最終都能夠找到辦法吃到10(需通過同輸威脇來獲得共贏)。
https://ejsoon.win/
天蒼人頡:發掘好玩事物
头像
ejsoon
圈圈精英
圈圈精英
帖子: 2175
注册时间: 2022年 11月 18日 17:36
为圈友点赞: 96 次
被赞次数: 92 次
联系:

Re: 製作混亂時鐘弈棋AI計畫

帖子 ejsoon »

图片
https://ejsoon.win/
天蒼人頡:發掘好玩事物
头像
ejsoon
圈圈精英
圈圈精英
帖子: 2175
注册时间: 2022年 11月 18日 17:36
为圈友点赞: 96 次
被赞次数: 92 次
联系:

Re: 製作混亂時鐘弈棋AI計畫

帖子 ejsoon »

图片
https://ejsoon.win/
天蒼人頡:發掘好玩事物
头像
ejsoon
圈圈精英
圈圈精英
帖子: 2175
注册时间: 2022年 11月 18日 17:36
为圈友点赞: 96 次
被赞次数: 92 次
联系:

Re: 製作混亂時鐘弈棋AI計畫

帖子 ejsoon »

算法是對的,但是只能算殘局,因為數據量太大,內存不夠。

這兩日改換成廣度算法,也很難算。

因此後面要增加更多的中局條件判定,越多越好。

但是工作量有點太大了,因此可能這個混亂時鐘的AI計畫這回是要爛尾了。
https://ejsoon.win/
天蒼人頡:發掘好玩事物
头像
ejsoon
圈圈精英
圈圈精英
帖子: 2175
注册时间: 2022年 11月 18日 17:36
为圈友点赞: 96 次
被赞次数: 92 次
联系:

Re: 製作混亂時鐘弈棋AI計畫

帖子 ejsoon »

但是至少明確了方向,那就是:中局直接判定勝負,要增加更多的條件判定,能夠在五層時就剪掉一部份,並一直收斂在一個範圍內。
https://ejsoon.win/
天蒼人頡:發掘好玩事物
头像
ejsoon
圈圈精英
圈圈精英
帖子: 2175
注册时间: 2022年 11月 18日 17:36
为圈友点赞: 96 次
被赞次数: 92 次
联系:

Re: 製作混亂時鐘弈棋AI計畫

帖子 ejsoon »

做個弈棋AI好像有點太難了!
https://ejsoon.win/
天蒼人頡:發掘好玩事物
回复

在线用户

正浏览此版面之用户: 没有注册用户 和 2 访客