def __init__(self, n_escenarios, repeticiones):
        self.escenarios = []
        self.repeticiones = repeticiones

        for i in range(n_escenarios):
            fams = generarEscenariosBenchmarkE3.generar_benchmark()
            mapa = constructorDeMapasE3.construir_mapas('benchmark', 0)[0]
            self.escenarios.append(mapa)
 def generar_escenarios(self):
     permutaciones = permutations(self.particiones)
     for i in range(self.factorial(self.n_particiones)):
         lista_familias = []
         productos_sobrantes = self.escenario_inicial.productos_extra
         permutacion = next(permutaciones)
         for i in permutacion:
             for j in range(len(self.particiones[i].orden)):
                 familia = self.particiones[i].orden[j].familia
                 lista_familias.append(familia)
         escenario = [lista_familias, productos_sobrantes]
         mapa = constructorDeMapasE3.construir_mapas(escenario, 1)[0]
         self.escenarios_posibles.append(mapa)
def optimizar(escenario,
              restriccion_tiempo_por_prodcuto,
              restriccion_tiempo_maximo,
              restriccion_metros_por_prodcuto,
              restriccion_metros_maximos,
              step1,
              step2,
              step3=0):
    escenario_inicial = constructorDeMapasE3.construir_mapas(escenario)[0]
    generador = Generador_escenarios(escenario_inicial, 4)
    escenarios = generador.escenarios_posibles

    opt = Optimizacion(escenarios, restriccion_tiempo_por_prodcuto,
                       restriccion_tiempo_maximo,
                       restriccion_metros_por_prodcuto,
                       restriccion_metros_maximos, step1, step2, step3)
    opt.optimizar()
    opt.imprimir_output()
