Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
dream
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
1
Issues
1
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
dream
Commits
c4a63d44
Commit
c4a63d44
authored
Mar 12, 2014
by
Ioannis Papagiannopoulos
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
comments and code clean-up
parent
0555f714
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
1291 additions
and
100 deletions
+1291
-100
dream/simulation/JSONInputs/Topology67.json
dream/simulation/JSONInputs/Topology67.json
+1212
-0
dream/simulation/Operator.py
dream/simulation/Operator.py
+0
-5
dream/simulation/OperatorRouter.py
dream/simulation/OperatorRouter.py
+79
-95
No files found.
dream/simulation/JSONInputs/Topology67.json
0 → 100644
View file @
c4a63d44
{
"_class"
:
"Dream.Simulation"
,
"edges"
:
{},
"general"
:
{
"_class"
:
"Dream.Configuration"
,
"numberOfReplications"
:
"8"
,
"maxSimTime"
:
"-1"
,
"trace"
:
"Yes"
,
"confidenceLevel"
:
"0.95"
},
"nodes"
:
{
"Q0"
:
{
"_class"
:
"Dream.QueueManagedJob"
,
"name"
:
"StartQueue"
,
"isDummy"
:
"0"
,
"schedulingRule"
:
"Priority"
,
"capacity"
:
"-1"
,
"wip"
:
[
{
"_class"
:
"Dream.Order"
,
"name"
:
"Order1"
,
"id"
:
"O1"
,
"manager"
:
"OP1"
,
"priority"
:
"1"
,
"route"
:
[
{
"stepNumber"
:
"0"
,
"stationIdsList"
:
[
"Q0"
]
},
{
"stepNumber"
:
"1"
,
"stationIdsList"
:
[
"CAD1"
,
"CAD2"
],
"processingTime"
:
{
"distributionType"
:
"Fixed"
,
"mean"
:
"1"
},
"setupTime"
:
{
"setupDistribution"
:
"Fixed"
,
"setupMean"
:
"0.5"
}
}
],
"componentsList"
:
[
{
"_class"
:
"Dream.OrderComponent"
,
"id"
:
"C1O1"
,
"name"
:
"Component1 from Order1"
,
"componentType"
:
"Basic"
,
"route"
:
[
{
"stepNumber"
:
"0"
,
"stationIdsList"
:
[
"OD0"
]
},
{
"stepNumber"
:
"1"
,
"stationIdsList"
:
[
"QCAM"
]
},
{
"stepNumber"
:
"2"
,
"stationIdsList"
:
[
"CAM1"
,
"CAM2"
],
"processingTime"
:
{
"distributionType"
:
"Fixed"
,
"mean"
:
"2"
},
"setupTime"
:{
"setupDistribution"
:
"Fixed"
,
"setupMean"
:
"0.5"
}
},
{
"stepNumber"
:
"3"
,
"stationIdsList"
:
[
"QMILL"
]
},
{
"stepNumber"
:
"4"
,
"stationIdsList"
:
[
"MILL1"
,
"MILL2"
],
"processingTime"
:
{
"distributionType"
:
"Fixed"
,
"mean"
:
"2"
},
"setupTime"
:{
"setupDistribution"
:
"Fixed"
,
"setupMean"
:
"0.5"
}
},
{
"stepNumber"
:
"5"
,
"stationIdsList"
:
[
"QEDM"
]
},
{
"stepNumber"
:
"6"
,
"stationIdsList"
:
[
"EDM"
],
"processingTime"
:
{
"distributionType"
:
"Fixed"
,
"mean"
:
"2"
},
"setupTime"
:{
"setupDistribution"
:
"Fixed"
,
"setupMean"
:
"0.5"
}
},
{
"stepNumber"
:
"7"
,
"stationIdsList"
:
[
"AB1"
]
},
{
"stepNumber"
:
"8"
,
"stationIdsList"
:
[
"MA1"
,
"MA2"
,
"MA3"
]
}
]
},
{
"_class"
:
"Dream.OrderComponent"
,
"id"
:
"C2O1"
,
"name"
:
"Component2 from Order1"
,
"componentType"
:
"Secondary"
,
"route"
:
[
{
"stepNumber"
:
"0"
,
"stationIdsList"
:
[
"OD0"
]
},
{
"stepNumber"
:
"1"
,
"stationIdsList"
:
[
"QCAM"
]
},
{
"stepNumber"
:
"2"
,
"stationIdsList"
:
[
"CAM1"
,
"CAM2"
],
"processingTime"
:
{
"distributionType"
:
"Fixed"
,
"mean"
:
"1"
},
"setupTime"
:{
"setupDistribution"
:
"Fixed"
,
"setupMean"
:
"0.6"
}
},
{
"stepNumber"
:
"3"
,
"stationIdsList"
:
[
"QMILL"
]
},
{
"stepNumber"
:
"4"
,
"stationIdsList"
:
[
"MILL1"
,
"MILL2"
],
"processingTime"
:
{
"distributionType"
:
"Fixed"
,
"mean"
:
"4"
},
"setupTime"
:{
"setupDistribution"
:
"Fixed"
,
"setupMean"
:
"0.4"
}
},
{
"stepNumber"
:
"5"
,
"stationIdsList"
:
[
"QEDM"
]
},
{
"stepNumber"
:
"6"
,
"stationIdsList"
:
[
"EDM"
],
"processingTime"
:
{
"distributionType"
:
"Fixed"
,
"mean"
:
"1"
},
"setupTime"
:{
"setupDistribution"
:
"Fixed"
,
"setupMean"
:
"0.6"
}
},
{
"stepNumber"
:
"7"
,
"stationIdsList"
:
[
"AB1"
]
},
{
"stepNumber"
:
"8"
,
"stationIdsList"
:
[
"MA1"
,
"MA2"
,
"MA3"
]
}
]
},
{
"_class"
:
"Dream.Mould"
,
"id"
:
"M1O1"
,
"name"
:
"Mould1 from Order1"
,
"route"
:
[
{
"stepNumber"
:
"0"
,
"stationIdsList"
:
[
"MA1"
,
"MA2"
,
"MA3"
],
"processingTime"
:
{
"distributionType"
:
"Fixed"
,
"mean"
:
"1"
}
},
{
"stepNumber"
:
"1"
,
"stationIdsList"
:
[
"QIM"
]
},
{
"stepNumber"
:
"2"
,
"stationIdsList"
:
[
"IM"
],
"processingTime"
:
{
"distributionType"
:
"Fixed"
,
"mean"
:
"2"
},
"setupTime"
:{
"setupDistribution"
:
"Fixed"
,
"setupMean"
:
"0.5"
}
},
{
"stepNumber"
:
"3"
,
"stationIdsList"
:
[
"E1"
]
}
]
}
]
},
{
"_class"
:
"Dream.Order"
,
"name"
:
"Order2"
,
"id"
:
"O2"
,
"manager"
:
"OP2"
,
"priority"
:
"2"
,
"route"
:
[
{
"stepNumber"
:
"0"
,
"stationIdsList"
:
[
"Q0"
]
},
{
"stepNumber"
:
"1"
,
"stationIdsList"
:
[
"CAD1"
,
"CAD2"
],
"processingTime"
:
{
"distributionType"
:
"Fixed"
,
"mean"
:
"1.4"
},
"setupTime"
:
{
"setupDistribution"
:
"Fixed"
,
"setupMean"
:
"0.7"
}
}
],
"componentsList"
:
[
{
"_class"
:
"Dream.OrderComponent"
,
"id"
:
"C1O2"
,
"name"
:
"Component1 from Order2"
,
"componentType"
:
"Basic"
,
"route"
:
[
{
"stepNumber"
:
"0"
,
"stationIdsList"
:
[
"OD0"
]
},
{
"stepNumber"
:
"1"
,
"stationIdsList"
:
[
"QCAM"
]
},
{
"stepNumber"
:
"2"
,
"stationIdsList"
:
[
"CAM1"
,
"CAM2"
],
"processingTime"
:
{
"distributionType"
:
"Fixed"
,
"mean"
:
"0.3"
},
"setupTime"
:{
"setupDistribution"
:
"Fixed"
,
"setupMean"
:
"0.1"
}
},
{
"stepNumber"
:
"3"
,
"stationIdsList"
:
[
"QMILL"
]
},
{
"stepNumber"
:
"4"
,
"stationIdsList"
:
[
"MILL1"
,
"MILL2"
],
"processingTime"
:
{
"distributionType"
:
"Fixed"
,
"mean"
:
"3"
},
"setupTime"
:{
"setupDistribution"
:
"Fixed"
,
"setupMean"
:
"1.2"
}
},
{
"stepNumber"
:
"5"
,
"stationIdsList"
:
[
"QEDM"
]
},
{
"stepNumber"
:
"6"
,
"stationIdsList"
:
[
"EDM"
],
"processingTime"
:
{
"distributionType"
:
"Fixed"
,
"mean"
:
"0.9"
},
"setupTime"
:{
"setupDistribution"
:
"Fixed"
,
"setupMean"
:
"0.3"
}
},
{
"stepNumber"
:
"7"
,
"stationIdsList"
:
[
"AB1"
]
},
{
"stepNumber"
:
"8"
,
"stationIdsList"
:
[
"MA1"
,
"MA2"
,
"MA3"
]
}
]
},
{
"_class"
:
"Dream.OrderComponent"
,
"id"
:
"C2O2"
,
"name"
:
"Component2 from Order2"
,
"componentType"
:
"Secondary"
,
"route"
:
[
{
"stepNumber"
:
"0"
,
"stationIdsList"
:
[
"OD0"
]
},
{
"stepNumber"
:
"1"
,
"stationIdsList"
:
[
"QCAM"
]
},
{
"stepNumber"
:
"2"
,
"stationIdsList"
:
[
"CAM1"
,
"CAM2"
],
"processingTime"
:
{
"distributionType"
:
"Fixed"
,
"mean"
:
"0.8"
},
"setupTime"
:{
"setupDistribution"
:
"Fixed"
,
"setupMean"
:
"0.2"
}
},
{
"stepNumber"
:
"3"
,
"stationIdsList"
:
[
"QMILL"
]
},
{
"stepNumber"
:
"4"
,
"stationIdsList"
:
[
"MILL1"
,
"MILL2"
],
"processingTime"
:
{
"distributionType"
:
"Fixed"
,
"mean"
:
"0.4"
},
"setupTime"
:{
"setupDistribution"
:
"Fixed"
,
"setupMean"
:
"0.1"
}
},
{
"stepNumber"
:
"5"
,
"stationIdsList"
:
[
"QEDM"
]
},
{
"stepNumber"
:
"6"
,
"stationIdsList"
:
[
"EDM"
],
"processingTime"
:
{
"distributionType"
:
"Fixed"
,
"mean"
:
"1.4"
},
"setupTime"
:{
"setupDistribution"
:
"Fixed"
,
"setupMean"
:
"0.3"
}
},
{
"stepNumber"
:
"7"
,
"stationIdsList"
:
[
"AB1"
]
},
{
"stepNumber"
:
"8"
,
"stationIdsList"
:
[
"MA1"
,
"MA2"
,
"MA3"
]
}
]
},
{
"_class"
:
"Dream.Mould"
,
"id"
:
"M1O2"
,
"name"
:
"Mould1 from Order2"
,
"route"
:
[
{
"stepNumber"
:
"0"
,
"stationIdsList"
:
[
"MA1"
,
"MA2"
,
"MA3"
],
"processingTime"
:
{
"distributionType"
:
"Fixed"
,
"mean"
:
"2"
}
},
{
"stepNumber"
:
"1"
,
"stationIdsList"
:
[
"QIM"
]
},
{
"stepNumber"
:
"2"
,
"stationIdsList"
:
[
"IM"
],
"processingTime"
:
{
"distributionType"
:
"Fixed"
,
"mean"
:
"0.7"
},
"setupTime"
:{
"setupDistribution"
:
"Fixed"
,
"setupMean"
:
"0.1"
}
},
{
"stepNumber"
:
"3"
,
"stationIdsList"
:
[
"E1"
]
}
]
}
]
},
{
"_class"
:
"Dream.Order"
,
"name"
:
"Order3"
,
"id"
:
"O3"
,
"manager"
:
"OP3"
,
"priority"
:
"2"
,
"route"
:
[
{
"stepNumber"
:
"0"
,
"stationIdsList"
:
[
"Q0"
]
},
{
"stepNumber"
:
"1"
,
"stationIdsList"
:
[
"CAD1"
,
"CAD2"
],
"processingTime"
:
{
"distributionType"
:
"Fixed"
,
"mean"
:
"1.4"
},
"setupTime"
:
{
"setupDistribution"
:
"Fixed"
,
"setupMean"
:
"0.7"
}
}
],
"componentsList"
:
[
{
"_class"
:
"Dream.OrderComponent"
,
"id"
:
"C1O3"
,
"name"
:
"Component1 from Order3"
,
"componentType"
:
"Basic"
,
"route"
:
[
{
"stepNumber"
:
"0"
,
"stationIdsList"
:
[
"OD0"
]
},
{
"stepNumber"
:
"1"
,
"stationIdsList"
:
[
"QCAM"
]
},
{
"stepNumber"
:
"2"
,
"stationIdsList"
:
[
"CAM1"
,
"CAM2"
],
"processingTime"
:
{
"distributionType"
:
"Fixed"
,
"mean"
:
"0.3"
},
"setupTime"
:{
"setupDistribution"
:
"Fixed"
,
"setupMean"
:
"0.1"
}
},
{
"stepNumber"
:
"3"
,
"stationIdsList"
:
[
"QMILL"
]
},
{
"stepNumber"
:
"4"
,
"stationIdsList"
:
[
"MILL1"
,
"MILL2"
],
"processingTime"
:
{
"distributionType"
:
"Fixed"
,
"mean"
:
"3"
},
"setupTime"
:{
"setupDistribution"
:
"Fixed"
,
"setupMean"
:
"1.2"
}
},
{
"stepNumber"
:
"5"
,
"stationIdsList"
:
[
"QEDM"
]
},
{
"stepNumber"
:
"6"
,
"stationIdsList"
:
[
"EDM"
],
"processingTime"
:
{
"distributionType"
:
"Fixed"
,
"mean"
:
"0.9"
},
"setupTime"
:{
"setupDistribution"
:
"Fixed"
,
"setupMean"
:
"0.3"
}
},
{
"stepNumber"
:
"7"
,
"stationIdsList"
:
[
"AB1"
]
},
{
"stepNumber"
:
"8"
,
"stationIdsList"
:
[
"MA1"
,
"MA2"
,
"MA3"
]
}
]
},
{
"_class"
:
"Dream.OrderComponent"
,
"id"
:
"C2O3"
,
"name"
:
"Component2 from Order3"
,
"componentType"
:
"Secondary"
,
"route"
:
[
{
"stepNumber"
:
"0"
,
"stationIdsList"
:
[
"OD0"
]
},
{
"stepNumber"
:
"1"
,
"stationIdsList"
:
[
"QCAM"
]
},
{
"stepNumber"
:
"2"
,
"stationIdsList"
:
[
"CAM1"
,
"CAM2"
],
"processingTime"
:
{
"distributionType"
:
"Fixed"
,
"mean"
:
"0.8"
},
"setupTime"
:{
"setupDistribution"
:
"Fixed"
,
"setupMean"
:
"0.2"
}
},
{
"stepNumber"
:
"3"
,
"stationIdsList"
:
[
"QMILL"
]
},
{
"stepNumber"
:
"4"
,
"stationIdsList"
:
[
"MILL1"
,
"MILL2"
],
"processingTime"
:
{
"distributionType"
:
"Fixed"
,
"mean"
:
"0.4"
},
"setupTime"
:{
"setupDistribution"
:
"Fixed"
,
"setupMean"
:
"0.1"
}
},
{
"stepNumber"
:
"5"
,
"stationIdsList"
:
[
"QEDM"
]
},
{
"stepNumber"
:
"6"
,
"stationIdsList"
:
[
"EDM"
],
"processingTime"
:
{
"distributionType"
:
"Fixed"
,
"mean"
:
"1.4"
},
"setupTime"
:{
"setupDistribution"
:
"Fixed"
,
"setupMean"
:
"0.3"
}
},
{
"stepNumber"
:
"7"
,
"stationIdsList"
:
[
"AB1"
]
},
{
"stepNumber"
:
"8"
,
"stationIdsList"
:
[
"MA1"
,
"MA2"
,
"MA3"
]
}
]
},
{
"_class"
:
"Dream.Mould"
,
"id"
:
"M1O3"
,
"name"
:
"Mould1 from Order3"
,
"route"
:
[
{
"stepNumber"
:
"0"
,
"stationIdsList"
:
[
"MA1"
,
"MA2"
,
"MA3"
],
"processingTime"
:
{
"distributionType"
:
"Fixed"
,
"mean"
:
"2"
}
},
{
"stepNumber"
:
"1"
,
"stationIdsList"
:
[
"QIM"
]
},
{
"stepNumber"
:
"2"
,
"stationIdsList"
:
[
"IM"
],
"processingTime"
:
{
"distributionType"
:
"Fixed"
,
"mean"
:
"0.7"
},
"setupTime"
:{
"setupDistribution"
:
"Fixed"
,
"setupMean"
:
"0.1"
}
},
{
"stepNumber"
:
"3"
,
"stationIdsList"
:
[
"E1"
]
}
]
}
]
},
{
"_class"
:
"Dream.Order"
,
"name"
:
"Order4"
,
"id"
:
"O4"
,
"manager"
:
"OP1"
,
"priority"
:
"2"
,
"route"
:
[
{
"stepNumber"
:
"0"
,
"stationIdsList"
:
[
"Q0"
]
},
{
"stepNumber"
:
"1"
,
"stationIdsList"
:
[
"CAD1"
,
"CAD2"
],
"processingTime"
:
{
"distributionType"
:
"Fixed"
,
"mean"
:
"1.4"
},
"setupTime"
:
{
"setupDistribution"
:
"Fixed"
,
"setupMean"
:
"0.7"
}
}
],
"componentsList"
:
[
{
"_class"
:
"Dream.OrderComponent"
,
"id"
:
"C1O4"
,
"name"
:
"Component1 from Order4"
,
"componentType"
:
"Basic"
,
"route"
:
[
{
"stepNumber"
:
"0"
,
"stationIdsList"
:
[
"OD0"
]
},
{
"stepNumber"
:
"1"
,
"stationIdsList"
:
[
"QCAM"
]
},
{
"stepNumber"
:
"2"
,
"stationIdsList"
:
[
"CAM1"
,
"CAM2"
],
"processingTime"
:
{
"distributionType"
:
"Fixed"
,
"mean"
:
"0.3"
},
"setupTime"
:{
"setupDistribution"
:
"Fixed"
,
"setupMean"
:
"0.1"
}
},
{
"stepNumber"
:
"3"
,
"stationIdsList"
:
[
"QMILL"
]
},
{
"stepNumber"
:
"4"
,
"stationIdsList"
:
[
"MILL1"
,
"MILL2"
],
"processingTime"
:
{
"distributionType"
:
"Fixed"
,
"mean"
:
"3"
},
"setupTime"
:{
"setupDistribution"
:
"Fixed"
,
"setupMean"
:
"1.2"
}
},
{
"stepNumber"
:
"5"
,
"stationIdsList"
:
[
"QEDM"
]
},
{
"stepNumber"
:
"6"
,
"stationIdsList"
:
[
"EDM"
],
"processingTime"
:
{
"distributionType"
:
"Fixed"
,
"mean"
:
"0.9"
},
"setupTime"
:{
"setupDistribution"
:
"Fixed"
,
"setupMean"
:
"0.3"
}
},
{
"stepNumber"
:
"7"
,
"stationIdsList"
:
[
"AB1"
]
},
{
"stepNumber"
:
"8"
,
"stationIdsList"
:
[
"MA1"
,
"MA2"
,
"MA3"
]
}
]
},
{
"_class"
:
"Dream.OrderComponent"
,
"id"
:
"C2O4"
,
"name"
:
"Component2 from Order4"
,
"componentType"
:
"Secondary"
,
"route"
:
[
{
"stepNumber"
:
"0"
,
"stationIdsList"
:
[
"OD0"
]
},
{
"stepNumber"
:
"1"
,
"stationIdsList"
:
[
"QCAM"
]
},
{
"stepNumber"
:
"2"
,
"stationIdsList"
:
[
"CAM1"
,
"CAM2"
],
"processingTime"
:
{
"distributionType"
:
"Fixed"
,
"mean"
:
"0.8"
},
"setupTime"
:{
"setupDistribution"
:
"Fixed"
,
"setupMean"
:
"0.2"
}
},
{
"stepNumber"
:
"3"
,
"stationIdsList"
:
[
"QMILL"
]
},
{
"stepNumber"
:
"4"
,
"stationIdsList"
:
[
"MILL1"
,
"MILL2"
],
"processingTime"
:
{
"distributionType"
:
"Fixed"
,
"mean"
:
"0.4"
},
"setupTime"
:{
"setupDistribution"
:
"Fixed"
,
"setupMean"
:
"0.1"
}
},
{
"stepNumber"
:
"5"
,
"stationIdsList"
:
[
"QEDM"
]
},
{
"stepNumber"
:
"6"
,
"stationIdsList"
:
[
"EDM"
],
"processingTime"
:
{
"distributionType"
:
"Fixed"
,
"mean"
:
"1.4"
},
"setupTime"
:{
"setupDistribution"
:
"Fixed"
,
"setupMean"
:
"0.3"
}
},
{
"stepNumber"
:
"7"
,
"stationIdsList"
:
[
"AB1"
]
},
{
"stepNumber"
:
"8"
,
"stationIdsList"
:
[
"MA1"
,
"MA2"
,
"MA3"
]
}
]
},
{
"_class"
:
"Dream.OrderComponent"
,
"id"
:
"C3O4"
,
"name"
:
"Component3 from Order4"
,
"componentType"
:
"Secondary"
,
"route"
:
[
{
"stepNumber"
:
"0"
,
"stationIdsList"
:
[
"OD0"
]
},
{
"stepNumber"
:
"1"
,
"stationIdsList"
:
[
"QCAM"
]
},
{
"stepNumber"
:
"2"
,
"stationIdsList"
:
[
"CAM1"
,
"CAM2"
],
"processingTime"
:
{
"distributionType"
:
"Fixed"
,
"mean"
:
"0.8"
},
"setupTime"
:{
"setupDistribution"
:
"Fixed"
,
"setupMean"
:
"0.2"
}
},
{
"stepNumber"
:
"3"
,
"stationIdsList"
:
[
"QMILL"
]
},
{
"stepNumber"
:
"4"
,
"stationIdsList"
:
[
"MILL1"
,
"MILL2"
],
"processingTime"
:
{
"distributionType"
:
"Fixed"
,
"mean"
:
"0.4"
},
"setupTime"
:{
"setupDistribution"
:
"Fixed"
,
"setupMean"
:
"0.1"
}
},
{
"stepNumber"
:
"5"
,
"stationIdsList"
:
[
"QEDM"
]
},
{
"stepNumber"
:
"6"
,
"stationIdsList"
:
[
"EDM"
],
"processingTime"
:
{
"distributionType"
:
"Fixed"
,
"mean"
:
"1.4"
},
"setupTime"
:{
"setupDistribution"
:
"Fixed"
,
"setupMean"
:
"0.3"
}
},
{
"stepNumber"
:
"7"
,
"stationIdsList"
:
[
"AB1"
]
},
{
"stepNumber"
:
"8"
,
"stationIdsList"
:
[
"MA1"
,
"MA2"
,
"MA3"
]
}
]
},
{
"_class"
:
"Dream.Mould"
,
"id"
:
"M1O4"
,
"name"
:
"Mould1 from Order4"
,
"route"
:
[
{
"stepNumber"
:
"0"
,
"stationIdsList"
:
[
"MA1"
,
"MA2"
,
"MA3"
],
"processingTime"
:
{
"distributionType"
:
"Fixed"
,
"mean"
:
"2"
}
},
{
"stepNumber"
:
"1"
,
"stationIdsList"
:
[
"QIM"
]
},
{
"stepNumber"
:
"2"
,
"stationIdsList"
:
[
"IM"
],
"processingTime"
:
{
"distributionType"
:
"Fixed"
,
"mean"
:
"0.7"
},
"setupTime"
:{
"setupDistribution"
:
"Fixed"
,
"setupMean"
:
"0.1"
}
},
{
"stepNumber"
:
"3"
,
"stationIdsList"
:
[
"E1"
]
}
]
}
]
}
]
},
"CAD1"
:
{
"_class"
:
"Dream.MachineManagedJob"
,
"name"
:
"CAD Design 1"
,
"operationType"
:
"MT-Load-Setup-Processing"
},
"CAD2"
:
{
"_class"
:
"Dream.MachineManagedJob"
,
"name"
:
"CAD Design 2"
,
"operationType"
:
"MT-Load-Setup-Processing"
},
"OD0"
:
{
"_class"
:
"Dream.OrderDecomposition"
,
"name"
:
"Order Decomposition"
},
"QCAM"
:
{
"_class"
:
"Dream.ConditionalBuffer"
,
"name"
:
"Queue CAM"
,
"isDummy"
:
"0"
,
"schedulingRule"
:
"Priority"
,
"capacity"
:
"-1"
},
"CAM1"
:
{
"_class"
:
"Dream.MachineManagedJob"
,
"name"
:
"CAM Design 1"
,
"operationType"
:
"MT-Load-Setup-Processing"
},
"CAM2"
:
{
"_class"
:
"Dream.MachineManagedJob"
,
"name"
:
"CAM Design 2"
,
"operationType"
:
"MT-Load-Setup-Processing"
},
"QMILL"
:
{
"_class"
:
"Dream.QueueManagedJob"
,
"name"
:
"Queue Milling"
,
"isDummy"
:
"0"
,
"schedulingRule"
:
"Priority"
,
"capacity"
:
"-1"
},
"MILL1"
:
{
"_class"
:
"Dream.MachineManagedJob"
,
"name"
:
"Milling 1"
,
"operationType"
:
"MT-Load-Setup-Processing"
},
"MILL2"
:
{
"_class"
:
"Dream.MachineManagedJob"
,
"name"
:
"Milling 2"
,
"operationType"
:
"MT-Load-Setup-Processing"
},
"QEDM"
:
{
"_class"
:
"Dream.QueueManagedJob"
,
"name"
:
"Queue EDM"
,
"isDummy"
:
"0"
,
"schedulingRule"
:
"Priority"
,
"capacity"
:
"-1"
},
"EDM"
:
{
"_class"
:
"Dream.MachineManagedJob"
,
"name"
:
"EDM"
,
"operationType"
:
"MT-Load-Setup-Processing"
},
"AB1"
:
{
"_class"
:
"Dream.MouldAssemblyBuffer"
,
"id"
:
"AB1"
,
"name"
:
"Assembly Buffer"
,
"schedulingRule"
:
"Priority"
,
"isDummy"
:
"0"
,
"capacity"
:
"-1"
},
"MA1"
:
{
"_class"
:
"Dream.MouldAssembly"
,
"id"
:
"MA1"
,
"name"
:
"Assembly 1"
,
"operationType"
:
"MT-Load-Setup-Processing"
},
"MA2"
:
{
"_class"
:
"Dream.MouldAssembly"
,
"id"
:
"MA2"
,
"name"
:
"Assembly 2"
,
"operationType"
:
"MT-Load-Setup-Processing"
},
"MA3"
:
{
"_class"
:
"Dream.MouldAssembly"
,
"id"
:
"MA3"
,
"name"
:
"Assembly 3"
,
"operationType"
:
"MT-Load-Setup-Processing"
},
"QIM"
:
{
"_class"
:
"Dream.QueueManagedJob"
,
"name"
:
"Queue Mould Injection"
,
"isDummy"
:
"0"
,
"schedulingRule"
:
"Priority"
,
"capacity"
:
"-1"
},
"IM"
:
{
"_class"
:
"Dream.MachineManagedJob"
,
"name"
:
"Mould Injection"
,
"operationType"
:
"MT-Load-Setup-Processing"
},
"E1"
:
{
"_class"
:
"Dream.ExitJobShop"
,
"name"
:
"Exit"
},
"OP1"
:
{
"_class"
:
"Dream.OperatorManagedJob"
,
"capacity"
:
"1"
,
"name"
:
"Operator1"
,
"schedulingRule"
:
"Priority"
},
"OP2"
:
{
"_class"
:
"Dream.OperatorManagedJob"
,
"capacity"
:
"1"
,
"name"
:
"Operator2"
,
"schedulingRule"
:
"Priority"
},
"OP3"
:
{
"_class"
:
"Dream.OperatorManagedJob"
,
"capacity"
:
"1"
,
"name"
:
"Operator3"
,
"schedulingRule"
:
"Priority"
}
}
}
\ No newline at end of file
dream/simulation/Operator.py
View file @
c4a63d44
...
@@ -40,11 +40,6 @@ class Operator(Repairman): # XXX isn't it the other way around ?
...
@@ -40,11 +40,6 @@ class Operator(Repairman): # XXX isn't it the other way around ?
self
.
type
=
"Operator"
self
.
type
=
"Operator"
self
.
activeCallersList
=
[]
# the list of object that request the operator
self
.
activeCallersList
=
[]
# the list of object that request the operator
self
.
schedulingRule
=
schedulingRule
#the scheduling rule that the Queue follows
self
.
schedulingRule
=
schedulingRule
#the scheduling rule that the Queue follows
# #=======================================================================
# # TESTING
# print now(), self.id, 'schedulingRule'
# print self.schedulingRule
# #=======================================================================
self
.
multipleCriterionList
=
[]
#list with the criteria used to sort the Entities in the Queue
self
.
multipleCriterionList
=
[]
#list with the criteria used to sort the Entities in the Queue
SRlist
=
[
schedulingRule
]
SRlist
=
[
schedulingRule
]
if
schedulingRule
.
startswith
(
"MC"
):
# if the first criterion is MC aka multiple criteria
if
schedulingRule
.
startswith
(
"MC"
):
# if the first criterion is MC aka multiple criteria
...
...
dream/simulation/OperatorRouter.py
View file @
c4a63d44
...
@@ -89,66 +89,57 @@ class Router(ObjectInterruption):
...
@@ -89,66 +89,57 @@ class Router(ObjectInterruption):
#===================================================================
#===================================================================
# # TESTING
# # TESTING
# print ' the called operators are ', [str(operator.id) for operator in self.calledOperators]
# print ' (calledOperators, activeCallers, callerEntities): ', [(str(operator.id),\
# print ' from callers ', [[str(x.id) for x in operator.activeCallersList] for operator in self.calledOperators]
# [str(x.id) for x in operator.activeCallersList],\
# print ' for entity ', [[str(x.giver.getActiveObjectQueue()[0].id)for x in operator.activeCallersList] for operator in self.calledOperators]
# [str(x.giver.getActiveObjectQueue()[0].id)for x in operator.activeCallersList])\
# for operator in self.calledOperators]
#===================================================================
#===================================================================
# find the operators that can start working now even if they are not called
# find the operators that can start working now even if they are not called
self
.
findCandidateOperators
()
self
.
findCandidateOperators
()
#===================================================================
# # TESTING
# print ' {} the candidateOperators ',
# print [str(op.id) for op in self.candidateOperators]
#===================================================================
# sort the pendingEntities list
# sort the pendingEntities list
self
.
sortPendingEntities
()
self
.
sortPendingEntities
()
#===================================================================
#===================================================================
# # TESTING
# # TESTING
# if G.pendingEntities:
# if G.pendingEntities:
# print ' {} the pending entities that can proceed are:
',
# print ' {} the pending entities that can proceed are: ',
# print [str(entity.id) for entity in G.pendingEntities if entity.canProceed]
# print [str(entity.id) for entity in G.pendingEntities if entity.canProceed]
# if self.candidateOperators:
# print ' {} the candidate operators are: ',
# print [str(candidate.id) for candidate in self.candidateOperators]
#===================================================================
#===================================================================
# find the operators candidateEntities
# find the operators candidateEntities
self
.
findCandidateEntities
()
self
.
findCandidateEntities
()
# find the entity that will occupy the resource, and the station that will receive it (if any available)
self
.
findCandidateReceivers
()
#===================================================================
#===================================================================
# # TESTING
# # TESTING
# print '
after findReceivers
',
# print '
{} candidate entities for each candidateOperator
',
# print [(str(operator.id),[str(candidateEntity.id) for candidateEntity in operator.candidateEntities],)\
# print [(str(operator.id),[str(candidateEntity.id) for candidateEntity in operator.candidateEntities],)\
# for operator in self.candidateOperators]
# for operator in self.candidateOperators]
# print 'after find receivers'
# print [str(op.id) for op in self.candidateOperators if op.candidateEntity.candidateReceiver]
# print [(op.id, op.candidateEntity.id, op.candidateEntity.candidateReceiver.id)\
# for op in self.candidateOperators if op.candidateEntity.candidateReceiver]
#===================================================================
#===================================================================
#
sort the givers for the operators that will process the entities
#
find the entity that will occupy the resource, and the station that will receive it (if any available)
self
.
sortGiverQueue
()
self
.
findCandidateReceivers
()
#===================================================================
#===================================================================
# # TESTING
# # TESTING
# print 'after sortGiverQueue'
# print ' {} (candidateOperator, candidateEntity, candidateReceiver) ',
# print [str(op.id) for op in self.candidateOperators if op.candidateEntity.candidateReceiver]
# print [(str(op.id), str(op.candidateEntity.id), str(op.candidateEntity.candidateReceiver.id))\
# print [(op.id, op.candidateEntity.id, op.candidateEntity.candidateReceiver.id)\
# for op in self.candidateOperators if op.candidateEntity.candidateReceiver]
# for op in self.candidateOperators if op.candidateEntity.candidateReceiver]
#===================================================================
#===================================================================
# sort the givers for the operators that will process the entities
self
.
sortGiverQueue
()
# for all the operators that are requested
# for all the operators that are requested
for
operator
in
self
.
calledOperators
:
for
operator
in
self
.
calledOperators
:
priorityObject
=
None
priorityObject
=
None
#===============================================================
# # TESTING
# print ' calledOperator prioritising',operator.id
# if operator.candidateEntity:
# if operator.candidateEntity.candidateReceiver:
# print ' its candidateReceiver',operator.candidateEntity.candidateReceiver.id
# print ' its activeCallers',[str(x.id) for x in operator.activeCallersList]
#===============================================================
# check if the candidateReceivers are inPositionToGet and if they are already called
# check if the candidateReceivers are inPositionToGet and if they are already called
try
:
try
:
...
@@ -156,23 +147,19 @@ class Router(ObjectInterruption):
...
@@ -156,23 +147,19 @@ class Router(ObjectInterruption):
and
operator
.
candidateEntity
.
candidateReceiver
in
self
.
pendingObjects
)
and
operator
.
candidateEntity
.
candidateReceiver
in
self
.
pendingObjects
)
except
:
except
:
receiverIsActive
=
True
receiverIsActive
=
True
#===============================================================
# # TESTING
# print ' calledOperator', operator.id,
# print 'will receive?',operator.checkIfResourceIsAvailable() and receiverIsActive
#===============================================================
# check if the candidateOperators are available, if the are requested and reside in the pendingObjects list
# check if the candidateOperators are available, if the are requested and reside in the pendingObjects list
if
operator
.
checkIfResourceIsAvailable
()
and
\
if
operator
.
checkIfResourceIsAvailable
()
and
\
receiverIsActive
:
receiverIsActive
:
#===========================================================
# # TESTING
# print now(), 'the active callers of', operator.objName, 'before sorting are ',
# print [str(caller.id) for caller in operator.activeCallersList]
#===========================================================
# sort the activeCallersList of the operator
# sort the activeCallersList of the operator
operator
.
sortEntities
()
operator
.
sortEntities
()
#===========================================================
# # TESTING
# print now(), 'the active callers of', operator.objName, 'after sorting are ',
# print [str(caller.id) for caller in operator.activeCallersList]
#===========================================================
# find the activeCaller that has priority
# find the activeCaller that has priority
priorityObject
=
next
(
x
for
x
in
operator
.
activeCallersList
if
x
in
self
.
pendingObjects
)
priorityObject
=
next
(
x
for
x
in
operator
.
activeCallersList
if
x
in
self
.
pendingObjects
)
...
@@ -186,10 +173,6 @@ class Router(ObjectInterruption):
...
@@ -186,10 +173,6 @@ class Router(ObjectInterruption):
# assign an operator to the priorityObject
# assign an operator to the priorityObject
operator
.
operatorAssignedTo
=
priorityObject
operator
.
operatorAssignedTo
=
priorityObject
#=======================================================
# # TESTING
# print now(), operator.objName, 'got assigned to', priorityObject.id
#=======================================================
# and let it proceed withGetEntity
# and let it proceed withGetEntity
priorityObject
.
canProceedWithGetEntity
=
True
priorityObject
.
canProceedWithGetEntity
=
True
...
@@ -399,16 +382,7 @@ class Router(ObjectInterruption):
...
@@ -399,16 +382,7 @@ class Router(ObjectInterruption):
self
.
candidateOperators
.
sort
(
key
=
lambda
x
:
x
.
totalWorkingTime
)
self
.
candidateOperators
.
sort
(
key
=
lambda
x
:
x
.
totalWorkingTime
)
if
operatorsWithOneOption
:
if
operatorsWithOneOption
:
self
.
candidateOperators
.
sort
(
key
=
lambda
x
:
x
in
operatorsWithOneOption
,
reverse
=
True
)
# sort according to the number of options
self
.
candidateOperators
.
sort
(
key
=
lambda
x
:
x
in
operatorsWithOneOption
,
reverse
=
True
)
# sort according to the number of options
#===================================================================
# # TESTING
# if self.candidateOperators:
# print ' findEntities',
# print [(str(operator.id),[str(candidateEntity.id) for candidateEntity in operator.candidateEntities])\
# for operator in self.candidateOperators]
#===================================================================
#=======================================================================
#=======================================================================
# Find candidate entities and their receivers
# Find candidate entities and their receivers
# TODO: if there is a critical entity, its manager should be served first
# TODO: if there is a critical entity, its manager should be served first
...
@@ -416,61 +390,71 @@ class Router(ObjectInterruption):
...
@@ -416,61 +390,71 @@ class Router(ObjectInterruption):
#=======================================================================
#=======================================================================
def
findCandidateReceivers
(
self
):
def
findCandidateReceivers
(
self
):
# initialise local variables occupiedReceivers and entitiesWithOccupiedReceivers
# initialise local variables occupiedReceivers and entitiesWithOccupiedReceivers
occupiedReceivers
=
[]
# occupied candidateReceivers of a candidateEntity
occupiedReceivers
=
[]
# occupied candidateReceivers of a candidateEntity
entitiesWithOccupiedReceivers
=
[]
# list of entities that have no available receivers
entitiesWithOccupiedReceivers
=
[]
# list of entities that have no available receivers
# finally we have to sort before giving the entities to the operators
# finally we have to sort before giving the entities to the operators
# If there is an entity which must have priority then it should be assigned first
# If there is an entity which must have priority then it should be assigned first
def
findCandidateEntity
():
return
next
(
x
for
x
in
operator
.
candidateEntities
if
not
x
in
entitiesWithOccupiedReceivers
)
def
findCandidateReceiver
():
# initiate the local list variable available receivers
availableReceivers
=
[
x
for
x
in
operator
.
candidateEntity
.
candidateReceivers
\
if
not
x
in
occupiedReceivers
]
# and pick the object that is waiting for the most time
if
availableReceivers
:
# TODO: must find the receiver that waits the most
maxTimeWaiting
=
0
for
object
in
availableReceivers
:
timeWaiting
=
now
()
-
object
.
timeLastEntityLeft
if
(
timeWaiting
>
maxTimeWaiting
or
maxTimeWaiting
==
0
):
maxTimeWaiting
=
timeWaiting
availableReceiver
=
object
# operator.candidateEntity.candidateReceiver=availableReceiver
occupiedReceivers
.
append
(
availableReceiver
)
# if there is no available receiver add the entity to the entitiesWithOccupiedReceivers list
else
:
entitiesWithOccupiedReceivers
.
append
(
operator
.
candidateEntity
)
availableReceiver
=
None
# operator.candidateEntity.candidateReceiver=None
return
availableReceiver
for
operator
in
[
x
for
x
in
self
.
candidateOperators
if
x
.
candidateEntities
]:
for
operator
in
[
x
for
x
in
self
.
candidateOperators
if
x
.
candidateEntities
]:
operator
.
candidateEntity
=
operator
.
candidateEntities
[
0
]
operator
.
candidateEntity
=
operator
.
candidateEntities
[
0
]
#===================================================================
# TESTING
# print ' first assignment of candidateEntity'
# print [(str(x.id), str(x.candidateEntity.id)) for x in self.candidateOperators if x.candidateEntity]
#===================================================================
# TODO: sorting again after choosing candidateEntity
# TODO: sorting again after choosing candidateEntity
self
.
sortOperators
()
self
.
sortOperators
()
# for the candidateOperators that do have candidateEntities pick a candidateEntity
# for the candidateOperators that do have candidateEntities pick a candidateEntity
for
operator
in
[
x
for
x
in
self
.
candidateOperators
if
x
.
candidateEntities
]:
for
operator
in
[
x
for
x
in
self
.
candidateOperators
if
x
.
candidateEntities
]:
# find the first available entity that has no occupied receivers
# find the first available entity that has no occupied receivers
availableEntity
=
next
(
x
for
x
in
operator
.
candidateEntities
if
not
x
in
entitiesWithOccupiedReceivers
)
# availableEntity=next(x for x in operator.candidateEntities if not x in entitiesWithOccupiedReceivers)
if
availableEntity
:
operator
.
candidateEntity
=
findCandidateEntity
()
operator
.
candidateEntity
=
availableEntity
if
operator
.
candidateEntity
:
operator
.
candidateEntity
.
candidateReceiver
=
findCandidateReceiver
()
# initiate the local list variable available receivers
availableReceivers
=
[
x
for
x
in
operator
.
candidateEntity
.
candidateReceivers
\
# # initiate the local list variable available receivers
if
not
x
in
occupiedReceivers
]
# availableReceivers=[x for x in operator.candidateEntity.candidateReceivers\
# and pick the object that is waiting for the most time
# if not x in occupiedReceivers]
if
availableReceivers
:
# # and pick the object that is waiting for the most time
# TODO: must find the receiver that waits the most
# if availableReceivers:
maxTimeWaiting
=
0
# # TODO: must find the receiver that waits the most
for
object
in
availableReceivers
:
# maxTimeWaiting=0
timeWaiting
=
now
()
-
object
.
timeLastEntityLeft
# for object in availableReceivers:
if
(
timeWaiting
>
maxTimeWaiting
or
maxTimeWaiting
==
0
):
# timeWaiting=now()-object.timeLastEntityLeft
maxTimeWaiting
=
timeWaiting
# if(timeWaiting>maxTimeWaiting or maxTimeWaiting==0):
availableReceiver
=
object
# maxTimeWaiting=timeWaiting
# availableReceiver=object
operator
.
candidateEntity
.
candidateReceiver
=
availableReceiver
#
occupiedReceivers
.
append
(
availableReceiver
)
# operator.candidateEntity.candidateReceiver=availableReceiver
# if there is no available receiver add the entity to the entitiesWithOccupiedReceivers list
# occupiedReceivers.append(availableReceiver)
else
:
# # if there is no available receiver add the entity to the entitiesWithOccupiedReceivers list
entitiesWithOccupiedReceivers
.
append
(
availableEntity
)
# else:
operator
.
candidateEntity
.
candidateReceiver
=
None
# entitiesWithOccupiedReceivers.append(availableEntity)
# # TODO: sorting again after choosing candidateEntity
# operator.candidateEntity.candidateReceiver=None
# self.sortOperators()
#===================================================================
# # TESTING
# print ' findReceivers',
# print [(str(operator.id),[str(candidateEntity.id) for candidateEntity in operator.candidateEntities])\
# for operator in self.candidateOperators]
#===================================================================
#=======================================================================
#=======================================================================
# Sort Givers
# Sort Givers
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment