minimax

    2熱度

    1回答

    我一直在穩步研究國際象棋程序,並有極小的搜索,迭代加深和換位表即將到來。然而,目前,我有一個我孤立在我的靜止搜索中的錯誤。我很沮喪,因爲我直接複製了一個僞代碼實現,但它似乎並沒有爲我工作。我在網上找到的其他實現給了我類似的結果。 這個錯誤似乎錯誤地計算了對手「最佳」捕獲時,當多個recaptures可用,並作爲結果返回一個值通常有利於調用搜索一側。 發動機分別用C#編寫 public static

    1熱度

    1回答

    我已經拉出我的頭髮試圖找出如何在最小最大算法,並希望α-β剪枝算法的工作。我對發生的遞歸感到困惑。 首先,每個中間板都會得分嗎?或只有終端遊戲板。 其次,究竟返回了什麼?該計劃如何知道下一步行動的位置?我發現即時消息應該返回棋盤得分(tictactoe,-1,0,1),但程序如何知道下一步應該進行哪一步。 我試圖找到一個簡單的C或C++程序來證明這一點,但我沒有多少運氣。我想學習這個算法,我可以爲

    17熱度

    5回答

    我試圖實現與α-β剪枝在Java中的跳棋遊戲極小。我的minimax算法完美運作。我的代碼與alpha-beta代碼一起運行。不幸的是,當我玩標準極小極小算法的1000場比賽時,alpha-beta算法總是落後50場左右。 由於α-β修剪不應該降低動作的質量,就需要實現它們的時候,有些事情是錯誤的。但是,我已經拿出筆和紙,繪製假設的葉節點值,並使用我的算法來預測它是否會計算正確的最佳移動,並且看起

    1熱度

    2回答

    我正在寫一個Nine Men's Morris遊戲,並且到目前爲止我有一個Negascout搜索,它工作得很好。然而,我想補充迭代加深,所以我想出了這個代碼: public Move GetBestMove(IBoard board, int depth) { //Search limits (ms this.maxTime = 9000; //Set ini

    0熱度

    1回答

    我從維基百科編寫了Alpha-Beta修剪。我正在嘗試寫一個連接四AI。該函數應該返回列號,然後我的主要功能發生了變化。

    1熱度

    2回答

    我必須創建一個AI,它必須與其他AI進行競爭。 兩個AI都將在相同的硬件上運行,具有相同數量的處理時間和內存。我知道對手AI將使用alpha beta修剪的minimax算法。 現在我的問題是 - 有什麼辦法打這樣的對手?如果我自己使用minimax - 那麼AI就完全預測對方的動作,並根據遊戲的固有屬性(首先移動勝利等)來解決遊戲。 明顯的解決方案是以某種方式進一步提前考慮可能的更好的評估方法

    1熱度

    2回答

    我將在我的學校參加一個棋盤遊戲AI競賽,並試圖提出一些想法來獲得優勢併發性。我很可能會處於劣勢,因爲我將在java中實現它,並且我明白c或C++會更快。 看起來好像你不能把遊戲樹分成兩半,因爲移動順序應該先保留最佳移動,看起來很難或甚至不可能傳達當前的alpha/beta在給定的深度。我將要使用換位表以及需要同步的換位表。 除了搜索,是否有第二個線程可以做的事情,這可能有助於搜索或提供某種類型的速

    3熱度

    1回答

    對於像井字遊戲這樣的遊戲,兩個玩家可以很好地描述最小最大值算法。我需要爲坦克遊戲寫一個AI。 在這場比賽中,坦克必須在牆上形成障礙物的迷宮中移動。目標是收集硬幣堆。如果只有兩個玩家可以實現minimax算法。但是如何實現它超過兩個? 由於每一位玩家都會嘗試最大化自己的獲勝優勢。我想不出所有的球員都是一個敵人,試圖減少我的獲勝優勢,創造兩個球員的水平,就像原來的極小極大算法一樣。 如果問題不是很好,

    2熱度

    1回答

    我開始在JavaScript中編寫一個國際象棋程序,如果我發現需要讓服務器參與國際象棋AI邏輯,那麼至少仍然是可信的在我可能無知的意見。我的問題很簡單:用於JavaScript的客戶端FileSystem API是緩存minimax結果以供將來參考的合理方法,還是因爲結果數據太大而無法存儲在任何位置?我的想法是,它可以用來讓AI適應用戶,通過訪問先前的決定來「學習」,而不是每次手動重新確定它們。這

    0熱度

    1回答

    OK,我的問題應該聽起來很熟悉的人誰曾與棋盤遊戲編程出場,所以在這裏它是: 我已經實現了極小的變化算法(返回移動而不是最小/最大值)。 我也嘗試將它設置爲alpha-beta,儘管它最終導致完全失敗。 所以,這裏是我的代碼極小: Move* Board::miniMax(int depth) { return this->maxMove(1, depth); } Move* Bo