我一直在尝试使用带有alpha-beta剪枝的minimax为计算机实现AI,但我面临着一个无法识别的bug。算法应该计算自己和其他玩家的所有可能的走法,但它没有按应该的方式进行回放。
下面是我的minimax代码:
public int minimax(int[] board, char symbol, int alpha, int beta, int depth = 2)
{
int win = util.checkwin(board);
int nsymbol = (symbol == 'X' ? 1 : 2);
int mult = (symbo
我在游戏中使用了MinMax算法,而且由于MinMax递归的可能性很大,即使使用"alpha-beta剪枝“,也要花很长的时间。
我的代码看起来有点像这样:
min(state,depth,alpha,beta):
if stopingCond:
return value
for moves in allmoves:
state.do(move)
beta = min(beta, max(state,depth,alpha,beta) )
if alpha >= beta: return beta
这是我的minimax方法,它实现了alpha beta剪枝和记忆化:
public int[] newminimax499(int a, int b){
int bestPos=-1;
int alpha= a;
int beta= b;
int currentScore;
//boardShow();
String stateString = "";
for (int i=0; i<state.length; i++)
我制作了一个Tic Tac脚趾游戏,使用Minimax和Alpha Beta剪枝。我想为Tic (10x10)制作一个电脑人工智能,但它的游戏树的大小却是惊人的大。
我的代码是这样的,我只需要改变两个变量来改变板的大小+连续需要的单元格才能获胜。示例:
boardSize = 3 // This is for 3x3 tic tac toe
boardSize = 4 // This is for 4x4 tic tac toe
boardSize = 10 // This is for 10x10 tic tac toe
和
winStreak = 3 // Need to make 3 c
我正在编写一个纸牌游戏( Uno / Mau Mau类型的),我有这样的设计问题:
这张牌里有两堆卡片,一堆是正面的,另一堆是背面的。当一个游戏正在进行中,玩家抛出一张牌,它应该进入“脸”堆叠。然而,当游戏结束时,最后一个玩家的牌应该回到“背靠背”的堆叠上。
1)甲板是否有两种增加卡的方法(addToFacesStack和addToBacksStack)
或
2)这副牌是否应该有一个addCards方法,并决定自己该把牌放哪一堆(这副牌必须知道游戏的状态--正在进行/完成)?
另外,当游戏正在进行中,玩家(谁知道规则并选择相应的牌)将扑克牌扔到“面”堆叠上时,这副牌是否应该“重新检查”玩家的移