在計算機博弈程式中,通常採用是Alpha-Beta算法,為了進一步提高搜尋速度,先後又出現了一些改進的算法。視窗搜尋便是博弈樹搜尋算法的最佳化。
基本介紹
- 中文名:視窗搜尋
- 套用學科:計算機
- 適用領域範圍:博弈樹搜尋
渴望搜尋
算法思路
算法流程


intFalPhabeta(intnPly,intalpha,intbeta){ curreent=-INFINITY//可能的最佳值為最小值 if(Gameove) rerturn evaluation();//勝負己分,返回估值 if(depth==0)//葉子節點 return eveluation();//調用估值函式,返回估值 for(each Possible move m)//對每一種可能的行動進行測試 { MakeMove(m); //虛擬採取這個行動 value=-Falphabeta(nPly,-beta,-alPha);//遞歸搜尋子節點 UnMakeMove(m);//分析後復原原來的局面 if(value>current) { current=value; //保留極大值 if(value>=alpha) alpha=value;//修改邊界 } if(alpha>=beta) break;//beta剪枝 } return current;//返回最大值}

int AsPirationseareh(int depth){ int x=FAlphaBeta(depth-1,-INFINITY,INFINIYT);//計算出n一1層的最佳值 int alpha=X-WINDOW: int beta=X+WINDOW int current=AFlPhaBeta(depth,alpha,beta);//確定左右邊界,進行搜尋 if(current<alpha) current=FAIphabeta(depth,-INFINITY,alpha);//處理估值偏高情況 if(current>beta) current=FAlphaBeta(depth,beta,INFINIYT);//處理估值偏低情況 return current;//返回估值}極小視窗搜尋
算法思路
算法流程

intPrinciPalVariation(int nPly,int alpha,int beta){ if(Gameover) return evaluation();//勝負已分,返回估值 if(depth==0)//葉子節點 return evaluation();//調用估值函式,返回估值 MakeMove(m);//測試第一個節點 best=-PrincipalVariation(nPly-l,-beta,-alpha) //計算第一個節點的值 UnMakeMove(m);//分析後復原原來的局面 fore(each possbiel move m)//對每一種可能的行動進行測試(從第二個節點) { if(best<beta)//是否不能進行beta剪枝 { MakeMove(m);//虛擬採取這個行動 value=-Principalvariation(nply-l,-alpha-l,-alpha);//極小視窗測試 if(value>alpha && value<beta)//估值過低,重新完整估值 best=-PrineipalVariation(nPly-l,-beta,-value); else if(value>best)//命中 best=value; unMakeMove(m)://恢復行動 } } return best;//返回最大值}