#python #numpy
#python #numpy
Вопрос:
Я пытаюсь найти, как сканировать блок из 4 в любой строке массива, используемого для воспроизведения connect4 с ИИ, для которого я пытаюсь определить приоритет ходов.
Пример: у меня есть следующий массив / плата:
board = [["." for i in range(7)] for i in range(6)]
board[0][3] = 'R'
board[0][2] = 'R'
board[0][1] = 'R'
[['.', 'R', 'R', 'R', '.', '.', '.'],
['.', '.', '.', '.', '.', '.', '.'],
['.', '.', '.', '.', '.', '.', '.'],
['.', '.', '.', '.', '.', '.', '.'],
['.', '.', '.', '.', '.', '.', '.'],
['.', '.', '.', '.', '.', '.', '.']]
Я хочу идентифицировать шаблон RRR и заставить мой ИИ выиграть игру, вставив рядом с ним еще один R.
Для этого я пытаюсь выделить оценку для каждого столбца матрицы.
Для этого мне нужно просканировать массив.
Код, который я пытаюсь придумать, служит этой цели. Вот что у меня есть до сих пор
def position_score(board, piece):
# horitontal scan
for r in range(len(board)):
row_ar = board[r]
for c in range(len(board[0]) - 3):
scan = row_ar[c: c 4]
if scan.count(piece) == 3 and scan.count(".") == 1:
score = 10
Редактировать: выяснил, что печать сканирования не была предназначена должным образом. ошибка новичка, решение, предложенное @hpaulj, действительно сработало! Спасибо
Приветствия
Комментарии:
1. Первый бит не очень numpy и недопустимый код python. Пожалуйста, отправьте MCVE.
2. Чем больше я смотрю на это, тем меньше смысла это имеет. Пожалуйста, уточните.
3. Это основано на github.com/KeithGalli/Connect4-Python/blob/master / … Строка 95 Я пытаюсь просканировать строки моей доски (массива), чтобы увидеть, где есть строки из 2/3 фигур, чтобы ИИ играл там. Он использует numpy, я нет, и я пытаюсь найти эквивалент этого кода.
4.
row_arr=array[r]
должно быть достаточно, еслиarray
это список списков.5. @Senzu. Автор, похоже, использует массивы numpy в качестве причудливых вложенных списков. Я не могу комментировать сам алгоритм, но, конечно, не использую этот код в качестве примера того, как эффективно использовать numpy