Skip to content

Commit

Permalink
Update MonteCarloNo.py
Browse files Browse the repository at this point in the history
  • Loading branch information
lfmatosm authored Sep 27, 2018
1 parent 7250f6b commit 18bf89f
Showing 1 changed file with 42 additions and 8 deletions.
50 changes: 42 additions & 8 deletions classes_busca/MonteCarloNo.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,27 @@
# MIT License
#
# Copyright (c) 2018 Luiz Felipe de Melo (lffloyd), Vítor Costa (vitorhardoim), Renato Bastos (RenatoBastos33)
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
##############################################################################################################


#Define a classe MonteCarloNo, responsável por descrever o um nó no algoritmo de busca 'Monte-Carlo tree search'.

#Escrito por: Vítor Costa, Renato Bastos.
Expand All @@ -6,7 +30,6 @@
# import numpy as np #Substituí as funções do numpy pelas funções normais do Python, pois não consigo instalar o numpy aqui.
import math


class MonteCarloNo:
def __init__(self, estado, pai = None):
self.estado = estado
Expand All @@ -25,7 +48,7 @@ def __str__(self):
return "\nQtd de Filhos:" + str(len(self.filhos))

def expandir(self):
print("AQUIII" + str(len(self.estado.jogador.pegaPecasJogaveis())))
#print("AQUIII" + str(len(self.estado.jogador.pegaPecasJogaveis())))
for peca in self.estado.jogador.pegaPecasJogaveis():
for i in range(0,2):
novoEstado = copy.deepcopy(self.estado)
Expand All @@ -35,25 +58,35 @@ def expandir(self):
novoEstado.oponente.setaVez(True)
if (adicionou):
novoNo.simular()
novoNo.estado.onde = i
novoNo.estado.ultimaPecaJogada = peca
self.filhos.append(novoNo)


#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)
i.UCT = (i.vitorias / i.visitas) + (1.4 * (math.sqrt(math.log(self.visitas) / i.visitas)))
if melhor!=None:
if i.UCT>melhor.UCT:
melhor=i
else:
melhor=i
#print("Melhor filho:" + str(melhor))
return melhor



def foiTotalmenteExpandido(self):
if (self.estado.jogador.ehSuaVez() == True): return len(self.filhos) == len(self.estado.jogador.pegaPecasJogaveis())
if(self.estado.jogador.ehSuaVez() == True): return len(self.filhos) == len(self.estado.jogador.pegaPecasJogaveis())
else: return len(self.filhos) == len(self.estado.oponente.pegaPecasJogaveis())

#funcao de backpropagation para aumentar o numero de simulacoes e vitorias das simulacoes
def backPropagation(self, no, vitoria, visita):
if(no != None):
no.vitoria =+ vitoria
no.visita =+ visita
no.vitorias += vitoria
no.visitas += visita
self.backPropagation(no.pai, vitoria, visita)
else: return

Expand All @@ -70,6 +103,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

0 comments on commit 18bf89f

Please sign in to comment.