Как реализовать поиск по дереву Монте-Карло?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как реализовать поиск по дереву Монте-Карло?

Сообщение Anonymous »

Я работаю над проектом, который включает в себя поиск по дереву Монте-Карло, и пытаюсь реализовать его для Connect 4, прежде чем пытаться применить его к более сложной задаче.
Вот мой код для игры:

Код: Выделить всё

class board:

def __init__(self):
self.board = np.zeros((6,7))
self.ROW_COUNT = 6
self.COLUMN_COUNT = 7
self.game_over = False
self.turn = 0
self.value = 0

def isGameOver(self):
return self.game_over

def whatTurn(self):
return self.turn

def changeTurn(self):
self.turn += 1
self.turn = self.turn % 2

def __hash__(self):
return hash(self.value)

def __eq__(self, other):
if isinstance(other, board):
return self.value == other.value
else:
return False

def drop_piece(self, row, col, piece):
self.board[row][col]= piece

def is_valid_location(self ,col):
#if this condition is true we will let the use drop piece here.
#if not true that means the col is not vacant
return self.board[5][col]==0

def get_next_open_row(self, col):
for r in range(self.ROW_COUNT):
if self.board[r][col]==0:
return r

def print_board(self):
print(np.flip(self.board,0))

def winning_move(self, piece):
# Check horizontal locations for win
for c in range(self.COLUMN_COUNT-3):
for r in range(self.ROW_COUNT):
if self.board[r][c] == piece and self.board[r][c+1] == piece and self.board[r][c+2] == piece and self.board[r][c+3] == piece:
self.game_over = True

# Check vertical locations for win
for c in range(self.COLUMN_COUNT):
for r in range(self.ROW_COUNT-3):
if self.board[r][c] == piece and self.board[r+1][c] == piece and self.board[r+2][c] == piece and self.board[r+3][c] == piece:
self.game_over = True

# Check positively sloped diaganols
for c in range(self.COLUMN_COUNT-3):
for r in range(self.ROW_COUNT-3):
if self.board[r][c] == piece and self.board[r+1][c+1] == piece and self.board[r+2][c+2] == piece and self.board[r+3][c+3] == piece:
self.game_over = True

# Check negatively sloped diaganols
for c in range(self.COLUMN_COUNT-3):
for r in range(3, self.ROW_COUNT):
if self.board[r][c] == piece and self.board[r-1][c+1] == piece and self.board[r-2][c+2] == piece and self.board[r-3][c+3] == piece:
self.game_over = True
Теперь я понимаю, что когда я создаю экземпляр игрового поля и сохраняю его в узле моего дерева Монте-Карло, как только доска отбрасывает больше фигур для последующих узлов, начальный узел тоже изменится, поскольку классы изменяемы, а имя «доски» просто относится к объекту. Так ли это? Если да, то есть идеи, как использовать этот класс для создания дерева поиска?

Подробнее здесь: https://stackoverflow.com/questions/791 ... ree-search
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Ошибка в реализации поиска по дереву Монте-Карло.
    Anonymous » » в форуме C++
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Ошибка в реализации поиска по дереву Монте-Карло.
    Anonymous » » в форуме C++
    0 Ответы
    28 Просмотры
    Последнее сообщение Anonymous
  • Монте-Карло с OpenMP
    Гость » » в форуме C++
    0 Ответы
    31 Просмотры
    Последнее сообщение Гость
  • Монте-Карло с OpenMP
    Anonymous » » в форуме C++
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous
  • Как проверить равновесие в моделировании Монте-Карло?
    Anonymous » » в форуме C#
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»