示例#1
0
    def selecionaMelhorJogada(self, tabuleiro, numeroDaJogada):
        tabuleiroEscolhido = None
        jogadaForcada = False

        gerenciadorDeTabuleiros = GerenciadorDeTabuleiros(tabuleiro)
        listaTabuleiros = gerenciadorDeTabuleiros.calculaPossibilidadesDeMultiplasComidas(
        )
        if (not listaTabuleiros or listaTabuleiros is None):
            listaTabuleiros = gerenciadorDeTabuleiros.calculaPossibilidadesDeMovimentoNormal(
            )
        elif (len(listaTabuleiros) <
              self.numeroDePossiveisComidasParaNaoConsiderarJogadaForcada):
            jogadaForcada = True

        maxScore = -9999999999

        numeroDaProximaJogada = numeroDaJogada
        if (not jogadaForcada):
            numeroDaProximaJogada += 1

        for tabuleiro in listaTabuleiros:
            if (not tabuleiro is None):
                score = (self.predict(
                    tabuleiro.converteTabuleiroParaArray(self.valorDama)) +
                         self.calculaScoreTabuleiro(
                             tabuleiro, numeroDaProximaJogada)) / 2.0
                if (score > maxScore and numeroDaJogada == 0):
                    #                    print ("SCORE MAIOR: " + str(score))
                    #                    tabuleiro.printaTabuleiro ()
                    maxScore = score
                    tabuleiroEscolhido = copy.deepcopy(tabuleiro)

        return tabuleiroEscolhido
示例#2
0
    def calculaScoreTabuleiro(self, tabuleiro, numeroDaJogada):
        if (numeroDaJogada == self.numeroJogadasAFrente):
            return 0.0

        jogadaForcada = False

        gerenciadorDeTabuleiros = GerenciadorDeTabuleiros(tabuleiro)
        listaTabuleiros = gerenciadorDeTabuleiros.calculaPossibilidadesDeMultiplasComidas(
        )
        if (not listaTabuleiros or listaTabuleiros is None):
            listaTabuleiros = gerenciadorDeTabuleiros.calculaPossibilidadesDeMovimentoNormal(
            )
        elif (len(listaTabuleiros) <
              self.numeroDePossiveisComidasParaNaoConsiderarJogadaForcada):
            jogadaForcada = True

        maxScore = -9999999999

        numeroDaProximaJogada = numeroDaJogada
        if (not jogadaForcada):
            numeroDaProximaJogada += 1

        for tabuleiro in listaTabuleiros:
            if (not tabuleiro is None):
                score = (self.predict(
                    tabuleiro.converteTabuleiroParaArray(self.valorDama)) +
                         self.calculaScoreTabuleiro(
                             tabuleiro, numeroDaProximaJogada)) / 2.0
                if (score > maxScore and numeroDaJogada == 0):
                    maxScore = score

        return maxScore
示例#3
0
    def selecionaMelhorJogadaMinMax(self, tabuleiro, numeroDaJogada):
        tabuleiroEscolhido = None
        jogadaForcada = False

        gerenciadorDeTabuleiros = GerenciadorDeTabuleiros(tabuleiro)
        listaTabuleiros = gerenciadorDeTabuleiros.calculaPossibilidadesDeMultiplasComidas(
        )
        if (not listaTabuleiros or listaTabuleiros is None):
            listaTabuleiros = gerenciadorDeTabuleiros.calculaPossibilidadesDeMovimentoNormal(
            )
        elif (len(listaTabuleiros) <
              self.numeroDePossiveisComidasParaNaoConsiderarJogadaForcada):
            jogadaForcada = True

        alpha = -9999999999
        beta = 9999999999

        numeroDaProximaJogada = numeroDaJogada
        if (not jogadaForcada):
            numeroDaProximaJogada += 1

        tabuleiroEscolhido = None
        for tabuleiro in listaTabuleiros:
            if (not tabuleiro is None):

                #                score = self.calculaScoreTabuleiroMinMax (copy.deepcopy(tabuleiro), numeroDaProximaJogada, False, alpha, beta)
                score = self.calculaScoreTabuleiroMedia(
                    copy.deepcopy(tabuleiro), numeroDaProximaJogada, False)
                if (score >= alpha and numeroDaJogada == 0):
                    alpha = score
                    tabuleiroEscolhido = copy.deepcopy(tabuleiro)
                    if (self.debug):
                        print("Tabuleiro Selecionado por score: " + str(score))
                        print("Tabuleiro:")
                        tabuleiroEscolhido.printaTabuleiro()

        return tabuleiroEscolhido