def run_simulacion(escenario, debug=0,mt=1, mf=1, replicas=TAMANO_DE_LA_MUESTRA, tnow=time.time(), seed=0):

    #  una replica - describe lo que hace el primer cliente
    if debug == 1:
        # abrir archivo de escenario
        mapa, mapa_de_tiempo, mapa_de_flujo = constructorDeMapasE3.construir_mapas(escenario)

        '''Simulacion'''
        env = simpy.Environment()
        super = Supermercado(env, TAMANO_DE_LA_MUESTRA, INDICES_BOLETAS, mapa, mapa_de_tiempo, mapa_de_flujo,
                             VELOCIDAD_DE_MOVIMIENTO_DE_CLIENTES, TIME_OUT_CLIENTES, TIEMPO_PARA_RECOGER_UN_PRODUCTO,
                             tnow, debug, mt, mf)
        env.run()

        print('tiempo simulacion: ', (time.time()- tnow)/60, 'min')

    if debug == 0:
        # abrir archivo de escenario
        mapa, mapa_de_tiempo, mapa_de_flujo = constructorDeMapasE3.construir_mapas(escenario)

        '''Simulacion'''
        env = simpy.Environment()
        super = Supermercado(env, TAMANO_DE_LA_MUESTRA, INDICES_BOLETAS, mapa, mapa_de_tiempo, mapa_de_flujo,
                             VELOCIDAD_DE_MOVIMIENTO_DE_CLIENTES, TIME_OUT_CLIENTES, TIEMPO_PARA_RECOGER_UN_PRODUCTO,
                             tnow, debug, mt, mf)
        env.run()
        super.culcular_estadisticas(.95)
        print('tiempo simulacion: ', (time.time() - tnow) / 60, 'min')

        if not os.path.exists('Output/{}'.format(escenario)):
            os.makedirs('Output/{}'.format(escenario))

        # ESTADISTICAS
        histograma_canasta_tiempo = super.histograma_canasta_tiempo
        histograma_canasta_caminata = super.histograma_canasta_caminata
        histograma_canasta_tentacion = super.histograma_canasta_tentacion
        if mt:
            mapa_calor_tiempo = super.mapa_calor_tiempo
        if mf:
            mapa_calor_flujo = super.mapa_calor_flujo


        # INDICE DE TENTACION
        mu = super.indice_de_tentacion[0]
        S = super.indice_de_tentacion[1]
        ci = super.indice_de_tentacion[2]
        print('INDICE DE TENTACION:')
        print('Promedio:', mu)
        print('Desviacion standar:', sqrt(S))
        print('Intervalo de confianza:', ci)
        print()
        print('---------------------------------------------------------')
        print()

        with open('Output/{}/estadisticos.txt'.format(escenario), 'w') as file:
            file.write('INDICE DE TENTACION:\n')
            file.write('Promedio: {}\n'.format(mu))
            file.write('Desviacion estandar: {}\n'.format(sqrt(S)))
            file.write('Intervalo de confianza: {}\n'.format(ci))
            file.write('\n')
            file.write('---------------------------------------------------------\n\n')

        # METROS CAMINADOS
        mu = super.metros_caminados[0]
        S = super.metros_caminados[1]
        ci = super.metros_caminados[2]
        print('METROS CAMINADOS:')
        print('Promedio:', mu)
        print('Desviacion standar:', sqrt(S))
        print('Intervalo de confianza:', ci)
        print()
        print('---------------------------------------------------------')
        print()

        with open('Output/{}/estadisticos.txt'.format(escenario), 'a') as file:
            file.write('METROS CAMINADOS:\n')
            file.write('Promedio: {} metros\n'.format(mu))
            file.write('Desviacion estandar: {} metros\n'.format(sqrt(S)))
            file.write('Intervalo de confianza: {} metros\n'.format(ci))
            file.write('\n')
            file.write('---------------------------------------------------------\n\n')

        # TIEMPO EN SUPERMERCADO
        mu = super.tiempo_total_en_supermercado[0]
        S = super.tiempo_total_en_supermercado[1]
        ci = super.tiempo_total_en_supermercado[2]
        print('TIEMPO EN SUPERMERCADO:')
        print('Promedio:', mu)
        print('Desviacion standar:', sqrt(S))
        print('Intervalo de confianza:', ci)
        print()
        print('---------------------------------------------------------')
        print()

        with open('Output/{}/estadisticos.txt'.format(escenario), 'a') as file:
            file.write('TIEMPO EN SUPERMERCADO:\n')
            file.write('Promedio: {} minutos\n'.format(mu))
            file.write('Desviacion estandar: {} minutos\n'.format(sqrt(S)))
            file.write('Intervalo de confianza: {} minutos\n'.format(ci))
            file.write('\n')
            file.write('---------------------------------------------------------\n\n')

        # PRODUCTOS VENDIDOS
        mu = super.total_prod_vendidos[0]
        S = super.total_prod_vendidos[1]
        ci = super.total_prod_vendidos[2]
        print('PRODUCTOS VENDIDOS:')
        print('Promedio:', mu)
        print('Desviacion standar:', sqrt(S))
        print('Intervalo de confianza:', ci)
        print()
        print('---------------------------------------------------------')
        print()

        with open('Output/{}/estadisticos.txt'.format(escenario), 'a') as file:
            file.write('PRODUCTOS VENDIDOS:\n')
            file.write('Promedio: {}\n'.format(mu))
            file.write('Desviacion estandar: {}\n'.format(sqrt(S)))
            file.write('Intervalo de confianza: {}\n'.format(ci))
            file.write('\n')
            file.write('---------------------------------------------------------\n\n')

        # ESCRIBIR HISTOGRAMAS Y MAPAS
        with open('Output/{}/histograma_canasta_tentacion'.format(escenario), 'wb') as file:
            pickle.dump(histograma_canasta_tentacion, file)
        with open('Output/{}/histograma_canasta_caminata'.format(escenario), 'wb') as file:
            pickle.dump(histograma_canasta_caminata, file)
        with open('Output/{}/histograma_canasta_tiempo'.format(escenario), 'wb') as file:
            pickle.dump(histograma_canasta_tiempo, file)

        if mt:
            with open('Output/{}/mapa_calor_tiempo.json'.format(escenario), 'w') as file:
                d = {}
                for i in mapa_calor_tiempo.coordenadas:
                    d.update({str(i): mapa_calor_tiempo.coordenadas[i].calor})
                json.dump(d, file)
        if mf:
            with open('Output/{}/mapa_calor_flujo.json'.format(escenario), 'w') as file:
                d = {}
                for i in mapa_calor_flujo.coordenadas:
                    d.update({str(i): mapa_calor_flujo.coordenadas[i].calor})
                json.dump(d, file)

    # opti
    if debug == 2:
        mapa, mapa_de_tiempo, mapa_de_flujo = constructorDeMapasE3.construir_mapas(escenario)

        '''Simulacion'''
        env = simpy.Environment()
        super = Supermercado(env, replicas, INDICES_BOLETAS, mapa, mapa_de_tiempo, mapa_de_flujo,
                             VELOCIDAD_DE_MOVIMIENTO_DE_CLIENTES, TIME_OUT_CLIENTES, TIEMPO_PARA_RECOGER_UN_PRODUCTO,
                             tnow, debug, mt, mf)
        env.run()
        super.culcular_estadisticas(.9)

        return super.indice_de_tentacion, super.tiempo_total_en_supermercado, super.metros_caminados,\
               super.total_prod_vendidos,  super.histograma_canasta_tentacion, super.histograma_canasta_caminata, \
               super.histograma_canasta_tiempo

    # benchmark
    if debug == 3:
        mapa, mapa_de_tiempo, mapa_de_flujo = constructorDeMapasE3.construir_mapas('benchmark')

        if seed:
            random.seed(seed)
        '''Simulacion'''
        env = simpy.Environment()
        super = Supermercado(env, replicas, INDICES_BOLETAS, escenario, mapa_de_tiempo, mapa_de_flujo,
                             VELOCIDAD_DE_MOVIMIENTO_DE_CLIENTES, TIME_OUT_CLIENTES, TIEMPO_PARA_RECOGER_UN_PRODUCTO,
                             tnow, debug, mt, mf)
        env.run()
        super.culcular_estadisticas(.9)

        return super.indice_de_tentacion, super.tiempo_total_en_supermercado, super.metros_caminados, \
               super.total_prod_vendidos, super.histograma_canasta_tentacion, super.histograma_canasta_caminata, \
               super.histograma_canasta_tiempo