예제 #1
0
def jsp_disjuntivo_minla_favorito(tempo,
                                  ordem,
                                  tempo_max=3600,
                                  fl_inteiro=True):
    if not jsp_checar_tempo_ordem(tempo, ordem):
        print("Matrizes de TEMPO e ORDEM incorretas!")

    # Criando parâmetros ######################################################
    # Número de máquinas e jobs
    m, n = jsp_get_dimensoes(tempo)

    # Criando conjunto de máquinas e jobs
    Maquinas = range(m)
    Jobs = range(n)
    ###########################################################################

    # Criando dicionario do Problema ##########################################
    Problema = montar_dic_problema(m, n, Maquinas, Jobs, tempo, ordem,
                                   fl_inteiro)
    ###########################################################################

    # Criando instancia do modelo #############################################
    modelo = Model(name='minla_fav')
    modelo.parameters.timelimit = tempo_max
    ###########################################################################

    # Criando variáveis de decisão ############################################
    x = jsp_manne_var_x(modelo, Problema)  # início do job j na máquina i
    z = jsp_manne_var_z(modelo, Problema)  # 1 se j precede a k na máquina i
    cmax = jsp_manne_var_cmax(modelo, Problema)  # makespan
    y = None
    s = None  #jsp_minla_var_s(modelo, Problema)
    ###########################################################################

    # Restrições ##############################################################

    jsp_manne_rest_ordem_maq_job(modelo, x, z, cmax, y, Problema)
    jsp_manne_rest_precedencia(modelo, x, z, cmax, y, Problema)
    #jsp_manne_rest_makespan(modelo, x, z, cmax, y, Problema)
    #jsp_minla_rest_disj_mais_proc(modelo, x, z, cmax, y, s, Problema)
    #jsp_minla_rest_disj_mais_proc_linear(modelo, x, z, cmax, y, s, Problema)

    # baseadas nas sugestoes do prof. Christophe/
    jsp_minla_rest_lb_xik(modelo, x, z, cmax, y, Problema)
    jsp_minla_rest_lb_xik_p_menos(modelo, x, z, cmax, y, Problema)

    jsp_minla_rest_lb_cmax_x_p_mais_k(modelo, x, z, cmax, y, Problema)
    jsp_minla_rest_lb_cmax_x_p_mais(modelo, x, z, cmax, y, Problema)

    #jsp_minla_rest_soma_z(modelo, x, z, cmax, y, s, Problema)

    #jsp_minla_rest_desig_triang(modelo, x, z, cmax, y, Problema)

    # Função objetivo:
    jsp_fo_makespan(modelo, x, z, cmax, y, Problema)
    ###########################################################################

    return modelo
예제 #2
0
def jsp_liao(tempo, ordem, tempo_max=3600, fl_inteiro=True):
    if not jsp_checar_tempo_ordem(tempo, ordem):
        print("Matrizes de TEMPO e ORDEM incorretas!")

    # Criando parâmetros ######################################################
    # Número de máquinas e jobs
    m, n = jsp_get_dimensoes(tempo)

    # Criando conjunto de máquinas e jobs
    Maquinas = range(m)
    Jobs = range(n)
    ###########################################################################

    # Criando dicionario do Problema ##########################################
    Problema = montar_dic_problema(m, n, Maquinas, Jobs, tempo, ordem,
                                   fl_inteiro)
    ###########################################################################

    # Criando instancia do modelo #############################################
    modelo = Model(name='liao')
    modelo.parameters.timelimit = tempo_max
    ###########################################################################

    # Criando variáveis de decisão ############################################
    x = jsp_manne_var_x(modelo, Problema)  # início do job j na máquina i
    z = jsp_manne_var_z(modelo, Problema)  # 1 se j precede a k na máquina i
    cmax = jsp_manne_var_cmax(modelo, Problema)  # makespan
    y = None
    s = None
    q = jsp_liao_var_q(modelo, Problema)
    ###########################################################################

    # Restrições ##############################################################
    jsp_manne_rest_ordem_maq_job(modelo, x, z, cmax, y, Problema)

    jsp_liao_folga(modelo, x, z, cmax, y, s, q, Problema)

    jsp_manne_rest_makespan(modelo, x, z, cmax, y, Problema)
    ###########################################################################

    # Função objetivo:
    jsp_fo_makespan(modelo, x, z, cmax, y, Problema)
    ###########################################################################

    return modelo
예제 #3
0
def jsp_disjuntivo_minla(tempo,
                         ordem,
                         tempo_max=3600,
                         fl_inteiro=True,
                         restricoes=[
                             jsp_manne_rest_ordem_maq_job,
                             jsp_manne_rest_precedencia,
                             jsp_manne_rest_makespan
                         ]):
    if not jsp_checar_tempo_ordem(tempo, ordem):
        print("Matrizes de TEMPO e ORDEM incorretas!")

    # Criando parâmetros ######################################################
    # Número de máquinas e jobs
    m, n = jsp_get_dimensoes(tempo)

    # Criando conjunto de máquinas e jobs
    Maquinas = range(m)
    Jobs = range(n)
    ###########################################################################

    # Criando dicionario do Problema ##########################################
    Problema = montar_dic_problema(m, n, Maquinas, Jobs, tempo, ordem,
                                   fl_inteiro)
    ###########################################################################

    # Criando instancia do modelo #############################################
    modelo = Model(name='minla')
    modelo.parameters.timelimit = tempo_max
    ###########################################################################

    # Criando variáveis de decisão ############################################
    x = jsp_manne_var_x(modelo, Problema)  # início do job j na máquina i
    z = jsp_manne_var_z(modelo, Problema)  # 1 se j precede a k na máquina i
    cmax = jsp_manne_var_cmax(modelo, Problema)  # makespan
    y = jsp_minla_var_y(modelo, Problema)
    ###########################################################################

    # Restrições ##############################################################
    """
    jsp_manne_rest_ordem_maq_job(modelo, x, z, cmax, y, Problema)
    jsp_manne_rest_precedencia(modelo, x, z, cmax, y, Problema)
    jsp_manne_rest_makespan(modelo, x, z, cmax, y, Problema)
    
    jsp_minla_rest_soma_z_1(modelo, x, z, cmax, y, Problema)
    jsp_minla_rest_desig_triang(modelo, x, z, cmax, y, Problema)
    jsp_minla_rest_permut(modelo, x, z, cmax, y, Problema)
    jsp_minla_rest_arc_in_out(modelo, x, z, cmax, y, Problema)
    jsp_minla_rest_soma_trivial(modelo, x, z, cmax, y, Problema)
    jsp_minla_rest_1_maq_j(modelo, x, z, cmax, y, Problema)
    jsp_minla_rest_ub_x(modelo, x, z, cmax, y, Problema)
    jsp_minla_rest_linear_y(modelo, x, z, cmax, y, Problema)
    jsp_minla_rest_ub_cmax(modelo, x, z, cmax, y, Problema)
    
    jsp_minla_rest_lb_1_maq_j(modelo, x, z, cmax, y, Problema)
    jsp_minla_rest_lb_1_maq_j_p_menos(modelo, x, z, cmax, y, Problema)
    jsp_minla_rest_lb_cmax_p_mais(modelo, x, z, cmax, y, Problema)
    jsp_minla_rest_lb_cmax_x_p_mais(modelo, x, z, cmax, y, Problema)
    """
    for r in restricoes:
        r(modelo, x, z, cmax, y, Problema)
    ###########################################################################

    # Função objetivo:
    jsp_fo_makespan(modelo, x, z, cmax, y, Problema)
    ###########################################################################

    return modelo