IGJSP 1.1.2__py3-none-any.whl → 1.1.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
IGJSP/generador.py CHANGED
@@ -15,6 +15,15 @@ from pprint import pprint
15
15
 
16
16
  from scipy.stats import expon, norm, uniform
17
17
 
18
+ from importlib.resources import files, as_file
19
+
20
+ def _read_text_resource(rel_path: str, encoding: str = "utf-8") -> str:
21
+ p = files("IGJSP").joinpath(rel_path)
22
+ if not p.is_file():
23
+ raise FileNotFoundError(
24
+ f"Template Minizinc no encontrado en el paquete: {rel_path}"
25
+ )
26
+ return p.read_text(encoding=encoding)
18
27
 
19
28
  def f(x):
20
29
  return int(np.exp(-int(x)/100)*100)
@@ -628,7 +637,7 @@ class JSP:
628
637
  with open(path, 'wb') as f:
629
638
  pickle.dump(self, f)
630
639
 
631
- def saveDznFile(self, InputDir, OutputDir):
640
+ def saveDznFile(self, InputDir, OutputDir,index):
632
641
  indexProblema = OutputDir.split("/")[-2]
633
642
  OutputDir = "/".join(OutputDir.split("/")[:-2])
634
643
  # indexProblema = os.path.basename(os.path.normpath(OutputDir))
@@ -637,40 +646,41 @@ class JSP:
637
646
  # print(self.speed)
638
647
  # for t in [0, 1, 2]:
639
648
  t = data.rddd
640
- for s in range(1,self.speed+1):
641
- s0, sf, sp = [0,s,1]
642
- time = data.ProcessingTime[:, :, s0:sf:sp]
643
- energy = data.EnergyConsumption[:, :, s0:sf:sp]
644
- precedence = np.full((data.numJobs, data.numMchs), 0)
645
-
646
- replace_data = {
647
- "machines": data.numMchs,
648
- "jobs": data.numJobs,
649
- "Speed": s,
650
- "time": str(time.flatten()).replace(" ", ", "),
651
- "energy": str(energy.flatten()).replace(" ", ", ")
652
- }
653
-
654
- if t == 1:
655
- replace_data["releaseDate"] = str([int(data.ReleaseDueDate[job, 0]) for job in range(data.numJobs)]).replace(", ", " ")
656
- replace_data["dueDate"] = str([int(data.ReleaseDueDate[job, 1]) for job in range(data.numJobs)]).replace(", ", " ")
657
- elif t == 2:
658
- replace_data["releaseDate"] = str(data.ReleaseDueDate[:, :, 0].flatten()).replace(", ", " ")
659
- replace_data["dueDate"] = str(data.ReleaseDueDate[:, :, 1].flatten()).replace(", ", " ")
660
-
661
- for job in range(data.numJobs):
662
- for i, prioridad in enumerate(range(data.numMchs)):
663
- precedence[job, data.Orden[job, prioridad]] = i
664
-
665
- replace_data["precedence"] = str(precedence.flatten()).replace(" ", ",")
666
-
667
- with open(f"./Minizinc/Types/RD/JSP/type{t}.dzn", "r", encoding="utf-8") as file:
668
- filedata = file.read()
669
- for k, v in replace_data.items():
670
- filedata = filedata.replace("{" + k + "}", str(v))
671
- os.makedirs(f"{OutputDir}/", exist_ok=True)
672
- with open(f"{OutputDir}/{indexProblema}-{t}-{s}.dzn", "w+", encoding="utf-8") as new:
673
- new.write(filedata)
649
+ # for s in range(1,self.speed+1):
650
+ s = self.speed
651
+ s0, sf, sp = [0,s,1]
652
+ time = data.ProcessingTime[:, :, s0:sf:sp]
653
+ energy = data.EnergyConsumption[:, :, s0:sf:sp]
654
+ precedence = np.full((data.numJobs, data.numMchs), 0)
655
+
656
+ replace_data = {
657
+ "machines": data.numMchs,
658
+ "jobs": data.numJobs,
659
+ "Speed": s,
660
+ "time": str(time.flatten()).replace(" ", ", "),
661
+ "energy": str(energy.flatten()).replace(" ", ", ")
662
+ }
663
+
664
+ if t == 1:
665
+ replace_data["releaseDate"] = str([int(data.ReleaseDueDate[job, 0]) for job in range(data.numJobs)]).replace(", ", " ")
666
+ replace_data["dueDate"] = str([int(data.ReleaseDueDate[job, 1]) for job in range(data.numJobs)]).replace(", ", " ")
667
+ elif t == 2:
668
+ replace_data["releaseDate"] = str(data.ReleaseDueDate[:, :, 0].flatten()).replace(", ", " ")
669
+ replace_data["dueDate"] = str(data.ReleaseDueDate[:, :, 1].flatten()).replace(", ", " ")
670
+
671
+ for job in range(data.numJobs):
672
+ for i, prioridad in enumerate(range(data.numMchs)):
673
+ precedence[job, data.Orden[job, prioridad]] = i
674
+
675
+ replace_data["precedence"] = str(precedence.flatten()).replace(" ", ",")
676
+ filedata = _read_text_resource(f"Minizinc/Types/RD/JSP/type{t}.dzn")
677
+ # with open(f"./Minizinc/Types/RD/JSP/type{t}.dzn", "r", encoding="utf-8") as file:
678
+ # filedata = file.read()
679
+ for k, v in replace_data.items():
680
+ filedata = filedata.replace("{" + k + "}", str(v))
681
+ os.makedirs(f"{OutputDir}/", exist_ok=True)
682
+ with open(f"{OutputDir}/{indexProblema}-{t}-{s}_{index}.dzn", "w+", encoding="utf-8") as new:
683
+ new.write(filedata)
674
684
 
