Создание движений в Отелло с помощью битовых досок

Я сделал два очень похожих ИИ Отелло. В первом плата представлена ​​в виде массива длиной 100, где плата 8x8 представлена ​​"серединой" платы, а остальное - буферными пространствами по краю (индекс 11 - верхний левый угол доски 8x8, индекс 88 - нижний правый угол). Сделать ход на позицииindex, Я использую следующий код

changed = [index]

for direction in (1, 9, 10, 11):
    shift = index-direction
    while board[shift] == opp:
        shift -= direction
    if board[shift] == player:
        changed += [*range(shift+direction, index, direction)]

for direction in (1, 9, 10, 11):
    shift = index+direction
    while board[shift] == opp:
        shift += direction
    if board[shift] == player:
        changed += [*range(index+direction, shift, direction)]

Чтобы сгенерировать ходы, я затем просматриваю возможные индексы (должен быть внутренний 8x8 и эта плитка пуста) и проверяю, есть ли len(changed) > 1. Если это так, я устанавливаю элементыboard в changed к player.

Во втором ИИ (который, как я надеялся, будет быстрее делать ходы) доска представлена ​​в виде двух 64-битных битовых досок - одна для игрока, стремящегося максимизировать счет, а другая для игрока, пытающегося минимизировать счет. Чтобы сделать ход, я использую тот же код, что и [здесь] (https://www.hanshq.net/othello.html), только что преобразованный в Python.

new_disk = 1 << index
captured = 0
newmy_disks = my_disks|new_disk

for direction in range(8):
    x = shift(new_disk, direction) & opp_disks

    for i in range(5):
        x |= shift(x, direction) & opp_disks

    bounding_disk = shift(x, direction) & my_disks
    if bounding_disk != 0:
        captured_disks |= x

newmy_disks = newmy_disks^captured_disks
newopp_disks = opp_disks^captured_disks

С представлением битовой доски воспроизведение 1000 случайных игр занимает около 7 секунд, а представление массива - 4 секунды.

Мои вопросы: Как сделать так, чтобы изображение на битовой доске выполнялось быстрее? Можно ли будет одновременно проверить возможные ходы и вернуть новые битборды?

0 ответов

Другие вопросы по тегам