五子棋專案的實現(二)博弈樹演算法的描述

2022-02-04 09:44:21 字數 1158 閱讀 9895

在我們的五子棋遊戲中,黑白兩方輪流下子,會產生不同的棋盤局面。對於乙個局面來講又有不同的應對方法,不同的應對方法,接著又會產生不同的局面。

也就是說黑方先下子,白方就有224種落子方法,如果黑方選擇了一其中的一步應對,那白方接下來就有223種方案和223種局面。

這樣看就是乙個又乙個的樹,但是在乙個五子棋遊戲裡面博弈樹的全部遍歷有10的41次方個局面,所以我們基本上就是設定乙個深度就不在搜尋了,用乙個評估函式對局勢進行判斷,用估計值來代替實際的搜尋值。而且搜尋演算法用的就是極大極小的搜尋來減少我們搜尋的工作量。我們可以把乙個五子棋的走步看成,黑方的節點估計值對標乙方子節點的最大值確定,同時乙方從葉節點擊的就是越小越對它有利,兩者倒退就可以退出根節點的估計值,這樣就可以確定根節點的出發的最佳走步。同時為了減少搜尋量,將葉節點的評估,跟就算倒退值與樹的生成同時進行。就可以減少搜尋的數量,還可以保持效果的不便。

//---------搜尋當前搜尋狀態極大值--------------------------------//

//alpha 祖先節點得到的當前最小最大值,用於alpha 剪枝

//beta 祖先節點得到的當前最大最小值,用於beta 剪枝。

//step 還要搜尋的步數

//return 當前搜尋子樹極大值

protected int findmax(int alpha, int beta, int step)

int rt = getbests(1 - sbw);

for (int i = 0; i < rt.length; i++)

return max;

}//-----------------------搜尋當前搜尋狀態極小值---------------------------------//

//alpha 祖先節點得到的當前最小最大值,用於alpha 剪枝

//beta 祖先節點得到的當前最大最小值,用於beta 剪枝

//step 還要搜尋的步數

//return 當前搜尋子樹極小值。

protected int findmin(int alpha, int beta, int step)

int rt = getbests(sbw);

for (int i = 0; i < rt.length; i++)

}return min;

}

五子棋專案的總結

五子棋遊戲的開發早就結束了,最終版本是v1.1。但是總結直到今天才做。這個五子棋專案中,我最滿意的,就是那個人工智慧演算法。提起人工智慧,學校裡大四時選過這門課,但幾乎沒有聽過,也不知道講了什麼。唯一有印象的是老師好像講了乙個生成偽隨機函式的公式,還叫我們做個程式模擬隨機函式的生成,反正我沒有做,所...

下五子棋的bot 五子棋演算法

include include include include include include jsoncpp json.h c 編譯時預設包含此庫 define n 7 每個節點的分支數 以下為各棋型的識別碼 權重 define win 1 4000 define lose 2 4000 defi...

五子棋專案結束總結 五子棋活動總結

五子棋活動總結 篇一 五子棋興趣小組活動總結 五子棋興趣小組活動總結 在這個學期裡,我們五子棋興趣小組的活動提高了學 生活動興趣,增長學生棋藝水平,陶冶學生的性情。現將本 小組的活動情況總結如下 一 基本情況 參加本學期五子棋興趣小組活動的同學分別來自四年 級一 二 三班,他們都自覺按照老師的要求,...