675
685
  def saveTaillardStandardFile(self, path):
676
686
  os.makedirs("/".join(path.split("/")[:-1]),exist_ok=True)
@@ -997,7 +1007,7 @@ class FJSP(JSP):
997
1007
 
998
1008
  f.write(json_str)
999
1009
 
1000
- def saveDznFile(self, InputDir, OutputDir):
1010
+ def saveDznFile(self, InputDir, OutputDir,index):
1001
1011
  indexProblema = OutputDir.split("/")[-2]
1002
1012
  OutputDir = "/".join(OutputDir.split("/")[:-2])
1003
1013
  # indexProblema = os.path.basename(os.path.normpath(OutputDir))
@@ -1006,45 +1016,44 @@ class FJSP(JSP):
1006
1016
  # print(self.speed)
1007
1017
  # for t in [0, 1, 2]:
1008
1018
  t = data.rddd
1009
- for s in range(1,self.speed+1):
1010
- s0, sf, sp = [0,s,1]
1011
- time = data.ProcessingTime[:, :, s0:sf:sp]
1012
- energy = data.EnergyConsumption[:, :, s0:sf:sp]
1013
- precedence = np.full((data.numJobs, data.numMchs), 0)
1014
-
1015
- replace_data = {
1016
- "machines": data.numMchs,
1017
- "jobs": data.numJobs,
1018
- "Speed": s,
1019
- "time": str(time.flatten()).replace(" ", ", "),
1020
- "energy": str(energy.flatten()).replace(" ", ", ")
1021
- }
1022
- if t == 1:
1023
- replace_data["releaseDate"] = str([int(data.ReleaseDueDate[job, 0]) for job in range(data.numJobs)]).replace(" ", ",")
1024
- replace_data["dueDate"] = str([int(data.ReleaseDueDate[job, 1]) for job in range(data.numJobs)]).replace(" ", ",")
1025
- elif t == 2:
1026
- replace_data["releaseDate"] = str(data.ReleaseDueDate[:, :, 0].flatten()).replace(" ", ",")
1027
- replace_data["dueDate"] = str(data.ReleaseDueDate[:, :, 1].flatten()).replace(" ", ",")
1028
-
1029
- for job in range(data.numJobs):
1030
- for i, prioridad in enumerate(range(data.numMchs)):
1031
- precedence[job, data.Orden[job, prioridad]] = i
1032
- replace_data["precedence"] = str(precedence.flatten()).replace(" ", ",")
1033
-
1034
- replace_data["available_machines"] = str(data.available_machines.flatten()).replace(" ", ", ")
1035
-
1036
- with open(f"./Minizinc/Types/RD/FJSP/type{t}.dzn", "r", encoding="utf-8") as file:
1037
- filedata = file.read()
1038
- for kk, v in replace_data.items():
1039
- filedata = filedata.replace("{" + kk + "}", str(v))
1040
-
1041
- os.makedirs(f"{OutputDir}/", exist_ok=True)
1042
-
1043
- with open(f"{OutputDir}/{indexProblema}-{t}-{s}.dzn", "w+", encoding="utf-8") as new:
1044
- new.write(filedata)
1045
- # print(f"{OutputDir}/{indexProblema}")
1046
- # with open(f"{OutputDir}/{indexProblema}", "wb") as new:
1047
- # pickle.dump(new_object, new)
1019
+ # for s in range(1,self.speed+1):
1020
+ s= self.speed
1021
+ s0, sf, sp = [0,s,1]
1022
+ time = data.ProcessingTime[:, :, s0:sf:sp]
1023
+ energy = data.EnergyConsumption[:, :, s0:sf:sp]
1024
+ precedence = np.full((data.numJobs, data.numMchs), 0)
1025
+
1026
+ replace_data = {
1027
+ "machines": data.numMchs,
1028
+ "jobs": data.numJobs,
1029
+ "Speed": s,
1030
+ "time": str(time.flatten()).replace(" ", ", "),
1031
+ "energy": str(energy.flatten()).replace(" ", ", ")
1032
+ }
1033
+ if t == 1:
1034
+ replace_data["releaseDate"] = str([int(data.ReleaseDueDate[job, 0]) for job in range(data.numJobs)]).replace(" ", ",")
1035
+ replace_data["dueDate"] = str([int(data.ReleaseDueDate[job, 1]) for job in range(data.numJobs)]).replace(" ", ",")
1036
+ elif t == 2:
1037
+ replace_data["releaseDate"] = str(data.ReleaseDueDate[:, :, 0].flatten()).replace(" ", ",")
1038
+ replace_data["dueDate"] = str(data.ReleaseDueDate[:, :, 1].flatten()).replace(" ", ",")
1039
+
1040
+ for job in range(data.numJobs):
1041
+ for i, prioridad in enumerate(range(data.numMchs)):
1042
+ precedence[job, data.Orden[job, prioridad]] = i
1043
+ replace_data["precedence"] = str(precedence.flatten()).replace(" ", ",")
1044
+
1045
+ replace_data["available_machines"] = str(data.available_machines.flatten()).replace(" ", ", ")
1046
+
1047
+ # with open(f"./Minizinc/Types/RD/FJSP/type{t}.dzn", "r", encoding="utf-8") as file:
1048
+ # filedata = file.read()
1049
+ filedata = _read_text_resource(f"Minizinc/Types/RD/FJSP/type{t}.dzn")
1050
+ for kk, v in replace_data.items():
1051
+ filedata = filedata.replace("{" + kk + "}", str(v))
1052
+
1053
+ os.makedirs(f"{OutputDir}/", exist_ok=True)
1054
+
1055
+ with open(f"{OutputDir}/{indexProblema}-{t}-{s}_{index}.dzn", "w+", encoding="utf-8") as new:
1056
+ new.write(filedata)
1048
1057
 
