From 89e474b29d8053a4ae0869fe3d95898fee4168a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20M=20Frami=C3=B1=C3=A1n?= Date: Sat, 25 Nov 2023 21:56:23 +0100 Subject: [PATCH] get_sequence() for JobShop and OpenShop, get_job() and get_machine() for OpenShop --- build/lib/scheptk/scheptk.py | 46 ++++++++++++++++++--- scheptk.egg-info/PKG-INFO | 2 +- scheptk/__pycache__/scheptk.cpython-39.pyc | Bin 33092 -> 35172 bytes scheptk/scheptk.py | 46 ++++++++++++++++++--- setup.py | 2 +- 5 files changed, 82 insertions(+), 14 deletions(-) diff --git a/build/lib/scheptk/scheptk.py b/build/lib/scheptk/scheptk.py index d89f277..1ccfaac 100644 --- a/build/lib/scheptk/scheptk.py +++ b/build/lib/scheptk/scheptk.py @@ -929,7 +929,16 @@ def ct(self, solution): return ct, jobs_involved - + # get the order of the jobs in a given solution (according to the time in which they are processed in the first machine) + def get_sequence(self, solution): + + # get the jobs involved in the solution in the order they are processed + jobs_involved = list(dict.fromkeys(solution)) + + return jobs_involved + + + # implementation of a random solution of the instance def random_solution(self): solution = [] @@ -1002,10 +1011,20 @@ def __init__(self, filename): # implementation of random_solution() def random_solution(self): return random_sequence(self.jobs * self.machines) + + + # get_job: obtains the job corresponding to an operation + def get_job(self, op): + return op % self.jobs + + # get_machine: obtains the machine corresponding to an operation + def get_machine(self, op): + return int((op - self.get_job(op)) / self.jobs) + # implementation of the completion times of each job on each machine for OpenShop # it has to be a full sequence - def ct(self, sequence): + def ct(self, solution): # job order to be returned job_order = [] @@ -1017,18 +1036,17 @@ def ct(self, sequence): # completion time of each job on each machine ct = [[0 for j in range(self.jobs)] for i in range(self.machines)] - for job in sequence: + for op in solution: # obtain decoded_job - decoded_job = job % self.jobs + decoded_job = self.get_job(op) # if it is a new job, it is appended to the job_order if len([e for e in job_order if e == decoded_job]) == 0: job_order.append(decoded_job) # obtain decoded machine - decoded_machine = int((job - decoded_job) / self.jobs) - + decoded_machine = self.get_machine(op) # compute completion time curr_completion_time = max(ct_jobs[decoded_job], ct_machines[decoded_machine]) + self.pt[decoded_machine][decoded_job] ct_jobs[decoded_job]= curr_completion_time @@ -1040,6 +1058,22 @@ def ct(self, sequence): return ct, job_order + # returns the sequence of jobs in a given solution. It is useful e.g. to check job-level measures + def get_sequence(self, solution): + + # job order to be returned + job_order = [] + + for op in solution: + + # obtain decoded_job + decoded_job = self.get_job(op) + + # if it is a new job, it is appended to the job_order + if len([e for e in job_order if e == decoded_job]) == 0: + job_order.append(decoded_job) + + return job_order diff --git a/scheptk.egg-info/PKG-INFO b/scheptk.egg-info/PKG-INFO index 2a7f1b6..2005550 100644 --- a/scheptk.egg-info/PKG-INFO +++ b/scheptk.egg-info/PKG-INFO @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: scheptk -Version: 0.1.2 +Version: 0.1.3 Summary: Python scheduling package Home-page: https://github.com/framinan/scheptk Author: Jose M Framinan diff --git a/scheptk/__pycache__/scheptk.cpython-39.pyc b/scheptk/__pycache__/scheptk.cpython-39.pyc index 96b5857777e698e287a03c33ee35a62f367701ad..18dc41f510e36462400d65fd12d215bf36b5c3c6 100644 GIT binary patch delta 10170 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 w1GgP%U2+?t(U}JeZ3I*hVmX3>t&^ql+VBNK-J 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