示例#4
0
@author: nocera
"""

from tabuleiro import Tabuleiro
from gerenciadorDeTabuleiros import GerenciadorDeTabuleiros
from variaveisGlobais import VariaveisGlobais

# Tester calcula Movimentos possiveis

# TESTE 1
print("Comecando teste 1:")
print("Tabuleiro inicial teste 1:")
tabuleiro = Tabuleiro(VariaveisGlobais.TABULEIRO_TESTE_7)
tabuleiro.printaTabuleiro()

gerenciadorDeTabuleiros = GerenciadorDeTabuleiros(tabuleiro)
listaTabuleiros = gerenciadorDeTabuleiros.calculaPossibilidadesDeMultiplasComidas(
)
if (not listaTabuleiros or listaTabuleiros is None):
    listaTabuleiros = gerenciadorDeTabuleiros.calculaPossibilidadesDeMovimentoNormal(
    )

print("Printando tabuleiros possiveis:")
if (not listaTabuleiros is None and len(listaTabuleiros) > 0):
    for tabuleiro in listaTabuleiros:
        if (not tabuleiro is None):
            tabuleiro.printaTabuleiro()
else:
    print("Nao existem movimentos!!")

print("")
示例#5
0
    def calculaScoreTabuleiroMedia(self, tabuleiro, numeroDaJogada,
                                   jogadorJogando):
        if (numeroDaJogada >= self.numeroJogadasAFrente):
            if (jogadorJogando):
                tabuleiro.inverteVisaoTabuleiro()
                score = self.predict(
                    tabuleiro.converteTabuleiroParaArray(self.valorDama))

                gerenciadorDeTabuleiros = GerenciadorDeTabuleiros(tabuleiro)
                listaTabuleiros = gerenciadorDeTabuleiros.calculaPossibilidadesDeMultiplasComidas(
                )
                if (not listaTabuleiros or listaTabuleiros is None):
                    listaTabuleiros = gerenciadorDeTabuleiros.calculaPossibilidadesDeMovimentoNormal(
                    )

                if (len(listaTabuleiros) == 0 or listaTabuleiros is None):
                    score = -1.1

                return score
            else:
                score = self.predict(
                    tabuleiro.converteTabuleiroParaArray(self.valorDama))
                tabuleiro.inverteVisaoTabuleiro()
                gerenciadorDeTabuleiros = GerenciadorDeTabuleiros(tabuleiro)
                listaTabuleiros = gerenciadorDeTabuleiros.calculaPossibilidadesDeMultiplasComidas(
                )
                if (not listaTabuleiros or listaTabuleiros is None):
                    listaTabuleiros = gerenciadorDeTabuleiros.calculaPossibilidadesDeMovimentoNormal(
                    )

                if (len(listaTabuleiros) == 0 or listaTabuleiros is None):
                    score = 1.1

                return score

        tabuleiro.inverteVisaoTabuleiro()

        jogadaForcada = False

        gerenciadorDeTabuleiros = GerenciadorDeTabuleiros(tabuleiro)
        listaTabuleiros = gerenciadorDeTabuleiros.calculaPossibilidadesDeMultiplasComidas(
        )
        if (not listaTabuleiros or listaTabuleiros is None):
            listaTabuleiros = gerenciadorDeTabuleiros.calculaPossibilidadesDeMovimentoNormal(
            )
        elif (len(listaTabuleiros) <
              self.numeroDePossiveisComidasParaNaoConsiderarJogadaForcada):
            jogadaForcada = True

        numeroDaProximaJogada = numeroDaJogada
        numeroDaProximaJogada += 1
        #        if (not jogadaForcada):
        #            numeroDaProximaJogada += 1

        if (len(listaTabuleiros) == 0):
            if (jogadorJogando):
                return -1
            else:
                return 1
        soma = 0
        for tabuleiro in listaTabuleiros:
            if (not tabuleiro is None):
                if (jogadorJogando):
                    soma += self.calculaScoreTabuleiroMedia(
                        copy.deepcopy(tabuleiro),
                        copy.deepcopy(numeroDaProximaJogada), False)
                else:
                    soma += self.calculaScoreTabuleiroMedia(
                        copy.deepcopy(tabuleiro),
                        copy.deepcopy(numeroDaProximaJogada), True)

        return soma / len(listaTabuleiros)
示例#6
0
    def calculaScoreTabuleiroMinMax(self, tabuleiro, numeroDaJogada,
                                    jogadorJogando, alpha, beta):
        if (numeroDaJogada >= self.numeroJogadasAFrente):
            if (jogadorJogando):
                tabuleiro.inverteVisaoTabuleiro()
                score = self.predict(
                    tabuleiro.converteTabuleiroParaArray(self.valorDama))

                gerenciadorDeTabuleiros = GerenciadorDeTabuleiros(tabuleiro)
                listaTabuleiros = gerenciadorDeTabuleiros.calculaPossibilidadesDeMultiplasComidas(
                )
                if (not listaTabuleiros or listaTabuleiros is None):
                    listaTabuleiros = gerenciadorDeTabuleiros.calculaPossibilidadesDeMovimentoNormal(
                    )

                if (len(listaTabuleiros) == 0 or listaTabuleiros is None):
                    score = -1.1

                return score
            else:
                score = self.predict(
                    tabuleiro.converteTabuleiroParaArray(self.valorDama))
                tabuleiro.inverteVisaoTabuleiro()
                gerenciadorDeTabuleiros = GerenciadorDeTabuleiros(tabuleiro)
                listaTabuleiros = gerenciadorDeTabuleiros.calculaPossibilidadesDeMultiplasComidas(
                )
                if (not listaTabuleiros or listaTabuleiros is None):
                    listaTabuleiros = gerenciadorDeTabuleiros.calculaPossibilidadesDeMovimentoNormal(
                    )

                if (len(listaTabuleiros) == 0 or listaTabuleiros is None):
                    score = 1.1

                return score

        tabuleiro.inverteVisaoTabuleiro()

        jogadaForcada = False

        gerenciadorDeTabuleiros = GerenciadorDeTabuleiros(tabuleiro)
        listaTabuleiros = gerenciadorDeTabuleiros.calculaPossibilidadesDeMultiplasComidas(
        )
        if (not listaTabuleiros or listaTabuleiros is None):
            listaTabuleiros = gerenciadorDeTabuleiros.calculaPossibilidadesDeMovimentoNormal(
            )
        elif (len(listaTabuleiros) <
              self.numeroDePossiveisComidasParaNaoConsiderarJogadaForcada):
            jogadaForcada = True

        numeroDaProximaJogada = numeroDaJogada
        if (not jogadaForcada):
            numeroDaProximaJogada += 1

        if (jogadorJogando):
            best = -9999999999
        else:
            best = 9999999999

        if (len(listaTabuleiros) == 0):
            if (jogadorJogando):
                return -1
            else:
                return 1

        for tabuleiro in listaTabuleiros:
            if (not tabuleiro is None):
                if (jogadorJogando):

                    best = max(
                        best,
                        self.calculaScoreTabuleiroMinMax(
                            copy.deepcopy(tabuleiro),
                            copy.deepcopy(numeroDaProximaJogada), False,
                            copy.deepcopy(alpha), copy.deepcopy(beta)))
                    alpha = max(alpha, best)
                    if (beta <= alpha):
                        break
                else:
                    best = min(
                        best,
                        self.calculaScoreTabuleiroMinMax(
                            copy.deepcopy(tabuleiro),
                            copy.deepcopy(numeroDaProximaJogada), True,
                            copy.deepcopy(alpha), copy.deepcopy(beta)))
                    beta = min(beta, best)
                    if (beta <= alpha):
                        break

        return best