Commit f52fa83f authored by Georgios Dagkakis's avatar Georgios Dagkakis

Jobs definition in the new way. 3 tests fail

parent 37a13947
...@@ -34,7 +34,7 @@ from Entity import Entity ...@@ -34,7 +34,7 @@ from Entity import Entity
class CapacityEntity(Entity): class CapacityEntity(Entity):
type="CapacityEntity" type="CapacityEntity"
def __init__(self, id=None, name=None, capacityProjectId=None, requiredCapacity=10, priority=0, dueDate=None, orderDate=None, isCritical=False): def __init__(self, id=None, name=None, capacityProjectId=None, requiredCapacity=10, priority=0, dueDate=0, orderDate=0, isCritical=False):
Entity.__init__(self, id, name, priority, dueDate, orderDate, isCritical) Entity.__init__(self, id, name, priority, dueDate, orderDate, isCritical)
self.capacityProjectId=capacityProjectId # the project id hat the capacity Entity is part of self.capacityProjectId=capacityProjectId # the project id hat the capacity Entity is part of
self.capacityProject=None # the project that the capacity Entity is part of. It is defined in initialize self.capacityProject=None # the project that the capacity Entity is part of. It is defined in initialize
......
...@@ -34,7 +34,7 @@ import simpy ...@@ -34,7 +34,7 @@ import simpy
class Entity(object): class Entity(object):
type="Entity" type="Entity"
def __init__(self, id=None, name=None, priority=0, dueDate=None, orderDate=None, def __init__(self, id=None, name=None, priority=0, dueDate=0, orderDate=0,
isCritical=False, remainingProcessingTime=0): isCritical=False, remainingProcessingTime=0):
self.name=name self.name=name
self.id=id self.id=id
...@@ -48,16 +48,21 @@ class Entity(object): ...@@ -48,16 +48,21 @@ class Entity(object):
self.height=1.0 self.height=1.0
self.length=1.0 self.length=1.0
# information concerning the sorting of the entities inside (for example) queues # information concerning the sorting of the entities inside (for example) queues
self.priority=priority self.priority=float(priority)
self.dueDate=dueDate self.dueDate=float(dueDate)
self.orderDate=orderDate self.orderDate=float(orderDate)
# a list that holds information about the schedule # a list that holds information about the schedule
# of the entity (when it enters and exits every station) # of the entity (when it enters and exits every station)
self.schedule=[] self.schedule=[]
self.currentStation=None self.currentStation=None
# values to be used in the internal processing of compoundObjects # values to be used in the internal processing of compoundObjects
self.internal = False # informs if the entity is being processed internally self.internal = False # informs if the entity is being processed internally
self.isCritical=isCritical # flag to inform weather the entity is critical -> preemption if isinstance(isCritical, unicode):
self.isCritical=bool(int(isCritical))
elif isinstance(isCritical, int):
self.isCritical=bool(isCritical) # flag to inform weather the entity is critical -> preemption
else:
self.isCritical=isCritical
self.manager=None # default value self.manager=None # default value
self.numberOfUnits=1 # default value self.numberOfUnits=1 # default value
# variable used to differentiate entities with and entities without routes # variable used to differentiate entities with and entities without routes
...@@ -70,6 +75,7 @@ class Entity(object): ...@@ -70,6 +75,7 @@ class Entity(object):
# alias used for printing the Route # alias used for printing the Route
self.alias=None self.alias=None
self.remainingProcessingTime=remainingProcessingTime self.remainingProcessingTime=remainingProcessingTime
print self.id
# ======================================================================= # =======================================================================
# outputs results to JSON File # outputs results to JSON File
......
...@@ -72,11 +72,8 @@ ...@@ -72,11 +72,8 @@
"wip": [ "wip": [
{ {
"_class": "Dream.Job", "_class": "Dream.Job",
"due_date": "2013-12-15",
"id": "J1", "id": "J1",
"material": "Plastic",
"name": "Order 1 from X", "name": "Order 1 from X",
"order_date": "2013-11-20",
"priority": "2", "priority": "2",
"route": [ "route": [
{ {
...@@ -114,6 +111,11 @@ ...@@ -114,6 +111,11 @@
"stationIdsList": [ "stationIdsList": [
"M3" "M3"
] ]
},
{
"stationIdsList": [
"E1"
]
} }
] ]
} }
...@@ -127,11 +129,8 @@ ...@@ -127,11 +129,8 @@
"wip": [ "wip": [
{ {
"_class": "Dream.Job", "_class": "Dream.Job",
"due_date": "2013-11-30",
"id": "J2", "id": "J2",
"material": "Aluminium",
"name": "Order 2 from Y", "name": "Order 2 from Y",
"order_date": "2013-11-14",
"priority": "1", "priority": "1",
"route": [ "route": [
{ {
...@@ -169,6 +168,11 @@ ...@@ -169,6 +168,11 @@
"stationIdsList": [ "stationIdsList": [
"M1" "M1"
] ]
},
{
"stationIdsList": [
"E1"
]
} }
] ]
} }
...@@ -182,11 +186,8 @@ ...@@ -182,11 +186,8 @@
"wip": [ "wip": [
{ {
"_class": "Dream.Job", "_class": "Dream.Job",
"due_date": "2014-02-01",
"id": "J3", "id": "J3",
"material": "Plastic",
"name": "Order 3 from Z", "name": "Order 3 from Z",
"order_date": "2013-11-03",
"priority": "3", "priority": "3",
"route": [ "route": [
{ {
...@@ -224,6 +225,11 @@ ...@@ -224,6 +225,11 @@
"stationIdsList": [ "stationIdsList": [
"M1" "M1"
] ]
},
{
"stationIdsList": [
"E1"
]
} }
] ]
} }
......
...@@ -85,6 +85,11 @@ ...@@ -85,6 +85,11 @@
"stationIdsList": [ "stationIdsList": [
"M2" "M2"
] ]
},
{
"stationIdsList": [
"E1"
]
} }
] ]
} }
...@@ -120,6 +125,11 @@ ...@@ -120,6 +125,11 @@
"stationIdsList": [ "stationIdsList": [
"M2" "M2"
] ]
},
{
"stationIdsList": [
"E1"
]
} }
] ]
} }
......
...@@ -85,6 +85,11 @@ ...@@ -85,6 +85,11 @@
"stationIdsList": [ "stationIdsList": [
"M2" "M2"
] ]
},
{
"stationIdsList": [
"E1"
]
} }
] ]
} }
...@@ -120,6 +125,11 @@ ...@@ -120,6 +125,11 @@
"stationIdsList": [ "stationIdsList": [
"M2" "M2"
] ]
},
{
"stationIdsList": [
"E1"
]
} }
] ]
} }
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
"confidenceLevel": "0.95", "confidenceLevel": "0.95",
"maxSimTime": "-1", "maxSimTime": "-1",
"numberOfReplications": "1", "numberOfReplications": "1",
"trace": "No" "trace": "Yes"
}, },
"nodes": { "nodes": {
"AB1": { "AB1": {
......
...@@ -137,6 +137,11 @@ ...@@ -137,6 +137,11 @@
"stationIdsList": [ "stationIdsList": [
"M2" "M2"
] ]
},
{
"stationIdsList": [
"E1"
]
} }
] ]
} }
...@@ -197,6 +202,11 @@ ...@@ -197,6 +202,11 @@
"stationIdsList": [ "stationIdsList": [
"M4" "M4"
] ]
},
{
"stationIdsList": [
"E1"
]
} }
] ]
} }
......
...@@ -136,6 +136,11 @@ ...@@ -136,6 +136,11 @@
"stationIdsList": [ "stationIdsList": [
"EDM" "EDM"
] ]
},
{
"stationIdsList": [
"E1"
]
} }
] ]
}, },
...@@ -181,6 +186,11 @@ ...@@ -181,6 +186,11 @@
"stationIdsList": [ "stationIdsList": [
"EDM" "EDM"
] ]
},
{
"stationIdsList": [
"E1"
]
} }
] ]
}, },
...@@ -226,6 +236,11 @@ ...@@ -226,6 +236,11 @@
"stationIdsList": [ "stationIdsList": [
"EDM" "EDM"
] ]
},
{
"stationIdsList": [
"E1"
]
} }
] ]
}, },
...@@ -271,6 +286,11 @@ ...@@ -271,6 +286,11 @@
"stationIdsList": [ "stationIdsList": [
"EDM" "EDM"
] ]
},
{
"stationIdsList": [
"E1"
]
} }
] ]
}, },
...@@ -297,6 +317,11 @@ ...@@ -297,6 +317,11 @@
"stationIdsList": [ "stationIdsList": [
"M1" "M1"
] ]
},
{
"stationIdsList": [
"E1"
]
} }
] ]
} }
......
...@@ -96,6 +96,11 @@ ...@@ -96,6 +96,11 @@
"M2" "M2"
], ],
"stepNumber": "3" "stepNumber": "3"
},
{
"stationIdsList": [
"E1"
]
} }
] ]
} }
...@@ -133,6 +138,11 @@ ...@@ -133,6 +138,11 @@
"M2" "M2"
], ],
"stepNumber": "1" "stepNumber": "1"
},
{
"stationIdsList": [
"E1"
]
} }
] ]
} }
......
...@@ -36,23 +36,20 @@ class Job(Entity): # inherits from the Entity c ...@@ -36,23 +36,20 @@ class Job(Entity): # inherits from the Entity c
type='Job' type='Job'
family='Job' family='Job'
def __init__(self, id=None, name=None, route=[], priority=0, dueDate=None, orderDate=None, extraPropertyDict=None,isCritical=False): def __init__(self, id=None, name=None, route=[], priority=0, dueDate=0, orderDate=0, extraPropertyDict=None,isCritical=False):
Entity.__init__(self, id=id,name=name, priority=priority, dueDate=dueDate, orderDate=orderDate, isCritical=isCritical) Entity.__init__(self, id=id,name=name, priority=priority, dueDate=dueDate, orderDate=orderDate, isCritical=isCritical)
# instance specific attributes # instance specific attributes
# information on the routing and the stops of the entity # information on the routing and the stops of the entity
self.route=route # the route that the job follows, self.route=route # the route that the job follows,
# also contains the processing times in each station # also contains the processing times in each station
self.remainingRoute=list(route) # the remaining route. in the beginning self.remainingRoute=list(route) # the remaining route. in the beginning
# this should be the same as the full route # this should be the same as the full route
# the scheduling of the entity as resolved by the simulation
# self.schedule=[] # keeps the result of the simulation.
# # A list with the stations and time of entrance
self.extraPropertyDict = extraPropertyDict self.extraPropertyDict = extraPropertyDict
# variable used to differentiate entities with and entities without routes # variable used to differentiate entities with and entities without routes
self.family='Job' self.family='Job'
# used by printRoute # used by printRoute
self.alias='J'+str(len(G.JobList)) self.alias='J'+str(len(G.JobList))
# ======================================================================= # =======================================================================
# outputs results to JSON File # outputs results to JSON File
# ======================================================================= # =======================================================================
......
...@@ -373,167 +373,14 @@ def createWIP(): ...@@ -373,167 +373,14 @@ def createWIP():
entityType=Globals.getClassFromName(entityClass) entityType=Globals.getClassFromName(entityClass)
inputDict=dict(entity) inputDict=dict(entity)
inputDict.pop('_class') inputDict.pop('_class')
if entityClass in ['Dream.CapacityEntity', 'Dream.CapacityProject', 'Dream.Part', if entityClass in ['Dream.CapacityEntity', 'Dream.CapacityProject', 'Dream.Part',
'Dream.Batch', 'Dream.SubBatch']: 'Dream.Batch', 'Dream.SubBatch', 'Dream.Job', 'Dream.Mould', 'Dream.OrderComponent']:
entity=entityType(**inputDict) entity=entityType(**inputDict)
G.EntityList.append(entity) G.EntityList.append(entity)
object=Globals.findObjectById(element['id']) object=Globals.findObjectById(element['id'])
entity.currentStation=object entity.currentStation=object
elif entityClass=='Dream.OrderComponent':
id=entity.get('id', 'not found')
name=entity.get('name', 'not found')
priority=int(entity.get('priority', '0'))
dueDate=float(entity.get('dueDate', '0'))
orderDate=float(entity.get('orderDate', '0'))
componentType=entity.get('componentType', 'not found')
isCritical=bool(int(entity.get('isCritical', '0')))
readyForAssembly=bool(int(entity.get('readyForAssembly', '0')))
JSONRoute=entity.get('route', []) # dummy variable that holds the routes of the jobs
# the route from the JSON file
# is a sequence of dictionaries
route = [x for x in JSONRoute] # copy JSONRoute
# keep a reference of all extra properties passed to the job
extraPropertyDict = {}
for key, value in entity.items():
if key not in ('_class', 'id'):
extraPropertyDict[key] = value
# if there is an exit assigned to the component
# update the corresponding local flag
# TODO: have to talk about it with NEX
exitAssigned=False
for element in route:
elementIds = element.get('stationIdsList',[])
for obj in G.ObjList:
for elementId in elementIds:
if obj.id==elementId and obj.type=='Exit':
exitAssigned=True
# Below it is to assign assemblers if there are any in the corresponding Global list
if not exitAssigned:
if len(G.MouldAssemblyList)!=0:
bufferIDlist = []
assemblerIDlist = []
for assemblyBuffer in G.MouldAssemblyBufferList:
bufferIDlist.append(str(assemblyBuffer.id))
for assembler in G.MouldAssemblyList:
assemblerIDlist.append(str(assembler.id))
route.append({'stationIdsList':bufferIDlist}) # assign MouldAssemblyBuffers
route.append({'stationIdsList':assemblerIDlist}) # assign MouldAssemblies
# if assemblers are assigned then an 'exit' is assigned
exitAssigned=True
#Below it is to assign an exit if it was not assigned in JSON and no assemblers are already assigned
if not exitAssigned:
exitId=None
for obj in G.ObjList:
if obj.type=='Exit':
exitId=obj.id
break
if exitId:
route.append({'stationIdsList':[exitId],\
'processingTime':{}})
# initiate the job
OC=OrderComponent(id, name, route, priority=priority, dueDate=dueDate,orderDate=orderDate,
componentType=componentType, readyForAssembly=readyForAssembly,
isCritical=isCritical, extraPropertyDict=extraPropertyDict)
G.OrderComponentList.append(OC)
G.JobList.append(OC)
G.WipList.append(OC)
G.EntityList.append(OC)
elif entityClass=='Dream.Mould':
id=entity.get('id', 'not found')
name=entity.get('name', 'not found')
priority=int(entity.get('priority', '0'))
dueDate=float(entity.get('dueDate', '0'))
orderDate=float(entity.get('orderDate', '0'))
isCritical=bool(int(entity.get('isCritical', '0')))
JSONRoute=entity.get('route', []) # dummy variable that holds the routes of the jobs
# the route from the JSON file
# is a sequence of dictionaries
route = [x for x in JSONRoute] # copy JSONRoute
# keep a reference of all extra properties passed to the job
extraPropertyDict = {}
for key, value in entity.items():
if key not in ('_class', 'id'):
extraPropertyDict[key] = value
#Below it is to assign an exit if it was not assigned in JSON
#have to talk about it with NEX
exitAssigned=False
for element in route:
# elementId=element[0]
elementIds = element.get('stationIdsList',[])
for obj in G.ObjList:
for elementId in elementIds:
if obj.id==elementId and obj.type=='Exit':
exitAssigned=True
if not exitAssigned:
exitId=None
for obj in G.ObjList:
if obj.type=='Exit':
exitId=obj.id
break
if exitId:
# route.append([exitId, 0])
route.append({'stationIdsList':[exitId],\
'processingTime':{}})
# initiate the job
M=Mould(id, name, route, priority=priority, dueDate=dueDate,orderDate=orderDate,
isCritical=isCritical, extraPropertyDict=extraPropertyDict)
G.MouldList.append(M)
G.JobList.append(M)
G.WipList.append(M)
G.EntityList.append(M)
elif entityClass=='Dream.Job':
id=entity.get('id', 'not found')
name=entity.get('name', 'not found')
priority=int(entity.get('priority', '0'))
dueDate=float(entity.get('dueDate', '0'))
orderDate=float(entity.get('orderDate', '0'))
JSONRoute=entity.get('route', []) # dummy variable that holds the routes of the jobs
# the route from the JSON file
# is a sequence of dictionaries
route = [x for x in JSONRoute] # copy JSONRoute
# keep a reference of all extra properties passed to the job
extraPropertyDict = {}
for key, value in entity.items():
if key not in ('_class', 'id'):
extraPropertyDict[key] = value
#Below it is to assign an exit if it was not assigned in JSON
#have to talk about it with NEX
exitAssigned=False
for element in route:
elementIds = element.get('stationIdsList',[])
for obj in G.ObjList:
for elementId in elementIds:
if obj.id==elementId and obj.type=='Exit':
exitAssigned=True
if not exitAssigned:
exitId=None
for obj in G.ObjList:
if obj.type=='Exit':
exitId=obj.id
break
if exitId:
# route.append([exitId, 0])
route.append({'stationIdsList':[exitId],\
'processingTime':{}})
# initiate the job
J=Job(id, name, route, priority=priority, dueDate=dueDate,
orderDate=orderDate, extraPropertyDict=extraPropertyDict)
G.JobList.append(J)
G.WipList.append(J)
G.EntityList.append(J)
if entityClass=='Dream.Order': if entityClass=='Dream.Order':
id=entity.get('id', 'not found') id=entity.get('id', 'not found')
name=entity.get('name', 'not found') name=entity.get('name', 'not found')
...@@ -585,7 +432,7 @@ def createWIP(): ...@@ -585,7 +432,7 @@ def createWIP():
'processingTime':\ 'processingTime':\
{'distributionType':'Fixed',\ {'distributionType':'Fixed',\
'mean':'0'}}) 'mean':'0'}})
# XXX durty way to implement new approach were the order is abstract and does not run through the system # XXX dirty way to implement new approach were the order is abstract and does not run through the system
# but the OrderDesign does # but the OrderDesign does
# XXX initiate the Order and the OrderDesign # XXX initiate the Order and the OrderDesign
O=Order('G'+id, 'general '+name, route=[], priority=priority, dueDate=dueDate,orderDate=orderDate, O=Order('G'+id, 'general '+name, route=[], priority=priority, dueDate=dueDate,orderDate=orderDate,
...@@ -787,20 +634,11 @@ def main(argv=[], input_data=None): ...@@ -787,20 +634,11 @@ def main(argv=[], input_data=None):
G.outputJSON['general']['totalExecutionTime'] = (time.time()-start); G.outputJSON['general']['totalExecutionTime'] = (time.time()-start);
G.outputJSON['elementList'] =[]; G.outputJSON['elementList'] =[];
#output data to JSON for every object in the topology
for element in G.ObjList:
element.outputResultsJSON()
#output data to JSON for every resource in the topology
for model_resource in G.ObjectResourceList:
model_resource.outputResultsJSON()
for job in G.JobList: #output data to JSON for every object in the topology
job.outputResultsJSON() for object in G.ObjectResourceList + G.EntityList + G.ObjList:
object.outputResultsJSON()
for capacityProject in G.CapacityProjectList:
capacityProject.outputResultsJSON()
outputJSONString=json.dumps(G.outputJSON, indent=True) outputJSONString=json.dumps(G.outputJSON, indent=True)
G.outputJSONFile.write(outputJSONString) G.outputJSONFile.write(outputJSONString)
......
...@@ -62,3 +62,5 @@ class Order(Job): ...@@ -62,3 +62,5 @@ class Order(Job):
# used by printRoute # used by printRoute
self.alias='O'+str(len(G.OrderList)) self.alias='O'+str(len(G.OrderList))
def createRoute(self, route):
return route
\ No newline at end of file
...@@ -37,8 +37,8 @@ class OrderComponent(Job): # inherits from the ...@@ -37,8 +37,8 @@ class OrderComponent(Job): # inherits from the
def __init__(self, id=None, name=None, def __init__(self, id=None, name=None,
route=[], route=[],
priority=0, priority=0,
dueDate=None, dueDate=0,
orderDate=None, orderDate=0,
extraPropertyDict=None, extraPropertyDict=None,
componentType='Basic', componentType='Basic',
order=None, order=None,
...@@ -66,4 +66,3 @@ class OrderComponent(Job): # inherits from the ...@@ -66,4 +66,3 @@ class OrderComponent(Job): # inherits from the
# used by printRoute # used by printRoute
if self.order: if self.order:
self.alias=self.order.alias+'C'+str(len(G.OrderComponentList)) self.alias=self.order.alias+'C'+str(len(G.OrderComponentList))
\ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment