Skip to content

Commit

Permalink
Jogar MCTS em andamento
Browse files Browse the repository at this point in the history
  • Loading branch information
renatobastos33 committed Sep 26, 2018
1 parent f2d6b8e commit 37291f1
Show file tree
Hide file tree
Showing 6 changed files with 46 additions and 23 deletions.
38 changes: 25 additions & 13 deletions classes_base/Jogador.py
Original file line number Diff line number Diff line change
Expand Up @@ -290,20 +290,32 @@ def jogarMCTS(self, mesa, oponente):
oponente.setaVez(True)
print("J" + str(self.__ind) + " passou a vez.")
return


estadoAtual = EstadoMCTS(self, oponente, mesa)
noTeste = MonteCarloNo(estadoAtual)
noTeste.expandir()
print(noTeste)
noTeste.melhorFilho()
escolhida = int(input("Qual peça deseja jogar? "))
if (len(mesa.pegaTabuleiro()) != 0): pos = int(input("Em que posição?(0 p/ esquerda, 1 p/ direita) "))
else: pos = 0
peca = self.__mao.pop(escolhida - 1)
adicionou = mesa.adicionarNaMesa(peca, pos)
if (not adicionou): self.__mao.append(peca)
for i in range(100):
melhorfilho=noTeste.melhorFilho()
noTeste.gerarJogo(melhorfilho,False)
#print("\nMelhor filho:" +str(noTeste.melhorFilho()))
print("Gerou o jogo numero:"+ str(i)+"\n")
#print(noTeste)
#noTeste.melhorFilho()
adicionou=True

#
#escolhida = int(input("Qual peça deseja jogar? "))
#if (len(mesa.pegaTabuleiro()) != 0): pos = int(input("Em que posição?(0 p/ esquerda, 1 p/ direita) "))
#else: pos = 0
#peca = self.__mao.pop(escolhida - 1)
melhorfilho=noTeste.melhorFilho()
self.removePeca(mesa,melhorfilho.estado.ultimaPecaJogada)
adicionou = mesa.adicionarNaMesa(melhorfilho.estado.ultimaPecaJogada, melhorfilho.estado.onde)
if (not adicionou): self.__mao.append(melhorfilho.estado.ultimaPecaJogada)
else: self.setaJogou(True)
self.__maoJogaveis = []
peca.ordem(len(mesa.pegaTabuleiro()))
melhorfilho.estado.ultimaPecaJogada.ordem(len(mesa.pegaTabuleiro()))
self.setaVez(False)
oponente.setaVez(True)
return
Expand All @@ -314,13 +326,13 @@ def jogarRandom(self, mesa, oponente):
self.atualizaPecasJogaveis(mesa)
# Caso não existam peças jogáveis em sua mão, executa a compra de peças enquanto for possível.
if (len(self.pegaPecasJogaveis()) == 0): self.compraDaMesa(mesa)
print("\n" + str(mesa))
print("\n" + self.pecasJogaveis(mesa, self.__mao))
print(self)
#print("\n" + str(mesa))
#print("\n" + self.pecasJogaveis(mesa, self.__mao))
#print(self)
if (len(self.pegaPecasJogaveis()) == 0):
#mesa.fechada = True
self.setaJogou(False)
print("J" + str(self.__ind) + " passou a vez.")
#print("J" + str(self.__ind) + " passou a vez.")
else:
possibilidades = self.possibilidadesJogaveis(mesa)
escolhida = random.randint(0, len(possibilidades) - 1)
Expand Down
Binary file modified classes_base/__pycache__/Jogador.cpython-36.pyc
Binary file not shown.
17 changes: 9 additions & 8 deletions classes_busca/EstadoMCTS.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ def __init__(self, jogador, oponente, mesa):
self.qtdPecasOponente = len(self.oponente.pecas())
self.probabilidade = 0
self.ultimaPecaJogada = None
self.onde=None

def __str__(self):
resp=""
Expand All @@ -29,31 +30,31 @@ def comparar(self,estado2):
for peca in self.jogador.pecas():
achou=False
for peca2 in estado2.jogador.pecas():
if peca.igual(peca2):
if peca==peca2:
achou=True
break
if achou==False: return False
for peca in self.oponente.pecas():
igual=False
for peca2 in estado2.oponente.pecas():
if peca.igual(peca2):
if peca==peca2:
igual=True
break
if igual==False: return False
onde=0
for pecaTab in self.mesa.pegaTabuleiro():
pecaTab2=estado2.mesa.pegaTabuleiro()[onde]
if not pecaTab.igual(pecaTab2): return False
if not pecaTab==pecaTab2: return False
onde+=1
return True

#Indica se um estado terminal foi atingido
def ehEstadoFinal(self):
print("----Teste no ehEstadoFinal()")
print(self)
print("Jogador:" + str(self.jogador.jogouRodada()))
print("Oponente:" + str(self.oponente.jogouRodada()))
print("--------Fim do teste -------\n")
#print("----Teste no ehEstadoFinal()")
#print(self)
#print("Jogador:" + str(self.jogador.jogouRodada()))
#print("Oponente:" + str(self.oponente.jogouRodada()))
#print("--------Fim do teste -------\n")
if (not self.jogador.jogouRodada() and not self.oponente.jogouRodada() and len(self.mesa.pegaPecasAComprar())==0) \
or (len(self.jogador.pecas())==0 or len(self.oponente.pecas())==0) :
return True
Expand Down
14 changes: 12 additions & 2 deletions classes_busca/MonteCarloNo.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,13 +36,22 @@ def expandir(self):
if (adicionou):
novoNo.simular()
self.filhos.append(novoNo)
novoNo.estado.ultimaPecaJogada=peca
onde=i

#funcao para escolher o melhor filho usando o valor do UCT
def melhorFilho(self):
melhor=None
for i in self.filhos:
i.UCT = i.vitorias / i.visitas + 1.4 * math.sqrt(math.log(self.visitas) / i.visitas)
print(i.UCT)
return max(p.UCT for p in self.filhos)
if melhor!=None:
if i.UCT>melhor.UCT:
melhor=i
else:
melhor=i
print("Melhor filho:" + str(melhor))
return melhor



def foiTotalmenteExpandido(self):
Expand Down Expand Up @@ -70,6 +79,7 @@ def gerarJogo(self,no,difSimulacao): #difSimulacao variavel para saber se uma si
return
self.backPropagation(no,0,1)
return

novoEstado=copy.deepcopy(no.estado)
#Escolhe o jogador da vez e simula uma jogada
if novoEstado.jogador.ehSuaVez():
Expand Down
Binary file modified classes_busca/__pycache__/EstadoMCTS.cpython-36.pyc
Binary file not shown.
Binary file modified classes_busca/__pycache__/MonteCarloNo.cpython-36.pyc
Binary file not shown.

0 comments on commit 37291f1

Please sign in to comment.