1049
1058
  def saveTaillardStandardFile(self, path):
1050
1059
  os.makedirs("/".join(path.split("/")[:-1]),exist_ok=True)
@@ -1116,14 +1125,12 @@ class Generator:
1116
1125
  jsp_instance = JSP(jobs = jobs, machines = machines)
1117
1126
  case "FJSP":
1118
1127
  jsp_instance = FJSP(jobs = jobs, machines = machines)
1119
-
1128
+
1120
1129
  for index in range(1, size + 1):
1121
-
1122
1130
  jsp_instance.fill_random_values(speed = speed, rddd = ReleaseDateDueDate, distribution = distribution, seed = seed,tpm = tpm)
1123
1131
 
1124
1132
  # Determinar el nombre de salida basado en `outputName` y los parámetros actuales
1125
- problem_path = self.savepath.format(size = size, jobs =jobs, machines = machines, release_due_date = ReleaseDateDueDate,
1126
- speed_scaling = speed, distribution = distribution, seed=seed)
1133
+ problem_path = self.savepath.format(size = size, jobs =jobs, machines = machines, release_due_date = ReleaseDateDueDate, speed_scaling = speed, distribution = distribution, seed=seed)
1127
1134
 
1128
1135
  if not (self.json or self.dzn or self.taillard): return jsp_instance
1129
1136
 
@@ -1139,7 +1146,7 @@ class Generator:
1139
1146
  if self.dzn:
1140
1147
  pkl_path = f"{problem_path}/" + jm_path.split("/")[0] + f"_{j}x{m}_{i}.pkl"
1141
1148
  jsp_instance.savePythonFile(pkl_path)
