OSDN Git Service

Update parse_boxes.py
[bin-packing-3d/or_project_inform.git] / Generator.py
1 # Copyright (c) 2020 INFORM GmbH. All rights reserverd. 
2 # This copyright notice applies to the current file and all its outputs. 
3
4 import random
5 random.seed(42)
6
7 # Parameters of the generator
8 iNoArticles = 1000
9 iNoOrders = 100000
10 lDimensionsOfPallet = [120,80,160]
11 hlDimensionsOfBoxType = {
12                         "B0" : (20,10,10),
13                         "B1" : (20,20,10),
14                         "B2" : (20,20,20),
15                         "B3" : (20,40,20),
16                         "B4" : (20,40,40),
17                         "B5" : (30,40,40),
18                         "B6" : (40,40,40),
19                         "B7" : (60,40,40)
20                         }
21
22 # Generate dimensions of articles randomly
23 hlDimensionsOfArticle = {}
24 for i in range(1,iNoArticles+1):
25     hlDimensionsOfArticle["A"+str(i)] = ( random.choices([5,8,10,12,15,20], [0.01,0.09,0.4,0.2,0.1,0.2])[0],
26                                           random.choices([5,8,10,12,15,20], [0.01,0.09,0.4,0.2,0.1,0.2])[0],
27                                           random.choices([5,8,10,12,15,20], [0.01,0.09,0.4,0.2,0.1,0.2])[0] )
28
29 # Generate weight according to random density
30 hWeightOfArticle = {}
31 hDensityOfArticle = {}
32 for a in hlDimensionsOfArticle:
33     fDensity = random.choices([0.01,0.1,0.2,0.5], weights=[0.1,0.4,0.3,0.2])[0]
34     hWeightOfArticle[a] = int(hlDimensionsOfArticle[a][0]*hlDimensionsOfArticle[a][1]*hlDimensionsOfArticle[a][2]*fDensity)
35
36 # Generate for every order a random set of articles
37 hhNumberOfArticlesOfOrder = {}
38 for i in range(iNoOrders):
39     hhNumberOfArticlesOfOrder["O"+str(i)] = {}
40     # Between 1 and 10 different articles per order
41     iNoOfArticles = random.randint(1,10)
42     # Choose a random subset of articles for order
43     sArticlesOfOrder = random.sample(hlDimensionsOfArticle.keys(), iNoOfArticles)
44     for a in sArticlesOfOrder:
45         # Number of articles in order is a random between 1 and 10
46         hhNumberOfArticlesOfOrder["O"+str(i)][a] = random.randint(1,10)
47
48 def test_not_empty():
49     assert hlDimensionsOfArticle
50     assert hlDimensionsOfBoxType
51     assert hWeightOfArticle
52     assert hDensityOfArticle
53
54 print("Order ID;;;;;;Article ID;Article Name;Length (cm);Width (cm);Height (cm);Weight (g);Units")
55 for o in hhNumberOfArticlesOfOrder:
56     for a in hhNumberOfArticlesOfOrder[o]:
57         print(o,";;;;;;",a,";",a,";",hlDimensionsOfArticle[a][0],";",hlDimensionsOfArticle[a][1],";",hlDimensionsOfArticle[a][2],";",hWeightOfArticle[a],";",hhNumberOfArticlesOfOrder[o][a])