Re: [惡搞] 懸賞踩地雷 AI!
原本設計WendlyAI時
怕執行效率太差
因此沒有將整個架構OO化
只將部分核心物件OO化
為了呼應AmosYang大大上一篇丟出的議題
原本是沒有考慮到這個議題的><
不過還好最核心的演算法
都切得很乾淨
思考了一下要修改成任意版本的地圖
並不會太花功夫
另一方面
我認為要擴充到任意版本的地圖
並不會對演算法造成任何花費
完全OO化確實會有一點花費(光function呼叫數就多很多了)
但是花費並不會太大
為了證明我的猜測
所以就動手寫了WendlyAI2_5
首先
針對任意版本的地圖的議題
AmosYang大大說的實作抽象化
是沒有說清楚抽象化什麼東西
如果是指核心演算法
我認為核心演算法就是對set作比對
所以我對核心演算法幾乎完全沒有修改
我的做法是把地圖抽象化
所以我定義了一個interface
interface IMap {
Set getTotal();
Set getNeighbor(Point point, int layer);
int getNum(Point point);
void setNum(Point point, int num);
int getSize();
boolean isValid(Point point);
boolean isMine(Point point, boolean isOrg);
boolean isUnknow(Point point, boolean isOrg);
boolean isNum(Point point, boolean isOrg);
boolean isClose(Point point1, Point point2);
}
以上這些API都是我的核心演算法所需要的功能
只要該種類型地圖正確提供這些API實作
我的AI就能正常運作
其中Point為一個3個自由度的point
目前認為3個自由度應該就能通吃所有的地圖(我還想不到超過範圍的)
如果真的有超過範圍的
也可以將Point進一步抽象化
這部份部會是大問題就是了
接下來
我實作了一個CartesianMap2D
然後將個CartesianMap2D當作IMap餵給核心演算法
一切就結束了
當然順便把所有的code都OO化了
接下來測試PK500張地圖所花費的時間
WendlyAI2_4 VS WendlyAI2_4 43秒
WendlyAI2_5 VS WendlyAI2_5 53秒
確實拖慢了一點時間
不過差別不大
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.32.127.112
→
10/12 09:44, , 1F
10/12 09:44, 1F
討論串 (同標題文章)