-
Notifications
You must be signed in to change notification settings - Fork 0
/
jap.py
70 lines (55 loc) · 1.96 KB
/
jap.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
__author__ = 'v-iganoh'
import os
import sys
from job import Job
from node import Node
from episode import Episode
def _get_job_by_id(job_id, jobs):
tjobs = [job for job in jobs if job.id == job_id]
if len(tjobs) > 0:
jobs.remove(tjobs[0])
return tjobs[0] if len(tjobs) > 0 else None
def _init_node(jid, job_data, nodes):
nodes_count = len(job_data) - 2
for c in range(nodes_count):
n_time = int(job_data[c+2])
n_id = int(c+1)
node = Node(n_id, n_time)
if jid not in nodes:
nodes[jid] = []
nodes[jid].append(node)
def _init_jobs_and_nodes(config):
nodes = {}
jobs = []
f = open('%s/%s' % (os.path.dirname(__file__), config), 'r')
for line in f:
line = line.replace('\n', '')
job_data = line.split(' ')
if len(job_data) > 2:
job_id = int(job_data[0])
job = _get_job_by_id(job_id, jobs)
job = Job(job_id) if job is None else job
if '-' not in job_data[1]:
successors_ids = job_data[1].split(',')
for sjob_id in successors_ids:
sjob_id = int(sjob_id)
pjob = _get_job_by_id(sjob_id, jobs)
pjob = Job(sjob_id) if pjob is None else pjob
job.successors.append(pjob)
pjob.predecessors.append(job)
jobs.append(pjob)
jobs.append(job)
_init_node(job_id, job_data, nodes)
else:
jobs.append(job)
_init_node(job_id, job_data, nodes)
return {'jobs': jobs, 'nodes': nodes}
instance = 1
if len(sys.argv) > 0:
for arg in sys.argv:
if 'instance' in arg:
arg = arg.split('=')
instance = arg[1] if len(arg) > 1 else 1
jinstance_data = _init_jobs_and_nodes('japinstance%s' % instance)
episode1 = Episode(jinstance_data['jobs'], jinstance_data['nodes'], 5)
episode1.execute()