chenqinghong
2024-05-07 3ec06a830367465068963156dcc1d8e522571c13
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
Quintiq file version 2.0
#parent: #root
Method Copy (
  ScenarioManager scenariomanager,
  Strategy strategy,
  String name,
  Number displayindex,
  String description,
  Boolean isvisible
) as Strategy
{
  Description: 'Make a copy of strategy'
  TextBody:
  [*
    // Make a copy of the strategy
    // Populate the variables with values from the passed in strategy
    massscalingfactor := strategy.MassScalingFactor();
    monetaryscalingfactor := strategy.MonetaryScalingFactor();
    timescalingfactor := strategy.TimeScalingFactor();
    timeaccountscalingfactor := strategy.TimeAccountScalingFactor();
    inventoryholdingscalingfactor := strategy.InventoryHoldingScalingFactor();
    lastautoscalingrun := strategy.LastAutoScalingRun();
    
    // Create new strategy with the values from the passed in strategy
    newstrategy := Strategy::Create( scenariomanager, strategy, name, displayindex, description,
                                     massscalingfactor, monetaryscalingfactor, timescalingfactor, timeaccountscalingfactor, inventoryholdingscalingfactor,
                                     lastautoscalingrun, isvisible );
    //update newstrategy with the remaining attributes from strategy
    newstrategy.Update( strategy.DefaultNumberOfPeriodsForAvgDemand(), 
                        strategy.DurationLotsizeHorizon(),
                        strategy.DurationInventoryMixBalancingCheck(),
                        strategy.NumberOfPeriodsInWindow(),
                        strategy.NumberOfPeriodsPerSlide(),
                        strategy.NumberOfPeriodsSmartPlan(),
                        strategy.UseSlidingWindowsApproach(), 
                        strategy.MetaOptimizerFirstLevelHasOverride(), 
                        strategy.MetaOptimizerFirstLevelOverride(), 
                        strategy.MetaOptimizerLastLevelHasOverride(), 
                        strategy.MetaOptimizerLastLevelOverride(), 
                        strategy.UseMetaOptimizer(), 
                        strategy.MetaOptimizerMaxNumberOfSecondsAllIterations(), 
                        strategy.MetaOptimizerMinimizeInvEndAfterLastLevel(),
                        strategy.MetaOptimizerRunFullPlanPriorToFocus(), 
                        strategy.UseCampaignSequenceOptimizer(), 
                        strategy.MaxNrOfElemementsCampaignOptimizerCombi(), 
                        strategy.UseHierarchicalSolver(), 
                        strategy.MetaOptimizerIsCollapseLevel(), 
                        strategy.MetaOptimizerCollapseLevelWeight(), 
                        strategy.UseShiftOptimization() );
                        
    // Update strategy level instances.
    newstrategylevel := newstrategy.FirstStrategyLevel();
    strategylevel := this.FirstStrategyLevel();
    
    // Check if strategy level exists, continue to loop if exists
    while( not isnull( newstrategylevel )
           and not isnull( strategylevel ) )
    {
      // Update new strategy's level with data from the passed in strategy's level
      newstrategylevel.Update( strategylevel.TimeLimit(),
                               strategylevel.UseAbsoluteGap(),
                               strategylevel.AbsoluteGap(),
                               strategylevel.RelativeGap(),
                               strategylevel.RelativeGoalSlack(),
                               strategylevel.SolverSettingGroupName(), 
                               strategylevel.UseHierarchicalSolverAbsTolerance(), 
                               strategylevel.UseHierarchicalSolverRelTolerance(), 
                               strategylevel.HierarchicalSolverAbsTolerance(), 
                               strategylevel.HierarchicalSolverRelTolerance() );
                               
      newstrategylevel.CopyMetaScalingInfo( strategylevel ); 
      
      // Set next strategy level to update
      strategylevel := strategylevel.Next();
      newstrategylevel := newstrategylevel.Next();
    }
    
    return newstrategy;
  *]
}