IGJSP 0.0.4__py3-none-any.whl → 0.0.5__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 +76 -59
- IGJSP/main.py +12 -22
- igjsp-0.0.5.dist-info/METADATA +216 -0
- igjsp-0.0.5.dist-info/RECORD +15 -0
- {igjsp-0.0.4.dist-info → igjsp-0.0.5.dist-info}/licenses/LICENSE +1 -1
- IGJSP/generador/10_4/10_4.pkl +0 -0
- IGJSP/generador/10_4/10x4_0.dzn/10x4_0.dzn +0 -0
- IGJSP/generador/10_4/10x4_0.dzn/10x4_0.dzn-0-1.dzn +0 -8
- IGJSP/generador/10_4/10x4_0.json +0 -397
- IGJSP/generador/10_4/10x4_0.txt +0 -38
- IGJSP/generador/2_1/2_1.pkl +0 -0
- IGJSP/generador/2_1/2x1_0.dzn/2x1_0.dzn +0 -0
- IGJSP/generador/2_1/2x1_0.dzn/2x1_0.dzn-0-1.dzn +0 -8
- IGJSP/generador/2_1/2x1_0.json +0 -42
- IGJSP/generador/2_1/2x1_0.txt +0 -14
- IGJSP/generador/2_2/2x2_0.json +0 -59
- IGJSP/generador/2_2/2x2_0.txt +0 -14
- IGJSP/generador/2_6/2x6_0.json +0 -127
- IGJSP/generador/2_6/2x6_0.txt +0 -14
- IGJSP/generador/3_1/3x1_0.json +0 -56
- IGJSP/generador/3_1/3x1_0.txt +0 -17
- IGJSP/generador/3_2/3x2_0.json +0 -81
- IGJSP/generador/3_2/3x2_0.txt +0 -17
- IGJSP/generador/3_6/3x6_0.json +0 -181
- IGJSP/generador/3_6/3x6_0.txt +0 -17
- IGJSP/generador/5_1/5x1_0.json +0 -84
- IGJSP/generador/5_1/5x1_0.txt +0 -23
- IGJSP/generador/5_2/5x2_0.json +0 -125
- IGJSP/generador/5_2/5x2_0.txt +0 -23
- IGJSP/generador/5_6/5x6_0.json +0 -289
- IGJSP/generador/5_6/5x6_0.txt +0 -23
- igjsp-0.0.4.dist-info/METADATA +0 -185
- igjsp-0.0.4.dist-info/RECORD +0 -41
- {igjsp-0.0.4.dist-info → igjsp-0.0.5.dist-info}/WHEEL +0 -0
IGJSP/generador.py
CHANGED
|
@@ -11,6 +11,7 @@ from pathlib import Path
|
|
|
11
11
|
import networkx as nx
|
|
12
12
|
import numpy as np
|
|
13
13
|
from scipy.stats import expon, norm, uniform
|
|
14
|
+
from pprint import pprint
|
|
14
15
|
|
|
15
16
|
|
|
16
17
|
def f(x):
|
|
@@ -49,10 +50,7 @@ class JSP:
|
|
|
49
50
|
|
|
50
51
|
self.ProcessingTime = np.zeros((self.numJobs, self.numMchs, self.speed), dtype=int)
|
|
51
52
|
self.EnergyConsumption = np.zeros((self.numJobs, self.numMchs, self.speed), dtype=int)
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
if len(self.Orden) == 0:
|
|
55
|
-
self.Orden = np.zeros((self.numJobs, self.numMchs), dtype=int)
|
|
53
|
+
self.Orden = np.zeros((self.numJobs, self.numMchs), dtype=int)
|
|
56
54
|
|
|
57
55
|
if self.rddd == 0:
|
|
58
56
|
release_date_tasks = np.array([0] * self.numJobs)
|
|
@@ -165,52 +163,56 @@ class JSP:
|
|
|
165
163
|
json.dump(self.JSP, f, indent=4)
|
|
166
164
|
|
|
167
165
|
def saveDznFile(self, InputDir, OutputDir):
|
|
168
|
-
indexProblema =
|
|
166
|
+
indexProblema = OutputDir.split("/")[-2]
|
|
167
|
+
OutputDir = "/".join(OutputDir.split("/")[:-2])
|
|
168
|
+
# indexProblema = os.path.basename(os.path.normpath(OutputDir))
|
|
169
169
|
with open(f"{InputDir}", 'rb') as f:
|
|
170
170
|
data: JSP = pickle.load(f)
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
171
|
+
# print(self.speed)
|
|
172
|
+
# for t in [0, 1, 2]:
|
|
173
|
+
t = data.rddd
|
|
174
|
+
for s in range(1,self.speed+1):
|
|
175
|
+
s0, sf, sp = [0,s,1]
|
|
176
|
+
time = data.ProcessingTime[:, :, s0:sf:sp]
|
|
177
|
+
energy = data.EnergyConsumption[:, :, s0:sf:sp]
|
|
178
|
+
precedence = np.full((data.numJobs, data.numMchs), 0)
|
|
179
|
+
|
|
180
|
+
replace_data = {
|
|
181
|
+
"machines": data.numMchs,
|
|
182
|
+
"jobs": data.numJobs,
|
|
183
|
+
"Speed": s,
|
|
184
|
+
"time": list(time.flatten()),
|
|
185
|
+
"energy": list(energy.flatten())
|
|
186
|
+
}
|
|
187
|
+
if t == 1:
|
|
188
|
+
replace_data["releaseDate"] = [data.ReleaseDueDate[job, 0] for job in range(data.numJobs)]
|
|
189
|
+
replace_data["dueDate"] = [data.ReleaseDueDate[job, 1] for job in range(data.numJobs)]
|
|
190
|
+
elif t == 2:
|
|
191
|
+
replace_data["releaseDate"] = list(data.ReleaseDueDate[:, :, 0].flatten())
|
|
192
|
+
replace_data["dueDate"] = list(data.ReleaseDueDate[:, :, 1].flatten())
|
|
193
|
+
|
|
194
|
+
for job in range(data.numJobs):
|
|
195
|
+
for i, prioridad in enumerate(range(data.numMchs)):
|
|
196
|
+
precedence[job, data.Orden[job, prioridad]] = i
|
|
197
|
+
replace_data["precedence"] = list(precedence.flatten())
|
|
198
|
+
|
|
199
|
+
new_object = data.change_rddd_type(t).select_speeds(list(range(s0, sf, sp)))
|
|
200
|
+
with open(f"./Minizinc/Types/RD/type{t}.dzn", "r", encoding="utf-8") as file:
|
|
201
|
+
filedata = file.read()
|
|
202
|
+
for kk, v in replace_data.items():
|
|
203
|
+
filedata = filedata.replace("{" + kk + "}", str(v))
|
|
204
|
+
|
|
205
|
+
os.makedirs(f"{OutputDir}/", exist_ok=True)
|
|
206
|
+
|
|
207
|
+
with open(f"{OutputDir}/{indexProblema}-{t}-{s}.dzn", "w+", encoding="utf-8") as new:
|
|
208
|
+
new.write(filedata)
|
|
209
|
+
# print(f"{OutputDir}/{indexProblema}")
|
|
210
|
+
# with open(f"{OutputDir}/{indexProblema}", "wb") as new:
|
|
211
|
+
# pickle.dump(new_object, new)
|
|
211
212
|
|
|
212
213
|
def saveTaillardStandardFile(self, path):
|
|
213
|
-
|
|
214
|
+
os.makedirs("/".join(path.split("/")[:-1]),exist_ok=True)
|
|
215
|
+
with open(path, 'w+') as f:
|
|
214
216
|
# Escribir el encabezado con el número de trabajos y máquinas
|
|
215
217
|
f.write(f"Number of jobs: {self.numJobs}\n")
|
|
216
218
|
f.write(f"Number of machines: {self.numMchs}\n\n")
|
|
@@ -251,9 +253,7 @@ class JSP:
|
|
|
251
253
|
return self
|
|
252
254
|
new_object = copy.deepcopy(self)
|
|
253
255
|
new_object.speed = len(speeds)
|
|
254
|
-
|
|
255
256
|
new_object.ProcessingTime = new_object.ProcessingTime[:, :, speeds]
|
|
256
|
-
|
|
257
257
|
new_object.EnergyConsumption = new_object.EnergyConsumption[:, :, speeds]
|
|
258
258
|
new_object.generate_maxmin_objective_values()
|
|
259
259
|
return new_object
|
|
@@ -444,14 +444,31 @@ class JSP:
|
|
|
444
444
|
# jsp.fill_random_values(speed=3, rddd=2, distribution="uniform", seed=1234)
|
|
445
445
|
# jsp.saveTaillardStandardFile("./output_taillard.txt")
|
|
446
446
|
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
447
|
+
class Generator:
|
|
448
|
+
def __init__( self,json = False, dzn = False, taillard = False, savepath="./"):
|
|
449
|
+
self.json = json
|
|
450
|
+
self.dzn = dzn
|
|
451
|
+
self.taillard = taillard
|
|
452
|
+
self.savepath = savepath
|
|
453
|
+
|
|
454
|
+
def generate_new_instance(self, jobs = 10, machines = 4, ProcessingTime=[], EnergyConsumption=[], Orden=[],speed = 1, ReleaseDateDueDate = 0, distribution = "uniform" , seed = 0, tpm=[]):
|
|
455
|
+
jsp = JSP(jobs=jobs, machines=machines,ProcessingTime=ProcessingTime,EnergyConsumption=EnergyConsumption,Orden=Orden)
|
|
456
|
+
jsp.fill_random_values(speed = speed, rddd = ReleaseDateDueDate, distribution = distribution, seed = seed,tpm = tpm)
|
|
457
|
+
if not (self.json or self.dzn or self.taillard): return jsp
|
|
458
|
+
|
|
459
|
+
j = str(jobs)
|
|
460
|
+
m = str(machines)
|
|
461
|
+
jm_path = str(j)+"_"+str(m)+"/"
|
|
462
|
+
|
|
463
|
+
i = seed
|
|
464
|
+
|
|
465
|
+
if self.json:
|
|
466
|
+
jsp.saveJsonFile(f"{self.savepath}/JSON/"+jm_path.split("/")[0]+f"_{j}x{m}_{i}.json")
|
|
467
|
+
if self.dzn:
|
|
468
|
+
pkl_path = f"{self.savepath}/"+jm_path.split("/")[0]+f"_{j}x{m}_{i}.pkl"
|
|
469
|
+
jsp.savePythonFile(pkl_path)
|
|
470
|
+
jsp.saveDznFile(pkl_path,f"{self.savepath}/DZN/"+jm_path)#f"{j}x{m}_{i}")
|
|
471
|
+
os.remove(pkl_path)
|
|
472
|
+
if self.taillard:
|
|
473
|
+
jsp.saveTaillardStandardFile(f"{self.savepath}/TAILLARD/"+jm_path.split("/")[0]+f"_{j}x{m}_{i}.txt")
|
|
474
|
+
return jsp
|
IGJSP/main.py
CHANGED
|
@@ -17,19 +17,13 @@ try:
|
|
|
17
17
|
# Número de Máquinas
|
|
18
18
|
parser.add_argument('-M','--machines', type=json.loads, default='[4]')
|
|
19
19
|
# Semilla
|
|
20
|
-
parser.add_argument('-s','--seeds', type= json.loads, default=
|
|
20
|
+
parser.add_argument('-s','--seeds', type= json.loads, default='[0]')
|
|
21
21
|
# Tipo de problema
|
|
22
22
|
# 1 - JSP, 2 - FlowJSP, 3 - FlexibleJSP, 4 - OpenJSP
|
|
23
23
|
# parser.add_argument('-T','--type', type=int, default=1)
|
|
24
24
|
# Niveles de dificultad
|
|
25
25
|
# Speed Scaling
|
|
26
26
|
parser.add_argument('-S', '--speed-scaling', type=int, default=1)
|
|
27
|
-
# Tiempo estandar de procesamiento de una máquina
|
|
28
|
-
parser.add_argument('-mpt', '--machine-processing-time', dest='mpt', type=json.loads, default=[])
|
|
29
|
-
# Energy
|
|
30
|
-
parser.add_argument('-E', '--energy', type=int, default=0)
|
|
31
|
-
|
|
32
|
-
parser.add_argument('-O', '--order', type=json.loads, default='[]')
|
|
33
27
|
|
|
34
28
|
# Release and Due date
|
|
35
29
|
# 0 -> Tiempo infinito
|
|
@@ -46,6 +40,7 @@ try:
|
|
|
46
40
|
parser.add_argument('-Q', '--quantity', type=int, default=1)
|
|
47
41
|
# Distribution
|
|
48
42
|
parser.add_argument('-D','--distribution', type=str, default="normal")
|
|
43
|
+
|
|
49
44
|
# JSON save
|
|
50
45
|
parser.add_argument('-j','--json', type=bool, default=False)
|
|
51
46
|
# DZN save
|
|
@@ -59,22 +54,17 @@ try:
|
|
|
59
54
|
start = time.time()
|
|
60
55
|
for j in tqdm(args.jobs,desc='Jobs',leave=False):
|
|
61
56
|
for m in tqdm(args.machines,desc='Machines',leave=False):
|
|
62
|
-
for i in trange(args.quantity,desc='Quantity',leave=False):
|
|
63
|
-
jm_path = str(j )+"_"+str(m)+"/"
|
|
64
|
-
jsp = JSP(jobs=j, machines=m,ProcessingTime=args.mpt,EnergyConsumption=args.energy,ReleaseDateDueDate=args.release_due,Orden=args.order)
|
|
65
|
-
jsp.fill_random_values(speed=args.speed_scaling, rddd=args.release_due, distribution=args.distribution, seed=args.seeds)
|
|
66
|
-
if args.json:
|
|
67
|
-
jsp.saveJsonFile(f"{args.path}/"+jm_path+f"{j}x{m}_{i}.json")
|
|
68
|
-
pass
|
|
69
|
-
if args.dzn:
|
|
70
|
-
jsp.savePythonFile(f"{args.path}/"+jm_path+str(j )+"_"+str(m)+".pkl")
|
|
71
|
-
jsp.saveDznFile(f"{args.path}/"+jm_path+str(j )+"_"+str(m)+".pkl",f"{args.path}/"+jm_path+f"{j}x{m}_{i}.dzn")
|
|
72
|
-
os.remove(f"{args.path}/"+jm_path+str(j )+"_"+str(m)+".pkl")
|
|
73
|
-
if args.taillard:
|
|
74
|
-
jsp.saveTaillardStandardFile(f"{args.path}/"+jm_path+f"{j}x{m}_{i}.txt")
|
|
75
57
|
|
|
76
|
-
|
|
77
|
-
|
|
58
|
+
generator = Generator(json = args.json, dzn = args.dzn, taillard = args.taillard)
|
|
59
|
+
if len(args.seeds) < args.quantity:
|
|
60
|
+
# args.seeds = args.seeds + list(np.zeros(args.quantity - len(args.seeds),dtype=np.int64))
|
|
61
|
+
p_s = np.linspace(0, 100, num=100,dtype=np.int64)
|
|
62
|
+
for s in args.seeds:
|
|
63
|
+
p_s = p_s[p_s!=s]
|
|
64
|
+
args.seeds = args.seeds+ list(p_s[:args.quantity-len(args.seeds)])
|
|
65
|
+
for i in trange(args.quantity,desc='Quantity',leave=False):
|
|
66
|
+
generator.savepath = args.path+"/instancesGenerated_"+str(i)
|
|
67
|
+
generator.generate_new_instance(jobs=j, machines=m,ReleaseDateDueDate =np.array(args.release_due),speed = args.speed_scaling,distribution = args.distribution, seed = args.seeds[i])
|
|
78
68
|
|
|
79
69
|
except Exception as e:
|
|
80
70
|
raise
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: IGJSP
|
|
3
|
+
Version: 0.0.5
|
|
4
|
+
Summary: Instance generator for JSP
|
|
5
|
+
Project-URL: Homepage, https://gps.blogs.upv.es/
|
|
6
|
+
Author-email: GPS-UPV <gps@dsic.upv.es>
|
|
7
|
+
License-File: LICENSE
|
|
8
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
9
|
+
Classifier: Operating System :: OS Independent
|
|
10
|
+
Classifier: Programming Language :: Python :: 3
|
|
11
|
+
Requires-Python: >=3.9
|
|
12
|
+
Requires-Dist: numpy
|
|
13
|
+
Requires-Dist: scipy
|
|
14
|
+
Requires-Dist: tqdm
|
|
15
|
+
Description-Content-Type: text/markdown
|
|
16
|
+
|
|
17
|
+
# JSP Generator
|
|
18
|
+
|
|
19
|
+
## Description
|
|
20
|
+
Benchmark generator for the Job Shop Problem (BG-JSP)
|
|
21
|
+
|
|
22
|
+
## Generating a JSP problem instance
|
|
23
|
+
|
|
24
|
+
To generate an instance of the problem we will use the Generator class, located at the generador module.
|
|
25
|
+
To do this, we initialize the generator, giving it the following parameters:
|
|
26
|
+
|
|
27
|
+
1. **JSON:`json`**
|
|
28
|
+
- **Description**: Parameter that indicates if the generated instance will be stored in JSON format.
|
|
29
|
+
- **Possible values**: Boolean value. Only can get the values True or False.
|
|
30
|
+
- **Example of possible values**: `True`, `False`
|
|
31
|
+
- **Default value**: `False`
|
|
32
|
+
|
|
33
|
+
2. **DZN:`dzn`**
|
|
34
|
+
- **Description**: Parameter that indicates if the generated instance will be stored in DZN format.
|
|
35
|
+
- **Possible values**: Boolean value. Only can get the values True or False.
|
|
36
|
+
- **Example of possible values**: `True`, `False`
|
|
37
|
+
- **Default value**: `False`
|
|
38
|
+
|
|
39
|
+
3. **Taillard:`taillard`**
|
|
40
|
+
- **Description**: Parameter that indicates if the generated instance will be stored in taillard format.
|
|
41
|
+
- **Possible values**: Boolean value. Only can get the values True or False.
|
|
42
|
+
- **Example of possible values**: `True`, `False`
|
|
43
|
+
- **Default value**: `False`
|
|
44
|
+
|
|
45
|
+
4. **Save Path:`savepath`**
|
|
46
|
+
- **Description**: Path where the problem instance file will be generated.
|
|
47
|
+
- **Possible values**: String.
|
|
48
|
+
- **Example of possible values**: `./problems`, `./instances`
|
|
49
|
+
- **Default value**: `./output`
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
Once the generator has been initialized we proceed to generate different instances of the JSP problem with different values for this initialization, for that we use the following function, using the following parameters to customize the generated instances:
|
|
53
|
+
|
|
54
|
+
1. **Jobs:`jobs`**
|
|
55
|
+
- **Description**: Number of jobs that will have the problem generated.
|
|
56
|
+
- **Possible values**: Integer value.
|
|
57
|
+
- **Example of possible values**: `3`, `4`.
|
|
58
|
+
- **Default value**: `10`
|
|
59
|
+
|
|
60
|
+
2. **Machines:`machines`**
|
|
61
|
+
- **Description**: Number of machines that will have the problem generated.
|
|
62
|
+
- **Possible values**: Integer value.
|
|
63
|
+
- **Example of possible values**: `6`, `2`.
|
|
64
|
+
- **Default value**: `4`
|
|
65
|
+
|
|
66
|
+
3. **Release and Due Date:`ReleaseDateDueDate`**
|
|
67
|
+
- **Descripción**: Establish that each task has an instant of release and an instant of completion limit.
|
|
68
|
+
- **Possible values**:
|
|
69
|
+
- `0`: Neither the works and operations of each of them will have an instant of release or time limit for completion.
|
|
70
|
+
- `1`: The work will have instant of release and instant of completion limit.
|
|
71
|
+
- `2`: The operations of each job will have a release time and a limiting end time.
|
|
72
|
+
- **Example of possible values**: `1`, `2`
|
|
73
|
+
- **Default value**: `0`
|
|
74
|
+
|
|
75
|
+
4. **Speeds:`speed`**
|
|
76
|
+
- **Description**: Number of speeds that will be available to perform each task.
|
|
77
|
+
- **Possible values**: Integer value.
|
|
78
|
+
- **Example of possible values**: `3`, `5`
|
|
79
|
+
- **Default value**: `1`
|
|
80
|
+
|
|
81
|
+
5. **Distribution:`distribution`**
|
|
82
|
+
- **Description**: Type of distribution to be followed for data generation.
|
|
83
|
+
- **Possible values**: You can only set one of the following values: `uniform` `normal` `exponential`
|
|
84
|
+
- **Example of possible values**: `uniform`, `exponential`
|
|
85
|
+
- **Default value**: `normal`
|
|
86
|
+
|
|
87
|
+
6. **Seed:`seed`**
|
|
88
|
+
- **Description**: Base number for data generation.
|
|
89
|
+
- **Possible values**: Integer value.
|
|
90
|
+
- **Example of possible values**: `84`, `32`
|
|
91
|
+
- **Default value**: `1`
|
|
92
|
+
|
|
93
|
+
## Example of JSON generated
|
|
94
|
+
|
|
95
|
+
This JSON shows how the data generated from an JSP problem with 2 machines and 4 jobs will look like. For this generation we have the following code:
|
|
96
|
+
``` python
|
|
97
|
+
from IGJSP.generador import Generator
|
|
98
|
+
generator = Generator(json=True,savepath="output")
|
|
99
|
+
generator.generate_new_instance(jobs=4,machines=2,ReleaseDateDueDate=2,distribution="exponential",seed=53)
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
```json
|
|
103
|
+
{
|
|
104
|
+
"nbJobs": [
|
|
105
|
+
0,
|
|
106
|
+
1
|
|
107
|
+
],
|
|
108
|
+
"nbMchs": [
|
|
109
|
+
0,
|
|
110
|
+
1,
|
|
111
|
+
2,
|
|
112
|
+
3
|
|
113
|
+
],
|
|
114
|
+
"speed": 1,
|
|
115
|
+
"timeEnergy": [
|
|
116
|
+
{
|
|
117
|
+
"jobId": 0,
|
|
118
|
+
"operations": {
|
|
119
|
+
"0": {
|
|
120
|
+
"speed-scaling": [
|
|
121
|
+
{
|
|
122
|
+
"procTime": 8,
|
|
123
|
+
"energyCons": 92
|
|
124
|
+
}
|
|
125
|
+
],
|
|
126
|
+
"release-date": 30,
|
|
127
|
+
"due-date": 41
|
|
128
|
+
},
|
|
129
|
+
"2": {
|
|
130
|
+
"speed-scaling": [
|
|
131
|
+
{
|
|
132
|
+
"procTime": 17,
|
|
133
|
+
"energyCons": 84
|
|
134
|
+
}
|
|
135
|
+
],
|
|
136
|
+
"release-date": 41,
|
|
137
|
+
"due-date": 77
|
|
138
|
+
},
|
|
139
|
+
"3": {
|
|
140
|
+
"speed-scaling": [
|
|
141
|
+
{
|
|
142
|
+
"procTime": 3,
|
|
143
|
+
"energyCons": 97
|
|
144
|
+
}
|
|
145
|
+
],
|
|
146
|
+
"release-date": 77,
|
|
147
|
+
"due-date": 80
|
|
148
|
+
},
|
|
149
|
+
"1": {
|
|
150
|
+
"speed-scaling": [
|
|
151
|
+
{
|
|
152
|
+
"procTime": 7,
|
|
153
|
+
"energyCons": 93
|
|
154
|
+
}
|
|
155
|
+
],
|
|
156
|
+
"release-date": 80,
|
|
157
|
+
"due-date": 88
|
|
158
|
+
}
|
|
159
|
+
},
|
|
160
|
+
"release-date": 30,
|
|
161
|
+
"due-date": 88
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
"jobId": 1,
|
|
165
|
+
"operations": {
|
|
166
|
+
"1": {
|
|
167
|
+
"speed-scaling": [
|
|
168
|
+
{
|
|
169
|
+
"procTime": 4,
|
|
170
|
+
"energyCons": 96
|
|
171
|
+
}
|
|
172
|
+
],
|
|
173
|
+
"release-date": 0,
|
|
174
|
+
"due-date": 5
|
|
175
|
+
},
|
|
176
|
+
"3": {
|
|
177
|
+
"speed-scaling": [
|
|
178
|
+
{
|
|
179
|
+
"procTime": 3,
|
|
180
|
+
"energyCons": 97
|
|
181
|
+
}
|
|
182
|
+
],
|
|
183
|
+
"release-date": 5,
|
|
184
|
+
"due-date": 9
|
|
185
|
+
},
|
|
186
|
+
"2": {
|
|
187
|
+
"speed-scaling": [
|
|
188
|
+
{
|
|
189
|
+
"procTime": 1,
|
|
190
|
+
"energyCons": 99
|
|
191
|
+
}
|
|
192
|
+
],
|
|
193
|
+
"release-date": 9,
|
|
194
|
+
"due-date": 10
|
|
195
|
+
},
|
|
196
|
+
"0": {
|
|
197
|
+
"speed-scaling": [
|
|
198
|
+
{
|
|
199
|
+
"procTime": 6,
|
|
200
|
+
"energyCons": 94
|
|
201
|
+
}
|
|
202
|
+
],
|
|
203
|
+
"release-date": 10,
|
|
204
|
+
"due-date": 17
|
|
205
|
+
}
|
|
206
|
+
},
|
|
207
|
+
"release-date": 0,
|
|
208
|
+
"due-date": 17
|
|
209
|
+
}
|
|
210
|
+
],
|
|
211
|
+
"minMakespan": 35,
|
|
212
|
+
"minEnergy": 752,
|
|
213
|
+
"maxMinMakespan": 14,
|
|
214
|
+
"maxMinEnergy": 0
|
|
215
|
+
}
|
|
216
|
+
```
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
IGJSP/generador.py,sha256=XtG-wE62Y6vDIgkzyA5Fo2p_FXNubdSK4wf7sFdftI8,22102
|
|
2
|
+
IGJSP/main.py,sha256=qnpAdI9Nymfbb2t674EHKCZr1vG80tGyVT5RKMiGvZM,2727
|
|
3
|
+
IGJSP/Minizinc/Models/RD/JSP0.mzn,sha256=cfN_E3RQ6nBulGfaOOYTd-zAgA5SI6E2saDlYtKCflg,2282
|
|
4
|
+
IGJSP/Minizinc/Models/RD/JSP1.mzn,sha256=5B8cyw2WyKR8yEL1fFd0TaCAVhjPoxEJRJDPPEjJGEk,2840
|
|
5
|
+
IGJSP/Minizinc/Models/RD/JSP2.mzn,sha256=ATqpg-Ow_VzjQJ_hZSSXiTXmwmqNqFsq81TZgcnjTks,2941
|
|
6
|
+
IGJSP/Minizinc/Types/RD/JSP0.mzn,sha256=cfN_E3RQ6nBulGfaOOYTd-zAgA5SI6E2saDlYtKCflg,2282
|
|
7
|
+
IGJSP/Minizinc/Types/RD/JSP1.mzn,sha256=5B8cyw2WyKR8yEL1fFd0TaCAVhjPoxEJRJDPPEjJGEk,2840
|
|
8
|
+
IGJSP/Minizinc/Types/RD/JSP2.mzn,sha256=ATqpg-Ow_VzjQJ_hZSSXiTXmwmqNqFsq81TZgcnjTks,2941
|
|
9
|
+
IGJSP/Minizinc/Types/RD/type0.dzn,sha256=alo54TrPd2svp-YeOq8rNhb42Aj5w4N1y1WYRxZ-aWM,225
|
|
10
|
+
IGJSP/Minizinc/Types/RD/type1.dzn,sha256=r3f1uOoDnscjpXHbpvOWPGhGN0tmwkJ3NYIRP-NGk5M,298
|
|
11
|
+
IGJSP/Minizinc/Types/RD/type2.dzn,sha256=ddJxLqR_WlUpycHhA_QulxiTx3o9neIzNESEt59VUx0,344
|
|
12
|
+
igjsp-0.0.5.dist-info/METADATA,sha256=V9A4MCeKn0V2oPLF6zir6q7N24r9pf1uxVcqXNt3cdI,7369
|
|
13
|
+
igjsp-0.0.5.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
14
|
+
igjsp-0.0.5.dist-info/licenses/LICENSE,sha256=JJvw-24-Kyyqu80L6pZ5UImXjuvta4gcDwypMgItrro,1079
|
|
15
|
+
igjsp-0.0.5.dist-info/RECORD,,
|
IGJSP/generador/10_4/10_4.pkl
DELETED
|
Binary file
|
|
Binary file
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
%SETS
|
|
2
|
-
JOBS = 1..10;
|
|
3
|
-
MACHINES = 1..4;
|
|
4
|
-
SPEED = 1;
|
|
5
|
-
|
|
6
|
-
time = array3d(JOBS,MACHINES,1..SPEED,[]);
|
|
7
|
-
energy = array3d(JOBS,MACHINES,1..SPEED,[]);
|
|
8
|
-
precedence = array2d(JOBS,MACHINES,[3, 2, 1, 0, 2, 1, 3, 0, 1, 0, 3, 2, 0, 2, 1, 3, 1, 2, 0, 3, 2, 1, 0, 3, 3, 0, 2, 1, 1, 2, 0, 3, 2, 3, 1, 0, 2, 1, 3, 0]);
|