Я пытаюсь внедрить PVS в свой Athello AI, как способ улучшить альфа -бета -проконтинг, но когда я его реализую, на самом деле это медленнее примерно вдвое, мой вопрос: как бы я его реализовал и могу Я делаю это, сохраняя Мин/Человек, и не необходимо превратить это в единую функцию. Я приветствую любые предложения. Я грубо понимаю, как работает PVS, но я все еще смущен некоторых вещах. Моя функция оценки дает положительное число для x и отрицательное для y < /p>
def max_step(board,depth,path,a,b):
if game_end(board):
return score_end(board)
if depth == 0:
return score(board)
my_moves = {i:score((k := make_move(board,i,"x"))) for i in find_indexses(board,"x")}
if len(my_moves) == 0:
return min_step(board,depth-1,path,a,b)
results = []
my_sorted_moves = dict(sorted(my_moves.items(), key=lambda item: item[1],reverse=True))
result = None
for move,index in enumerate(my_sorted_moves.keys()) :
new_board = make_move(board,index,"x")
if index == 0:
result = min_step(new_board,depth-1,path+[board],a,b)
else:
result = min_step(new_board,depth-1,path+[board],b-1,b)
if result > a and result < b:
result = min_step(new_board,depth-1,path+[board],a,b)
results.append(result)
if result >= a:
a = result
if b a and result < b:
result = max_step(new_board,depth-1,path+[board],a,b)
results.append(result)
if result
Подробнее здесь: [url]https://stackoverflow.com/questions/77629141/i-need-help-implementing-negascout-principal-variation-search-for-othello[/url]
Я пытаюсь внедрить PVS в свой Athello AI, как способ улучшить альфа -бета -проконтинг, но когда я его реализую, на самом деле это медленнее примерно вдвое, мой вопрос: как бы я его реализовал и могу Я делаю это, сохраняя Мин/Человек, и не необходимо превратить это в единую функцию. Я приветствую любые предложения. Я грубо понимаю, как работает PVS, но я все еще смущен некоторых вещах. Моя функция оценки дает положительное число для x и отрицательное для y < /p> [code]def max_step(board,depth,path,a,b): if game_end(board): return score_end(board) if depth == 0: return score(board) my_moves = {i:score((k := make_move(board,i,"x"))) for i in find_indexses(board,"x")} if len(my_moves) == 0: return min_step(board,depth-1,path,a,b) results = [] my_sorted_moves = dict(sorted(my_moves.items(), key=lambda item: item[1],reverse=True)) result = None for move,index in enumerate(my_sorted_moves.keys()) : new_board = make_move(board,index,"x") if index == 0: result = min_step(new_board,depth-1,path+[board],a,b) else: result = min_step(new_board,depth-1,path+[board],b-1,b) if result > a and result < b: result = min_step(new_board,depth-1,path+[board],a,b) results.append(result) if result >= a: a = result if b a and result < b: result = max_step(new_board,depth-1,path+[board],a,b) results.append(result) if result