コード例 #1
0
ファイル: jssp.py プロジェクト: JoseGzz/Research-ITESM
class JSSP():
    def __init__(self):
        """inicializa propiedades del problema"""
        self.solution = Solution()  # solucion del problema
        self.formatter = Formatter()  # representaciones internas
        self.operations = []  # lista de operaciones
        self.jobs = []  # lista de tareas
        self.machines = []  # lista de maquinas
        self.no_machines = 0  # cantidad de maquinas
        self.no_jobs = 0  # cantidad de tareas

    def read_data(self, filename=""):
        """lee datos del archivo de entrada"""
        # IMPORTANTE: se asume que todas las tareas tienen la misma cantidad de operaciones
        # leemos los datos
        with open(filename, 'r') as f:
            no_jobs = int(f.readline())
            mat = np.loadtxt(f, dtype=None)
        # asignamos los valores a las matrices correspondientes
        times_mat = mat[:no_jobs]
        machines_mat = mat[no_jobs:]
        # generamos estructuras internas
        self.format_data(times_mat, machines_mat)

    def format_data(self, times_mat, machines_mat):
        """genera representacion interna de objetos"""
        # Establecemos cantidades necesarias
        no_jobs = len(times_mat[:])
        no_machines = len(times_mat[0])

        ###################### START DATA COLLECTION ########################
        # just called once
        if settings.options.collect_data:
            settings.collector.add_data("num_jobs", no_jobs)
            settings.collector.add_data("num_machines", no_machines)
        ###################### END DATA COLLECTION ##########################

        self.no_machines = no_machines
        self.no_jobs = no_jobs
        # Se crean las listas de objetos
        self.operations, self.jobs, self.machines = self.formatter.create_objects(
            no_machines, no_jobs, times_mat, machines_mat)

    def random_solution(self):
        """calcula un makespan inicial solamente con el recorrido hacia adelante"""
        self.solution.find_makespan(self.jobs, self.operations, self.machines,
                                    self.no_machines)
        return self.solution

    """Archivos con pocos datos de prueba"""
    #../Instances/toy/3x3_demo.txt
    #../Instances/toy/4x4_demo.txt
    #../Instances/toy/5x5_demo.txt
    #../Instances/toy/10x10_demo.txt
    """Archivos con datos benchmark (tareas x maquinas)"""