Exemplo n.º 1
0
def construcao(instancia,alfa):
#     print("    Construindo solucao com alfa = %s"%str(alfa))
    
    solucao = Solucao(instancia)
    turmaDisciplinaToCargaDisponivelDic = solucao.instancia.turmaDisciplinaToCargaDic
    
    while not solucao.completa():
    
        geradorDeCandidatos = gerarCandidatos(solucao,turmaDisciplinaToCargaDisponivelDic)   
        todosCandidatos = [(slot,solucao.custoIncremental(slot)[1]) for slot in geradorDeCandidatos]   
        
        if todosCandidatos:
            todosCandidatos.sort(key=lambda x: x[1], reverse=True)
         
            RCL = [ c for c in todosCandidatos if custo(c) >= \
                   custo(todosCandidatos[0]) - alfa*(custo(todosCandidatos[0]) - custo(todosCandidatos[-1])) ]
                
            aleatorio = random.choice(RCL)[0]
    
            (turmaNome,i,j) = solucao.slotVazio()
            turmaDisciplinaToCargaDisponivelDic[turmaNome,aleatorio[0]]-= 1   
            solucao.adicionar(aleatorio)
            
        else:
            (turmaNome,i,j) = solucao.slotVazio()
#             print("    Reiniciando construcao: Nenhum candidato para o slot (%d,%d) da turma %s." % (i,j,turmaNome))

            solucao = Solucao(instancia)
            turmaDisciplinaToCargaDisponivelDic = solucao.instancia.turmaDisciplinaToCargaDic
  
    return solucao
Exemplo n.º 2
0
def GRASP_VND(MAX_ITERACOES,instancia,alfa):
    melhorSolucao = Solucao(instancia)
    
    for k in range(MAX_ITERACOES):
        print(" GRASP: Iteracao %s"% (k+1))
        
        solucaoCorrente = construcao(instancia,alfa)
        
        # print("\n    Beneficio apos construcao:", solucaoCorrente.beneficio())
        
        solucaoCorrente = VNS_VND(5,instancia,solucaoCorrente)
        
#         print("\n    Beneficio apos VND:", solucaoCorrente.beneficio())
        
        if melhorSolucao.beneficio() < solucaoCorrente.beneficio():
            melhorSolucao = copy.deepcopy(solucaoCorrente)
            
    return melhorSolucao  
Exemplo n.º 3
0
def construcao(instancia, alfa):
    logger.log("    Construindo solucao com alfa = %s" % str(alfa),
               logger.debugModeTotal)

    solucao = Solucao(instancia)
    turmaDisciplinaToCargaDisponivelDic = solucao.instancia.turmaDisciplinaToCargaDic

    while not solucao.completa():

        geradorDeCandidatos = gerarCandidatos(
            solucao, turmaDisciplinaToCargaDisponivelDic)
        todosCandidatos = [(candidato,
                            solucao.beneficioIncremental(candidato)[1])
                           for candidato in geradorDeCandidatos]

        if todosCandidatos:
            todosCandidatos.sort(key=lambda x: x[1], reverse=True)

            RCL = [
                c for c in todosCandidatos
                if getBeneficio(c) >= getBeneficio(todosCandidatos[0]) - alfa *
                (getBeneficio(todosCandidatos[0]) -
                 getBeneficio(todosCandidatos[-1]))
            ]

            aleatorio = random.SystemRandom().choice(RCL)[0]

            (turmaNome, i, j) = solucao.slotVazio()
            turmaDisciplinaToCargaDisponivelDic[turmaNome, aleatorio[0]] -= 1
            solucao.adicionar(aleatorio)

        else:
            (turmaNome, i, j) = solucao.slotVazio()

            logger.log(
                "    Reiniciando construcao: Nenhum candidato para o slot (%d,%d) da turma %s."
                % (i, j, turmaNome), logger.debugModeTotal)

            # random.shuffle(instancia.turmas)
            solucao = Solucao(instancia)
            turmaDisciplinaToCargaDisponivelDic = solucao.instancia.turmaDisciplinaToCargaDic

    return solucao
Exemplo n.º 4
0
def GRASP_VND(MAX_ITERACOES, instancia, alfa):
    melhorSolucao = Solucao(instancia)

    for k in range(MAX_ITERACOES):
        logger.log(" GRASP: Iteracao %s" % (k + 1), logger.debugModeTotal)

        solucaoCorrente = construcao(instancia, alfa)

        logger.log(
            "\n    Beneficio apos construcao: %s" %
            solucaoCorrente.beneficio(), logger.debugModeTotal)

        solucaoCorrente = VND(solucaoCorrente)

        logger.log(
            "\n    Beneficio apos VND: %s" % solucaoCorrente.beneficio(),
            logger.debugModeTotal)

        if melhorSolucao.beneficio() < solucaoCorrente.beneficio():
            melhorSolucao = copy.deepcopy(solucaoCorrente)

    return melhorSolucao