admin
2025-01-22 7e31442f0e9b07764e9c6a9680d3d4aeba5fe1de
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
Quintiq file version 2.0
#parent: #root
Method InitConstraintsForOneTimeCost (
  CapacityPlanningSuboptimizer_CapacityPlanningAlgorithm program,
  const RunContextForCapacityPlanning runcontext,
  const LibOpt_Scope scope
) const
{
  Description: 'Initialize defining constraints for isused variable if needed'
  TextBody:
  [*
    // constraint to define isused for (operation, period)
    
    if ( runcontext.UseOneTimeCost() ) 
    {
      traverse( scope.GetOperationInOptimizerRunConst(), Elements, operation, operation.HasOneTimeCost() )
      {
        periods := this.GetPeriodsForOperation( scope, operation );
        
        traverse( periods, Elements, period )
        {
          // add constraint: not isused -> PTQty <= 0 
          var := program.PTQtyVariables().Get( operation, period );
          isusedvar := program.PTIsUsedVariables().Get( operation, period ); 
          
          defconstr := program.PTIsUsedDefinitionConstraints().New( operation, period ); 
          defconstr.RHSValue( 0.0 ); 
          defconstr.Sense( '<=' ); 
          defconstr.NewTerm( 1.0, var ); 
          
          program.NewIfNotThenConstraint( CapacityPlanningSuboptimizer::ConstraintNameIsUsedVarDef( operation, period ), isusedvar, defconstr );  
        }
      }
    }
  *]
  InterfaceProperties { Accessibility: 'Module' }
}