因此,我试图为国际象棋游戏创建一个minimax树,每当它开始构建树时,它都会弄乱棋子的颜色和位置。它是这样工作的,它会创建一个董事会列表,该列表的大小为合法举动的数量,然后在董事会上显示每个合法举动。然后创建另一个层,在其中收获相同的东西,但第二层依此类推。这里的问题是:
r n b q k b。 r
p p p p p p p p
。 。 。 。 。 N. 。
。 。 。 。 。 。 。 。
。 。 。 。 。 。 。 。
。 。 。 。 。 N. 。
P P P P P P P P P
R N B Q K B。 R
这是黑色运动后的棋盘,请注意骑士的颜色随着运动而改变了。我检查了每只芬,看看轮到谁了,结果全都弄乱了,甚至在操纵芬的颜色后仍然没有成功请帮助我。
代码:
from tensorflow import keras
from chess_data import convert_to_list
import time
import chess.pgn
import numpy as np
model = keras.models.load_model('model.h5')
def general_value(board):
good, bad =0,0
score = 0
index = {1:1, 2:3, 3:3.5, 4:5, 6:9, 5:100,7:-1, 8:-3, 9:-3.5, 10:-5, 12:-9, 11:-100, 0:0}
for i in board:
for j in i:
if index[int(j)] > 0:
good += index[int(j)]
if index[int(j)] < 0:
bad += index[int(j)]
score = good+bad
return score
def legal_moves(board):
all_moves = []
for e in board.legal_moves:
all_moves.append(e)
return all_moves[:2]
def node(board, move):
print(board)
formated_move = chess.Move.from_uci(str(move))
print(formated_move)
new_board = chess.Board(str(board.board_fen()))
print(new_board.turn)
new_board.push(formated_move)
print(new_board.turn)
print(new_board)
# value = evalute(board)
copy = convert_to_list(new_board)
data = np.array(copy).reshape(1, 8, 9)
# value = model.predict_on_batch(data)
# print(value)
value = general_value(copy)
return new_board, value
def layer(board):
legal = legal_moves(board)
new_boards = []
for i in legal:
new_boards.append(node(board, i))
return new_boards
def minimax(board, turn):
if turn == 1:
obi = max
if turn == -1:
obi = min
first_layer = layer(board)
second_layer = []
third_layer = []
for i in first_layer:
second_layer.append(layer(i[0]))
for i in second_layer:
for l in i:
third_layer.append(layer(l[0]))
print(third_layer)
layer_trace = [third_layer[i::len(first_layer)] for i in range(len(first_layer))]```