2012-11-05 89 views
1

我正在開發一款遊戲(坦克遊戲2D),(例如 - link)AI玩家。我的玩家將是另外5名玩家(AI也是),他們爲獲得最大的硬幣而玩,隨機出現在網格的某處(請看上面給出的圖片)。玩家也可以互相射擊。健康包也隨機出現在網格中的某處。Min-Max遊戲評估功能

因此,爲了使用最小最大樹,找出最聰明的下一步,我必須建立一個評估函數。問題出現在這裏,我以前沒有這種評估功能的經驗。我是否應該遵循任何指導原則,或者有一個共同的方法來做到這一點我的意思是我有我的想法,我不知道它是否會做工作。你能告訴我哪個區域應該學習嗎?我搜索了它,發現了很多東西,但沒有適當的教程或類似的東西。謝謝。

+1

所以,問題是,你如何編寫評估函數?有很多這樣的例子,但他們顯然專門針對他們的領域。國際象棋棋盤評估功能在這裏無助於你。告訴我們你的想法。 –

+0

是的,國際象棋評估功能沒有幫助。我想過這樣的事情。我必須優先考慮球員的需求。最大優先級是玩家不應該被殺死,所以如果其他玩家向我射擊,我應該立即從子彈的軌道上跳出來。接下來收集硬幣。像智者一樣,我可以優先考慮需求併爲每個人分配一個固定值。評估如此發生,它會返回每個需求的乘積與相應的常數值的和。最大優先需求將獲得更高的價值常數。 – Sudheera

+1

聽起來像一個體面的開始。似乎你的優先事項應該根據你的健康情況而有所不同。如果你身體健康,追求健康包裝應該是非常低的優先。但是,如果你在死亡的門口,那麼追求健康包比硬幣更有價值。 –

回答

5

基本上做的就是遊戲的評價最好的辦法是:

  • 玩遊戲 - 試試,看看你嘗試什麼情況下避免的,哪些是好的。嘗試將這些情況制定爲一般評估。
  • 研究 - 有人可能已經研究過這個或類似的問題,如果有的話 - 也許有一些文章或其他材料暗示啓發式功能。

我會做如下:

  1. 從最近的敵人創建一組啓發式功能,遊戲(距離每個描述一個方面,火線上的敵人,我的健康吧,...)。我會盡可能地玩這個遊戲來擴展這個列表,當然也可以在網上尋找其他人可能爲這個/類似遊戲找到的想法。
  2. 從步驟之一,我們實際上得到了一組函數:h_1(board),h_2(board),...,h_n(board) - 但我們仍然不知道什麼是我們的啓發式功能
  3. 我會盡量找一些參數a_1,a_2,...,a_n,創造我的啓發函數:
    h(board) = a_1 * h_1(board) + a_2 * h_2(board) + ... + a_n * h_n(board
    現在的問題是 - 如何獲得這些參數。請注意,現在我們有一個優化問題。
    這個特定問題的一個解決方案是蒙特卡羅學習。

蒙特卡洛學習:

蒙特卡洛學習的想法是創建一個代理列表(AIS),每個都有一些隨機值初始化爲a_1,...,a_n - 並讓他們之間的比賽。
比賽結束後,根據代表最好的代理商,爲每位代理商更改a_1,...,a_n的值,然後重新運行錦標賽。 (其中一種方法與Genetic Algorithms中的「代」步驟類似 - 交叉和突變,但也有其他方法)。

最後 - 蒙特卡洛學習過程應該會給你很好的價值a_1,...,a_n - 這將給你一個很好的董事會啓發式功能。

+0

與「蒙特卡羅學習」類似,訓練神經網絡例如通過[時間差異](http://www.research.ibm.com/massive/tdl.html)可以在某些領域非常成功。在西洋雙陸棋中,從一張空白的石板開始,實際上產生了令人驚訝的更好的AI玩家。 –

+0

那麼,我真的很感激你上面提到的,謝謝。 – Sudheera