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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
| Quintiq file version 2.0
| #parent: #root
| Method GenerateEnlargedMetalsBenchmark (
| String description
| )
| {
| TextBody:
| [*
| // description described which feature to add
| // strategy is a temporary copy of the strategy indicated in the tracking table. We add KPIs to levels based on options.
|
| // >> unused, values set with method 'ParseBenchmarkName'
| endproductstoadd := 1;
| intermediatetoadd := 1;
| periodstoadd := 1;
| addtriplotsize := true;
| usertriplotsize := 100.0;
| addptolotsize := true;
| userptolotsize := 1000.0;
| addptominqty := true;
| userptominqty := 5000.0;
| addinputlotsize := true;
| userinputlotsize := 1000.0;
| setlotcost := true;
| setinventorymixbalancing := true;
| addcapsmoothing := true;
| smoothingdelta := 2.0; // 2% smoothing
| addpostponement := true;
| postponementnrperiods := 1234;
| // <<
|
| Optimization::ParseBenchmarkName( description,
| endproductstoadd,
| intermediatetoadd,
| periodstoadd,
| addtriplotsize,
| usertriplotsize,
| addptolotsize,
| userptolotsize,
| addptominqty,
| userptominqty,
| addinputlotsize,
| userinputlotsize,
| setlotcost,
| setinventorymixbalancing,
| addcapsmoothing,
| smoothingdelta,
| addpostponement,
| postponementnrperiods );
|
|
| mp := this.MacroPlan();
|
| mp.GenerateBenchmark( 'myprod',
| endproductstoadd,
| intermediatetoadd,
| periodstoadd,
| addtriplotsize,
| usertriplotsize,
| addptolotsize,
| userptolotsize,
| addptominqty,
| userptominqty,
| addinputlotsize,
| userinputlotsize,
| setlotcost,
| setinventorymixbalancing,
| addcapsmoothing,
| smoothingdelta,
| addpostponement,
| postponementnrperiods );
|
| if ( addinputlotsize or addptolotsize or addtriplotsize )
| {
| kpwi:= select( mp, StrategyMacroPlan.KPIWeightMacroPlan, kpiw, true, kpiw.KPIName() = Translations::MP_GlobalParameters_KPILotSizeName() );
| kpwi.Weight( 1.0 );
| kpwi.Level( 1 ); // add lot size to first level ( constraints)
| }
|
| if ( addptominqty )
| {
| kpiw:= select( mp, StrategyMacroPlan.KPIWeightMacroPlan, kpiw, true, kpiw.KPIName() = Translations::MP_GlobalParameters_KPIProcessMinimumQuantity() );
| kpiw.Weight( 1.0 );
| kpiw.Level( 1 ); // add process min qty to first level ( constraints )
| }
|
| if ( setinventorymixbalancing )
| {
| kpiw:= select( mp, StrategyMacroPlan.KPIWeightMacroPlan, kpiw, true, kpiw.KPIName() = Translations::MP_GlobalParameters_KPIInventoryMixBalancing() );
| kpiw.Weight( 1.0 );
| kpiw.Level( 1 ); // add inv mix balance to first level ( constraints )
| }
|
| if ( addcapsmoothing )
| {
| kpiw:= select( mp, StrategyMacroPlan.KPIWeightMacroPlan, kpiw, true, kpiw.KPIName() = Translations::MP_GlobalParameters_KPICapacitySmoothing() );
| kpiw.Weight( 1.0 );
| kpiw.Level( 1 ); // add cap smooth to first level ( constraints )
| }
|
| if ( setlotcost )
| {
| traverse( mp, StrategyMacroPlan.KPIWeightMacroPlan, kpiw, kpiw.KPIName() ~ 'ost' and kpiw.KPIName() ~ 'Lot' )
| {
| kpiw.Weight( 1.0 );
| kpiw.Level( mp.StrategyMacroPlan().MaxActiveLevel() ); // add lot cost to last level
| }
| }
|
| if ( addpostponement )
| {
| traverse( mp, StrategyMacroPlan.KPIWeightMacroPlan, kpiw, kpiw.KPIName() = Translations::MP_GlobalParameters_KPIPostponementPenaltyName() )
| {
| kpiw.Weight( 0.001 );
| kpiw.Level( mp.StrategyMacroPlan().MaxActiveLevel() ); // add small postponement penalty to last level (presumed cost)
| }
| }
| *]
| InterfaceProperties { Accessibility: 'Module' }
| }
|
|