diff --git a/dream/plugins/AddDemandPlannerGenerator.py b/dream/plugins/AddDemandPlannerGenerator.py index 00757e600ec4fae8ebd0c82be598a4d40cf64702..013a736adf5880b674c55fb6bdad2447e4f34f74 100644 --- a/dream/plugins/AddDemandPlannerGenerator.py +++ b/dream/plugins/AddDemandPlannerGenerator.py @@ -16,6 +16,7 @@ class AddDemandPlannerGenerator(plugin.InputPreparationPlugin): nodes=data['graph']['node'] data_uri_encoded_input_data = data['input'].get(self.configuration_dict['input_id'], {}) + algorithmAttributes=copy(data['general']) nodes['DPG']={ "name": "DemandPlannerGenerator", @@ -25,7 +26,7 @@ class AddDemandPlannerGenerator(plugin.InputPreparationPlugin): "stop": 0.5, "_class": "dream.simulation.EventGenerator.EventGenerator", "method": "dream.simulation.applications.DemandPlanning.executor_ACO.main", - "argumentDict": {'input':data_uri_encoded_input_data} + "argumentDict": {'input':data_uri_encoded_input_data, 'algorithmAttributes':algorithmAttributes} } #print nodes return data diff --git a/dream/simulation/Examples/DemandPlanningAllInOneEmpty.json b/dream/simulation/Examples/DemandPlanningAllInOneEmpty.json index ec6e7b6b4c35d7e13463582e2be8611faa0e2fc9..e8c43c7ba8534b5508ea96fdbaf7c0465776bd2c 100644 --- a/dream/simulation/Examples/DemandPlanningAllInOneEmpty.json +++ b/dream/simulation/Examples/DemandPlanningAllInOneEmpty.json @@ -2,26 +2,26 @@ "application_configuration": { "general": { "properties": { - "MaxEarliness": { + "maxEarliness": { "default": 2, "description": "Maximum Earliness", "name": "Maximum Earliness", "type": "number" }, - "MaxLateness": { + "maxLateness": { "default": 2, "description": "Maximum Lateness", "name": "Maximum Lateness", "type": "number" }, - "MinDelta": { - "default": 0, + "minDelta": { + "default": 1, "description": "Min Delta Target Utilisation", "name": "Min Delta Target Utilisation", "type": "number" }, "ACO": { - "default": 2, + "default": 0, "description": "ACO", "name": "ACO", "type": "number" @@ -32,7 +32,7 @@ "name": "Population size", "type": "number" }, - "ACO numberOfGenerations": { + "ACOnumberOfGenerations": { "default": 8, "description": "ACO Number of generations", "name": "ACO Number of generations", @@ -50,13 +50,13 @@ "name": "Minimum Utilisation", "type": "number" }, - "MinDeltaTargerUtilisation": { + "minDeltaTargetUtilisation": { "default": 0, "description": "Minimum Delta Target Utilisation", "name": "Minimum Delta Target Utilisation", "type": "number" }, - "MinTargerUtilisation": { + "minTargetUtilisation": { "default": 2, "description": "Minimum Delta Utilisation", "name": "Minimum Delta Utilisation", @@ -74,7 +74,7 @@ "name": "GA population Size", "type": "number" }, - "GA numberOfGenerations": { + "GAnumberOfGenerations": { "default": 8, "description": "GA Number of Generations", "name": "GA Number of Generations", @@ -91,7 +91,13 @@ "description": "Mutation Probability", "name": "Mutation Probability", "type": "number" - } + }, + "processTimeout": { + "default": 300, + "description": "Number of seconds before the calculation process is interrupted", + "title": "ProcessTimeout", + "type": "number" + } } }, "input": { @@ -160,17 +166,7 @@ }, "class_definition": {}, "constraints": {}, - "general": { - "TargetPPOS": null, - "TargetPPOSqty": null, - "TargetPPOSweek": null, - "ke_url": "", - "maxEarliness": null, - "maxLateness": null, - "minPackingSize": null, - "numberOfReplications": 1, - "planningHorizon": null - }, + "general": {}, "graph": { "edge": {}, "node": {} diff --git a/dream/simulation/applications/DemandPlanning/ImportInput.py b/dream/simulation/applications/DemandPlanning/ImportInput.py index 7b81d7046f5e074278091f14ca1b21fa5f982cd3..6556093be0bb65672f50e20281a5ec33a98b31cc 100644 --- a/dream/simulation/applications/DemandPlanning/ImportInput.py +++ b/dream/simulation/applications/DemandPlanning/ImportInput.py @@ -43,49 +43,36 @@ def my_split(s, seps): res += seq.split(sep) return res -def ImportInput(input): - +def ImportInput(input, algorithmAttributes): # general simulation input mime_type, attachement_data = input[len('data:'):].split(';base64,', 1) attachement_data = attachement_data.decode('base64') wbin = xlrd.open_workbook(file_contents=attachement_data) - sh = wbin.sheet_by_name('Scalar_Var') - G.maxEarliness = withoutFormat(3,1,sh,1) - G.maxLateness = withoutFormat(4,1,sh,1) + G.maxEarliness = algorithmAttributes.get('maxEarliness',None) + G.maxLateness = algorithmAttributes.get('maxLateness',None) # utilisation calculation - if withoutFormat(9,1,sh,1) != '': - G.minDeltaUt = withoutFormat(9,1,sh,1) - + G.minDeltaUt = algorithmAttributes.get('minDelta',None) + # ACO parameters - if withoutFormat(12,1,sh,1) != '': - G.ACO = withoutFormat(12,1,sh,1) - if withoutFormat(13,1,sh,1) != '': - G.popSize = withoutFormat(13,1,sh,1) - if withoutFormat(14,1,sh,1) != '': - G.noGen = withoutFormat(14,1,sh,1) + G.ACO = algorithmAttributes.get('ACO',None) + G.popSize=algorithmAttributes.get('ACOpopulationSize',None) + G.noGen=algorithmAttributes.get('ACOnumberOfGenerations',None) # optimisation weights for forecast IP method - if withoutFormat(18,1,sh,1) != '': - G.weightFactor[0] = withoutFormat(18,1,sh,1) - if withoutFormat(19,1,sh,1) != '': - G.weightFactor[1] = withoutFormat(19,1,sh,1) - if withoutFormat(20,1,sh,1) != '': - G.weightFactor[2] = withoutFormat(20,1,sh,1) - if withoutFormat(21,1,sh,1) != '': - G.weightFactor[3] = withoutFormat(21,1,sh,1) + G.weightFactor[0] = algorithmAttributes.get('maxAssignedQty',None) + G.weightFactor[1] = algorithmAttributes.get('minUtilisation',None) + G.weightFactor[2] = algorithmAttributes.get('minDeltaTargetUtilisation',None) + G.weightFactor[3] = algorithmAttributes.get('minTargetUtilisation',None) + + # GA parameters - if withoutFormat(23,1,sh,1) != '': - G.GA = withoutFormat(23,1,sh,1) - if withoutFormat(24,1,sh,1) != '': - G.popSizeGA = withoutFormat(24,1,sh,1) - if withoutFormat(25,1,sh,1) != '': - G.noGenGA = withoutFormat(25,1,sh,1) - if withoutFormat(26,1,sh,1) != '': - G.probXover = withoutFormat(26,1,sh,1) - if withoutFormat(27,1,sh,1) != '': - G.probMutation = withoutFormat(27,1,sh,1) + G.GA= algorithmAttributes.get('GA',None) + G.popSizeGA =algorithmAttributes.get('GApopulationSize',None) + G.noGenGA =algorithmAttributes.get('GAnumberOfGenerations',None) + G.probXover =algorithmAttributes.get('XOver',None) + G.probMutation =algorithmAttributes.get('mutationProbability',None) # Import capacity information...capacity = {Resource: {week {'originalCapacity':, 'remainingCapacity', 'minUtilisation'} sh = wbin.sheet_by_name('BN_Capa') diff --git a/dream/simulation/applications/DemandPlanning/executor_ACO.py b/dream/simulation/applications/DemandPlanning/executor_ACO.py index 1c22854f74324ec1710699373163a47803de5564..701d14f5abd41f227c5da666ba9b1c5b5ecc8170 100644 --- a/dream/simulation/applications/DemandPlanning/executor_ACO.py +++ b/dream/simulation/applications/DemandPlanning/executor_ACO.py @@ -27,8 +27,8 @@ from AllocManagement_Hybrid import AllocManagement_Hybrid2 from ImportInput import ImportInput from outputResults import outputResults -def main(input): +def main(input, algorithmAttributes): assert input, 'no input is provided, the algorithm cannot run' - ImportInput(input) + ImportInput(input, algorithmAttributes) AllocManagement_Hybrid2() outputResults()