IGJSP 0.0.7__tar.gz → 0.0.8__tar.gz

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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: IGJSP
3
- Version: 0.0.7
3
+ Version: 0.0.8
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>
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "IGJSP"
7
- version = "0.0.7"
7
+ version = "0.0.8"
8
8
  authors = [
9
9
  { name="GPS-UPV", email="gps@dsic.upv.es" },
10
10
  ]
@@ -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}
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes