问题描述
我正在尝试为黑白棋游戏编写极小极大算法。我的代码从它应该选择的列表中选择第一个可用的点,当有更好的点可以使用时:
例如这是我的驱动程序代码:
board = np.array([['e','B','B'],['R','R','R'],['B','e'],['e','e','e']])
emptyspots = [[0,0],[2,3],[3,1],3]]
player = 'B'
otherplayer = 'R'
takenred = [[1,[1,2],2]]
takenblue = [[0,[0,0]]
validblue = [[0,3]]
validred = [[0,0]]
print(BestMove(deepcopy(board),deepcopy(emptyspots),player,otherplayer,deepcopy(takenred),deepcopy(takenblue),deepcopy(validblue),deepcopy(validred)))
我的代码选择[0,0],什么时候应该选择[2,3]
这是我实际的 AI minimax 代码:
def evaluation(board,emptyspots,takenred,takenblue,validblue,validred,depth):
if depth==0:
if len(takenblue) > len(takenred):
return 10
if len(takenblue) < len(takenred):
return -10
return 0
def minimax(board,depth,ismaximizing,validred):
score = evaluation(deepcopy(board),deepcopy(validred),depth)
if score == 10:
return score
if score == -10:
return score
if score==0:
return 0
if ismaximizing:
best = -1000
for q in validblue:
board,newtakenred,newtakenblue = main(deepcopy(board),q,otherplayer)
best = max(best,deepcopy(minimax(deepcopy(board),deepcopy(newtakenred),deepcopy(newtakenblue),depth -1,not ismaximizing,deepcopy(validred))))
return best
else:
best = 1000
for z in validred:
board,z,otherplayer)
best = min(best,deepcopy(validred))))
return best
def BestMove(board,validred):
bestvalue = -1000
bestmove = [-1,-1]
for j in validblue:
board,j,otherplayer)
movevalue = minimax(deepcopy(board),4,True,deepcopy(validred))
if movevalue > bestvalue:
bestmove = j
bestvalue = movevalue
return bestmove
非常感谢任何帮助
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)