IGJSP 0.0.6__py3-none-any.whl → 0.0.8__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
|
@@ -44,7 +44,7 @@ class JSP:
|
|
|
44
44
|
tpm = [max(10, data) for data in np.random.normal(50, 20, self.numMchs)]
|
|
45
45
|
else:
|
|
46
46
|
tpm = expon(loc=10, scale=20).rvs(self.numMchs)
|
|
47
|
-
|
|
47
|
+
|
|
48
48
|
energyPer, timePer = self._particionate_speed_space(speed)
|
|
49
49
|
self._generate_standar_operation_cost(distribution)
|
|
50
50
|
|
|
@@ -277,16 +277,16 @@ class JSP:
|
|
|
277
277
|
return new_object
|
|
278
278
|
|
|
279
279
|
def generate_maxmin_objective_values(self):
|
|
280
|
-
max_makespan = sum([max(self.ProcessingTime[job, machine, :]) for job in range(self.numJobs) for machine in range(self.numMchs)])
|
|
280
|
+
self.max_makespan = sum([max(self.ProcessingTime[job, machine, :]) for job in range(self.numJobs) for machine in range(self.numMchs)])
|
|
281
281
|
self.min_makespan = max([sum([min(self.ProcessingTime[job, machine, :]) for machine in range(self.numMchs)]) for job in range(self.numJobs)])
|
|
282
|
-
self.max_min_makespan = max_makespan - self.min_makespan
|
|
283
|
-
max_energy = sum([max(self.EnergyConsumption[job, machine, :]) for job in range(self.numJobs) for machine in range(self.numMchs)])
|
|
282
|
+
self.max_min_makespan = self.max_makespan - self.min_makespan
|
|
283
|
+
self.max_energy = sum([max(self.EnergyConsumption[job, machine, :]) for job in range(self.numJobs) for machine in range(self.numMchs)])
|
|
284
284
|
self.min_energy = sum([min(self.EnergyConsumption[job, machine, :]) for job in range(self.numJobs) for machine in range(self.numMchs)])
|
|
285
|
-
self.max_min_energy = max_energy - self.min_energy
|
|
285
|
+
self.max_min_energy = self.max_energy - self.min_energy
|
|
286
286
|
if self.rddd == 1:
|
|
287
|
-
self.max_tardiness = sum([max(0, max_makespan - self.ReleaseDueDate[job, 1]) for job in range(self.numJobs)])
|
|
287
|
+
self.max_tardiness = sum([max(0, self.max_makespan - self.ReleaseDueDate[job, 1]) for job in range(self.numJobs)])
|
|
288
288
|
elif self.rddd == 2:
|
|
289
|
-
self.max_tardiness = np.sum([max(0, np.int64(max_makespan - self.ReleaseDueDate[job, machine, 1])) for job in range(self.numJobs) for machine in range(self.numMchs)])
|
|
289
|
+
self.max_tardiness = np.sum([max(0, np.int64(self.max_makespan - self.ReleaseDueDate[job, machine, 1])) for job in range(self.numJobs) for machine in range(self.numMchs)])
|
|
290
290
|
|
|
291
291
|
def norm_makespan(self, makespan):
|
|
292
292
|
return (makespan - self.min_makespan) / self.max_min_makespan
|
|
@@ -388,7 +388,86 @@ class JSP:
|
|
|
388
388
|
|
|
389
389
|
def generate_schedule_image(self, schedule):
|
|
390
390
|
pass
|
|
391
|
-
|
|
391
|
+
|
|
392
|
+
def vectorization(self):
|
|
393
|
+
vectorization = {}
|
|
394
|
+
# Caracteristicas básicas
|
|
395
|
+
vectorization["jobs"] = self.numJobs
|
|
396
|
+
vectorization["machines"] = self.numMchs
|
|
397
|
+
vectorization["rddd"] = self.rddd
|
|
398
|
+
vectorization["speed"] = self.speed
|
|
399
|
+
vectorization["max_makespan"] = self.max_makespan
|
|
400
|
+
vectorization["min_makespan"] = self.min_makespan
|
|
401
|
+
vectorization["max_sum_energy"] = self.max_energy
|
|
402
|
+
vectorization["min_sum_energy"] = self.min_energy
|
|
403
|
+
vectorization["max_tardiness"] = self.max_tardiness
|
|
404
|
+
vectorization["min_window"] = 0
|
|
405
|
+
vectorization["max_window"] = 0
|
|
406
|
+
vectorization["mean_window"] = 0
|
|
407
|
+
vectorization["overlap"] = 0
|
|
408
|
+
|
|
409
|
+
# Caracteristicas complejas
|
|
410
|
+
if self.rddd == 0:
|
|
411
|
+
vectorization["min_window"] = -1
|
|
412
|
+
vectorization["max_window"] = -1
|
|
413
|
+
vectorization["mean_window"] = -1
|
|
414
|
+
vectorization["overlap"] = -1
|
|
415
|
+
else:
|
|
416
|
+
if self.rddd == 1:
|
|
417
|
+
# Ventana de cada trabajo
|
|
418
|
+
for job in range(self.numJobs):
|
|
419
|
+
tproc_min = np.sum(np.min(self.ProcessingTime[job,machine,:]) for machine in range(self.numMchs))
|
|
420
|
+
tproc_max = np.sum(np.max(self.ProcessingTime[job,machine,:]) for machine in range(self.numMchs))
|
|
421
|
+
tproc_mean = np.sum(np.mean(self.ProcessingTime[job,machine,:]) for machine in range(self.numMchs))
|
|
422
|
+
window = self.ReleaseDueDate[job,1] - self.ReleaseDueDate[job,0]
|
|
423
|
+
vectorization["min_window"] += window / tproc_max
|
|
424
|
+
vectorization["max_window"] += window / tproc_min
|
|
425
|
+
vectorization["mean_window"] += window / tproc_mean
|
|
426
|
+
vectorization["min_window"] = vectorization["min_window"] / self.numJobs
|
|
427
|
+
vectorization["max_window"] = vectorization["max_window"] / self.numJobs
|
|
428
|
+
vectorization["mean_window"] = vectorization["mean_window"] / self.numJobs
|
|
429
|
+
# Overlap entre trabajos
|
|
430
|
+
for job in range(self.numJobs):
|
|
431
|
+
for job2 in range(job + 1, self.numJobs):
|
|
432
|
+
diff = min(self.ReleaseDueDate[job,1],self.ReleaseDueDate[job2,1])-max(self.ReleaseDueDate[job,0], self.ReleaseDueDate[job2,0])
|
|
433
|
+
if diff > 0:
|
|
434
|
+
vectorization["overlap"] += diff / (self.ReleaseDueDate[job,1] - self.ReleaseDueDate[job,0])
|
|
435
|
+
vectorization["overlap"] += diff / (self.ReleaseDueDate[job2,1] - self.ReleaseDueDate[job2,0])
|
|
436
|
+
vectorization["overlap"] = vectorization["overlap"] / (self.numJobs * (self.numJobs - 1))
|
|
437
|
+
else:
|
|
438
|
+
# Ventana de cada operacion
|
|
439
|
+
for job in range(self.numJobs):
|
|
440
|
+
for machine in range(self.numMchs):
|
|
441
|
+
tproc_min = np.min(self.ProcessingTime[job,machine,:])
|
|
442
|
+
tproc_max = np.max(self.ProcessingTime[job,machine,:])
|
|
443
|
+
tproc_mean = np.mean(self.ProcessingTime[job,machine,:])
|
|
444
|
+
window = self.ReleaseDueDate[job,machine,1] - self.ReleaseDueDate[job,machine,0]
|
|
445
|
+
vectorization["min_window"] += window / tproc_max
|
|
446
|
+
vectorization["max_window"] += window / tproc_min
|
|
447
|
+
vectorization["mean_window"] += window / tproc_mean
|
|
448
|
+
vectorization["min_window"] = vectorization["min_window"] / (self.numJobs * self.numMchs)
|
|
449
|
+
vectorization["max_window"] = vectorization["max_window"] / (self.numJobs * self.numMchs)
|
|
450
|
+
vectorization["mean_window"] = vectorization["mean_window"] / (self.numJobs * self.numMchs)
|
|
451
|
+
# Overlap entre operaciones
|
|
452
|
+
for job1 in range(self.numJobs):
|
|
453
|
+
for machine1 in range(self.numMchs):
|
|
454
|
+
for job2 in range(job1 + 1, self.numJobs):
|
|
455
|
+
diff = min(self.ReleaseDueDate[job1,machine1,1],self.ReleaseDueDate[job2,machine1,1])-max(self.ReleaseDueDate[job1,machine1,0], self.ReleaseDueDate[job2,machine1,0])
|
|
456
|
+
if diff > 0:
|
|
457
|
+
vectorization["overlap"] += diff / (self.ReleaseDueDate[job1,machine1,1] - self.ReleaseDueDate[job1,machine1,0])
|
|
458
|
+
vectorization["overlap"] += diff / (self.ReleaseDueDate[job2,machine1,1] - self.ReleaseDueDate[job2,machine1,0])
|
|
459
|
+
vectorization["overlap"] = vectorization["overlap"] / (self.numJobs * (self.numJobs - 1) * self.numMchs)
|
|
460
|
+
# Estadísticos de los datos
|
|
461
|
+
vectorization["max_processing_time_value"] = np.max(self.ProcessingTime)
|
|
462
|
+
vectorization["min_processing_time_value"] = np.min(self.ProcessingTime)
|
|
463
|
+
vectorization["mean_processing_time_value"] = np.mean(self.ProcessingTime)
|
|
464
|
+
|
|
465
|
+
vectorization["max_energy_value"] = np.max(self.ProcessingTime)
|
|
466
|
+
vectorization["min_energy_value"] = np.min(self.ProcessingTime)
|
|
467
|
+
vectorization["mean_energy_value"] = np.mean(self.ProcessingTime)
|
|
468
|
+
|
|
469
|
+
return vectorization
|
|
470
|
+
|
|
392
471
|
def disjuntive_graph(self):
|
|
393
472
|
vertex = list(range(self.numJobs * self.numMchs + 2))
|
|
394
473
|
A = {v: [] for v in vertex}
|
|
@@ -451,8 +530,8 @@ class Generator:
|
|
|
451
530
|
self.taillard = taillard
|
|
452
531
|
self.savepath = savepath
|
|
453
532
|
|
|
454
|
-
def generate_new_instance(self, jobs = 10, machines = 4,
|
|
455
|
-
jsp = JSP(jobs=jobs, machines=machines
|
|
533
|
+
def generate_new_instance(self, jobs = 10, machines = 4,speed = 1, ReleaseDateDueDate = 0, distribution = "uniform" , seed = 0, tpm=[]):
|
|
534
|
+
jsp = JSP(jobs=jobs, machines=machines)
|
|
456
535
|
jsp.fill_random_values(speed = speed, rddd = ReleaseDateDueDate, distribution = distribution, seed = seed,tpm = tpm)
|
|
457
536
|
if not (self.json or self.dzn or self.taillard): return jsp
|
|
458
537
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
IGJSP/generador.py,sha256=
|
|
1
|
+
IGJSP/generador.py,sha256=ON81bJF8VpNISN9RdUcQncyzfXVm-YZqLEpdjwRQoKg,27425
|
|
2
2
|
IGJSP/main.py,sha256=qnpAdI9Nymfbb2t674EHKCZr1vG80tGyVT5RKMiGvZM,2727
|
|
3
3
|
IGJSP/Minizinc/Models/RD/JSP0.mzn,sha256=cfN_E3RQ6nBulGfaOOYTd-zAgA5SI6E2saDlYtKCflg,2282
|
|
4
4
|
IGJSP/Minizinc/Models/RD/JSP1.mzn,sha256=5B8cyw2WyKR8yEL1fFd0TaCAVhjPoxEJRJDPPEjJGEk,2840
|
|
@@ -9,7 +9,7 @@ IGJSP/Minizinc/Types/RD/JSP2.mzn,sha256=ATqpg-Ow_VzjQJ_hZSSXiTXmwmqNqFsq81TZgcnj
|
|
|
9
9
|
IGJSP/Minizinc/Types/RD/type0.dzn,sha256=alo54TrPd2svp-YeOq8rNhb42Aj5w4N1y1WYRxZ-aWM,225
|
|
10
10
|
IGJSP/Minizinc/Types/RD/type1.dzn,sha256=r3f1uOoDnscjpXHbpvOWPGhGN0tmwkJ3NYIRP-NGk5M,298
|
|
11
11
|
IGJSP/Minizinc/Types/RD/type2.dzn,sha256=ddJxLqR_WlUpycHhA_QulxiTx3o9neIzNESEt59VUx0,344
|
|
12
|
-
igjsp-0.0.
|
|
13
|
-
igjsp-0.0.
|
|
14
|
-
igjsp-0.0.
|
|
15
|
-
igjsp-0.0.
|
|
12
|
+
igjsp-0.0.8.dist-info/METADATA,sha256=g9Jp-YJgIbHm7PzWZRZZumUgdlB73MsohPKJqzt4XMU,7406
|
|
13
|
+
igjsp-0.0.8.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
14
|
+
igjsp-0.0.8.dist-info/licenses/LICENSE,sha256=f7RDRO-z_nMoooAya7NAb8sXtrHR6WnttYtyUc9fB-c,1116
|
|
15
|
+
igjsp-0.0.8.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|