1142
- jsp_instance.saveDznFile(pkl_path, problem_path + jm_path)#f"{j}x{m}_{i}")
1149
+ jsp_instance.saveDznFile(pkl_path, problem_path + jm_path,index)#f"{j}x{m}_{i}")
1143
1150
  os.remove(pkl_path)
1144
1151
  if self.taillard:
1145
1152
  jsp_instance.saveTaillardStandardFile(problem_path + jm_path.split("/")[0] + f"_{j}x{m}_{i}.txt")
@@ -1149,7 +1156,7 @@ class Generator:
1149
1156
  if self.dzn:
1150
1157
  pkl_path = f"{problem_path}/" + jm_path.split("/")[0] + f"_{j}x{m}_{i}.pkl"
1151
1158
  jsp_instance.savePythonFile(pkl_path)
1152
- jsp_instance.saveDznFile(pkl_path,f"{problem_path}/DZN/" + jm_path)#f"{j}x{m}_{i}")
1159
+ jsp_instance.saveDznFile(pkl_path,f"{problem_path}/DZN/" + jm_path,index)#f"{j}x{m}_{i}")
1153
1160
  os.remove(pkl_path)
1154
1161
  if self.taillard:
1155
1162
  jsp_instance.saveTaillardStandardFile(f"{problem_path}/TAILLARD/" + jm_path.split("/")[0] + f"_{j}x{m}_{i}.txt")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: IGJSP
3
- Version: 1.1.2
3
+ Version: 1.1.3
4
4
  Summary: Instance generator for JSP
5
5
  Project-URL: Homepage, https://gps.blogs.upv.es/
6
6
  Author-email: GPS-UPV <gps@dsic.upv.es>
@@ -1,4 +1,4 @@
1
- IGJSP/generador.py,sha256=mzJXUxTB5BTek7nvGXtbZbPt54hmWI7u2e5AF_7sqSE,50604
1
+ IGJSP/generador.py,sha256=TJiEBaZkUSzLDn0tZJ7oMhbz2QJq51611F-v8X22oLk,50728
2
2
  IGJSP/main.py,sha256=Sia5Ss8O3HWBdshvPLJKUMaZIoQPHy6x8yzvojojPFo,2838
3
3
  IGJSP/Minizinc/Models/RD/JSP0.mzn,sha256=cfN_E3RQ6nBulGfaOOYTd-zAgA5SI6E2saDlYtKCflg,2282
4
4
  IGJSP/Minizinc/Models/RD/JSP1.mzn,sha256=5B8cyw2WyKR8yEL1fFd0TaCAVhjPoxEJRJDPPEjJGEk,2840
@@ -12,7 +12,7 @@ IGJSP/Minizinc/Types/RD/FJSP/type2.dzn,sha256=Wz1MnkSL5GUPsbh1eq0leoaQRImkNqQqkX
12
12
  IGJSP/Minizinc/Types/RD/JSP/type0.dzn,sha256=wNuPQkXBXPSpPaPz2WFhp4pGDgfSimtg4I93UfwC01Q,263
13
13
  IGJSP/Minizinc/Types/RD/JSP/type1.dzn,sha256=Xbt9StzCgEqqh_HS9tWGrTVtu-OEnf5Yq5Ty91AkzoM,333
14
14
  IGJSP/Minizinc/Types/RD/JSP/type2.dzn,sha256=L2nc7bPJEhyuaEwgw0ZCpC52CpVJILQU_WQdKn8GUZs,379
15
- igjsp-1.1.2.dist-info/METADATA,sha256=TnM0x-lsRqev2eMaVcAtbg_p9JxWDcy2u4qBrIdUnk0,10609
16
- igjsp-1.1.2.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
17
- igjsp-1.1.2.dist-info/licenses/LICENSE,sha256=f7RDRO-z_nMoooAya7NAb8sXtrHR6WnttYtyUc9fB-c,1116
18
- igjsp-1.1.2.dist-info/RECORD,,
15
+ igjsp-1.1.3.dist-info/METADATA,sha256=qWUwuqSmPDChTMxgy_VbRSbUyclj5oibJCKDp6B3YXQ,10609
16
+ igjsp-1.1.3.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
17
+ igjsp-1.1.3.dist-info/licenses/LICENSE,sha256=f7RDRO-z_nMoooAya7NAb8sXtrHR6WnttYtyUc9fB-c,1116
18
+ igjsp-1.1.3.dist-info/RECORD,,
File without changes