-
Notifications
You must be signed in to change notification settings - Fork 1
/
traductorInstancias.py
executable file
·130 lines (94 loc) · 5.31 KB
/
traductorInstancias.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#Librerías
import pprint as pp
import numpy as np
from cargadorInstancias import *
from os import walk
#Sección Principal
#-----------------
#Entrada por lotes
listadoInstancias = ['csp400.txt',
'csp200.txt',
'csp500.txt',
'csp300.txt',
'csp100.txt',
'csp250.txt',
'csp450.txt',
'csp350.txt',
'csp150.txt',
'csp50.txt']
#Entrada de instancia única
#listadoInstancias = ['./instances/csp500.txt']
#Por cada una de las instancias cargadas en el directorio correspondiente
for archivoBeasley in listadoInstancias:
#Entradas para una sola instancia
instancia = beasley('./instances/'+archivoBeasley)
#Preparar encabezado de la instancia
nombreInstancia = instancia['nombreInstancia'].split('/')[-1].split('.')[0]
nombreInstanciaExtension = nombreInstancia + '_Solomon.txt'
nombreInstanciaCostoArcosExtension = nombreInstancia + '_Solomon_costs.txt'
try:
with open('./encabezado.txt') as encabezado, open('./beasleySolomonFormat/nodes/'+nombreInstanciaExtension, 'w') as nuevaInstanciaSolomon, open('./beasleySolomonFormat/arcs/'+nombreInstanciaCostoArcosExtension, 'w') as nuevaInstanciaSolomonArcos:
#Agregar el nombre del caso de prueba en la primera línea
nuevaInstanciaSolomon.write(nombreInstancia)
#Agregar las líneas del encabezado
for linea in encabezado:
nuevaInstanciaSolomon.write(linea)
#Insertar información de los nodos (bloques de servicio)
cuatroEspacios = ' '
seisEspacios = ' '
nueveEspacios = ' '
coordenadaVirtualBloque_XY = 0
#Insertar la información del depósito virtual
lineaDepositoVirtual = str()
#Número de cliente
lineaDepositoVirtual += cuatroEspacios + str(0)
#Coordenada en x
lineaDepositoVirtual += seisEspacios + str(coordenadaVirtualBloque_XY)
#Coordenada en y
lineaDepositoVirtual += nueveEspacios + str(coordenadaVirtualBloque_XY)
#Demanda (nada en el depósito)
lineaDepositoVirtual += nueveEspacios + str(0)
#Ready Time
lineaDepositoVirtual += nueveEspacios + str(0)
#Due Date
lineaDepositoVirtual += nueveEspacios + str(0)
#Service Time
lineaDepositoVirtual += nueveEspacios + str(0)
#Insertarla al archivo donde se está almacenando la instancia
nuevaInstanciaSolomon.write(lineaDepositoVirtual+'\n')
#Mover coordenadas
coordenadaVirtualBloque_XY += 1
#Realizar el proceso para los nodos (bloques de trabajo o servicios)
for i in range(1,instancia['numBloques']+1):
#Contenedor de la línea que se va a insertar
lineaNodo = str()
#Número de cliente
lineaNodo += cuatroEspacios + str(i)
#Coordenada en x
lineaNodo += seisEspacios + str(coordenadaVirtualBloque_XY)
#lineaNodo += seisEspacios + str( instancia['bloques'][i-1]['t0'] )
#Coordenada en y
lineaNodo += nueveEspacios + str(coordenadaVirtualBloque_XY)
#lineaNodo += nueveEspacios + str( instancia['bloques'][i-1]['tf'] )
#Demanda (valor unitario, virtual)
lineaNodo += nueveEspacios + str(1)
#Ready Time
lineaNodo += nueveEspacios + str( instancia['bloques'][i-1]['t0'] )
#Due Date
lineaNodo += nueveEspacios + str( instancia['bloques'][i-1]['tf'] )
#Service Time
lineaNodo += nueveEspacios + str( instancia['bloques'][i-1]['duracion'] )
#Insertarla al archivo donde se está almacenando la instancia
nuevaInstanciaSolomon.write(lineaNodo+'\n')
#Mover coordenadas
coordenadaVirtualBloque_XY += 1
#Generar el segundo archivo de la instancia, con los costos de los arcos (transiciones factibles)
for transicion in instancia['transiciones']:
#Contenedor de las líneas con el detalle de las transiciones
lineaTransicion = str()
#Incorporar los detalles provenientes del contenedor de la instancia
lineaTransicion += str(transicion['i']) + ' ' + str(transicion['j']) + ' ' + str(transicion['costo'])
#Insertarla al archivo donde se está almacenando la instancia
nuevaInstanciaSolomonArcos.write(lineaTransicion+'\n')
except:
print('Problemas abriendo el encabezado o el archivo de salida con la instancia en formato Solomon')