pascal 中國象棋 Alpha Beta演算法源程式及解釋

2025-01-28 05:10:19 字數 2595 閱讀 3401

1樓:網友

alpha值代表的是發起走棋一方(期望極大值)做能接受的最小值,搜尋極大值一方必須要找到乙個比alpha值更大的,否則這步棋就沒有任何意義。

beta值代表的是對手(期望極小值)所能接受的最壞值,搜尋極小值的一方必須找到乙個比beta值更小的一步棋,否則也是沒意義的(因為有更好的一步棋已經生成了)

先看函式呼叫方式。

int alphabeta(int depth, int alpha, int beta);

alphabeta(5, -infinite infinite);

infinite;

這裡假設是採用負極大值演算法的。

int alphabeta(int depth, int alpha, int beta)

if(depth ==0 ||isgameover())return evaluate();如果層數為0或者已達最終狀態則返回本步棋的估值。

for(each possible move)

makemove();

int val = alphabeta(depth - 1, -beta, -alpha);

unmakemove();

if(val >=beta)

return val;

if(val > alpha)

alpha = val;

當然 這裡還需要記錄這步最佳的走法。

return alpha;//返回最好的值。

beta值是你所能找到的最壞的一種情況,任何比它大的都沒意義。

int val = alphabeta(depth - 1, -beta, -alpha);

注意這個所謂的負極大的估值函式是估算本方的最優值,所以你的對手(子節點)估算出來的最優值如果大於你的-beta

例如-beta ==3 子節點估值== 4,那麼他實際上返回後(取負得-4)是小於你的beta,所以它是有意義的。再看這個-alpha,實際上是本層的beta是上一層節點(對手)的最大值的負值,如果任何本層節點取值,例如-alpha ==3,子節點估值為4,4 >=3,那麼返回的是-4,-4< -3(alpha那個地方),所以無意義,因為在本層所有節點又都是越取越大(負極大),所以本層也就沒必要找了,直接剪枝了。

2樓:網友

pascal寫中國象棋,請使用lazarus作為free pascal的ide,否則,你無法讓程式有難在演算法。 如果是雙人的還好, 如果是人機的, 確如所說, ai (人工。

j**a程式中的這段**什麼意思?有錯誤嗎? beta b = (beta)(alpha)x

3樓:網友

這是上下轉型的問題,你可以瞭解為記憶體中儲存了乙個beta物件(通過new之後分配記憶體),向上轉型和向下轉型只是引用這塊記憶體的方式不同,x首先通過(alpha)x轉換為alpha物件,這是返回(alpha)x返回alpha物件,呼叫的還是x原先分配的記憶體塊,只是通過alpha物件通過的方法進行引用,同理(beta)(alpha)x把引用物件型別有歸結到beta類,程式沒有錯誤。

4樓:沒有響應

連續2次的強制轉型???

說起來玩啥要轉1次1次不就夠了??

beta b = (beta)x

5樓:網友

這應該是錯誤的吧。。

演算法可以用不同的語言描述,如果用c 語言或pascal語言等高階語言來描述,則演算法實際上就是程式了。

6樓:海天盛筵

程式bai=資料結構+演算法。

du。演算法是一種複雜的問題。

zhi計dao算方法,可以用程式來描專述,屬但不等於程式。

演算法的描述方式有:自然語言,流程圖,偽**等。

1.自然語言的優勢:自然語言是人類的語言。所描述的演算法無需特殊訓練就很容易理解,而且比較靈活。

2.流程圖的優點:流程圖所描述的演算法清晰簡潔,且選擇結構易於表達,不依賴於任何特定的計算機和計算機程式語言,有利於不同環境的程式設計。

3.偽**的優點:它避免了程式語言嚴格而繁瑣的編寫格式,並且編寫起來很方便。同時,它具有格式緊湊、易於理解、易於過渡到計算機程式語言等優點。

7樓:網友

1、如果較bai真的話,你的描述是不對滴du:演算法zhi是針對某一類問題的dao計算方法,可以專用程式描述,但不等屬於程式。

2、求素數表的篩法,由古希臘eratosthenes發明,難道那時候也有c/pascal?你還要說「演算法=程式」?

3、你的命題放在今天可能還說的過去,那n年前呢?乙個經不起時間考驗的命題是偽命題,鑑定完畢。

c++程式設計 中國象棋源**

8樓:刀杏邇

這是乙個很深奧的問題,你可以問 趙鑫鑫 還有 王天一。

pascal語言二分訓練牛欄 求pascal源程式**,用二分做

9樓:

pascal寫中國象棋,請配嫌使或神用lazarus作為free pascal的ide,否則,你無法讓程式有難在演算法。 如果是雙人的還好, 如培團手果是人機的, 確如所說, ai (人工。

中國象棋入門,中國象棋棋譜入門

帥 將 紅方為 帥 黑方為 將 帥和將是棋中的首腦,是雙方竭力爭奪的目標。它只能在 九宮 之內活動,可上可下,可左可右,每次走動只能按豎線或橫線走動一格。帥與將不能在同一直線上直接對面,否則走方判負。仕 士 仕 士 是將 帥 的貼身保鏢,它也只能在九宮內走動。它的行棋路徑只能是九宮內的斜線。塞象眼象...

中國象棋古譜有哪些學習中國象棋用

對於新手來說,bai學習中國象棋du最先參zhi 考的書就應該是 橘dao中秘 了。當然,中國象專棋古譜還有屬很多,像著名的四大名譜 橘中秘 竹香齋 心武殘篇 淵深海闊象棋譜 當然還有很多,韜略元機 蕉竹齋 梅花譜 我知道中國象棋誕生於寶應年間。有哪些象棋古譜.如果要看的話,按照什麼順序 學習古譜首...

中國象棋基本走法中國象棋走法口訣

中國象棋一共有七種兵種,分別是車 馬 炮 兵 士 相 帥。車 馬 炮主要是負責進攻的棋子,而士 象是專職防守。車 可以縱著走也可以橫著走,所有乙個車能控制的點有17個,縱的有9個,橫的有8個。所有車是象棋裡面最厲害的棋子。它的吃子方式和走子方式是相同的,比如說在縱線上有敵對棋子,這個時候可以吃掉。馬...