Example #1
0
def hillClimb():
    tabuleiro = gerarTabuleiro()

    while (1):

        vizinho = Tabuleiro()
        vizinho.tabuleiro = deepcopy(tabuleiro.tabuleiro)
        moverUmaRainha(vizinho)

        if (vizinho.custo >= tabuleiro.custo):
            return tabuleiro
        tabuleiro = vizinho
Example #2
0
def gerarTabuleiro():
    tabuleiro = Tabuleiro()
    tabuleiro.tabuleiro = [['_' for x in range(8)] for x in range(8)]

    for coluna in range(8):
        linha = randint(0, 7)

        tabuleiro.tabuleiro[linha][coluna] = "Q"

    tabuleiro.custo = calculaColisoes(tabuleiro.tabuleiro)

    return tabuleiro
Example #3
0
def simulatedAnnealing():
    Ti = 100
    Tf = 0.1
    taxa = 0.8

    S0 = gerarTabuleiro()  #Solução Inicial
    S = S0  #(Solucao Atual)

    n_iteracoes = 50

    melhor_solucao = S0

    T = Ti
    while (T > Tf):
        for x in range(n_iteracoes):
            vizinho = Tabuleiro()
            vizinho.tabuleiro = deepcopy(S.tabuleiro)
            moverUmaRainha(vizinho)

            deltaCusto = vizinho.custo - S.custo

            if deltaCusto < 0:
                S = vizinho

            else:
                numero_random = uniform(0, 1)

                ## Aceita estados piores
                ## A função exp diminue conforme T diminue
                if numero_random < math.exp(-deltaCusto / T):
                    S = vizinho

            if (S.custo < melhor_solucao.custo):
                melhor_solucao = S

        T = taxa * T

    return melhor_solucao
Example #4
0
TOTAL_EXECUCOES = int(input("\nTotal Execuções: "))
colisoes_exec = {}

i = 0
while (TOTAL_EXECUCOES > i):
    print("\nExecução: %d" % (i))

    solucao = hillClimb()
    colisoes = solucao.custo

    print("\tColisões: %d" % (colisoes))

    if (i == 0):
        melhor_solucao = Tabuleiro()
        melhor_solucao.tabuleiro = deepcopy(solucao.tabuleiro)
        melhor_solucao.custo = colisoes

    elif colisoes < melhor_solucao.custo:
        melhor_solucao.tabuleiro = deepcopy(solucao.tabuleiro)
        melhor_solucao.custo = colisoes

    if (str(colisoes) in colisoes_exec):
        colisoes_exec[str(colisoes)] += 1
    else:
        colisoes_exec[str(colisoes)] = 1

    i += 1

print("\n\nTabela de Colisoes\n")