我正在尝试在国际象棋中实施移动排序,以便从alpha-beta修剪中获得最大收益。
现在,我从根节点开始,将其扩展到一个级别,通过我的评估函数评估所有后继者,按升序对它们进行排序(对大多数人来说最有利于将答案放在中间的某个位置)和将节点按此顺序传递给alpha-beta算法。但是,我的结果比我按照它们在电路板上的顺序传递节点要慢大约60%。我只是从初始状态进行评估,但在高层次上,这是实现移动排序的正确方法吗?
FWIW,我实现移动排序的方式是通过以下方式(可能效率低下即将生成列表,甚至在传递给alpha-beta函数之前?)
scores = []
for state in states:
scores.append([state,Board(state, player).score()[1]) #this results in a tuple of (board, score)
scores.sort(key=lambda lst: abs(lst[1]), reverse = False) #sort the list of boards by scores in ascending order
output = [i[0] for i in scores] #only return the boards, which are then passed to the alpha-beta algorithm
非常感谢!