Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method InitVariablesForTrip ( 
 | 
  CapacityPlanningSuboptimizer_CapacityPlanningAlgorithm program, 
 | 
  const constcontent ProductInTrips userproductintrips, 
 | 
  const LibOpt_Scope scope, 
 | 
  const constcontent ProductInTrips pitinrun 
 | 
) const 
 | 
{ 
 | 
  Description: 'Initialize all variables related to trip containig period task lane leg.' 
 | 
  TextBody: 
 | 
  [* 
 | 
    // create period task related variables 
 | 
     
 | 
    runcontext := this.GetRunContextConst();  
 | 
    // Init variables for all demand and supply of trips for each product 
 | 
    traverse( pitinrun, Elements, productintrip ) 
 | 
    { 
 | 
      // TripDemandQty variable UoM: Input PISP 
 | 
      program.TripDemandQtyVariables().New( productintrip );        // Fulfilled demand quantity for product in trip 
 | 
      // TripNewSupply variable UoM: Output PISP 
 | 
      var := program.TripNewSupplyVariables().New( productintrip ); // The supply quantity for product in trip 
 | 
     
 | 
      // Feedback as lowerbound 
 | 
      if( productintrip.HasFeedback() ) 
 | 
      { 
 | 
        lowerbound := sum( productintrip, FeedbackProductInTrip, feedback, 
 | 
                           feedback.GetIsValidFeedback() and feedback.UnitPeriod() = productintrip.Trip().ArrivalUnitPeriod(), 
 | 
                           feedback.FeedbackQuantity() ); 
 | 
     
 | 
        if ( lowerbound > 0 )  
 | 
        { 
 | 
          this.FreezeVariableLowerBound( var, lowerbound ); 
 | 
        } 
 | 
      } 
 | 
    } 
 | 
     
 | 
    // Init variables for lot sizes and lot cost 
 | 
    if( runcontext.UseLotSize() or runcontext.UseLotCost() ) //Modified by Khor for Lot cost goal 
 | 
    { 
 | 
      traverse( scope.GetTripInOptimizerRun(), Elements, trip,  
 | 
                trip.DepartureUnitPeriod().Period_MP().IsWithinLotSizeHorizon() ) 
 | 
      { 
 | 
        unitperiod := trip.DepartureUnitPeriod(); 
 | 
       
 | 
        // Lot size of trip on departure period 
 | 
        if( guard( unitperiod.HasLotSize(), false ) ) 
 | 
        { 
 | 
          // TripNrOfLots variable UoM: Number 
 | 
          tripnroflotsvar := program.TripNrOfLotsVariables().New( trip ); // Create integer variable 
 | 
     
 | 
          // If this is a sliding windows run and the period is not in the sliding window, then relax the integer variable 
 | 
          if( runcontext.IsSlidingWindowsRun() 
 | 
              and not guard( unitperiod.Period_MP().GetIsInSlidingWindow( scope ), false ) ) 
 | 
          { 
 | 
            tripnroflotsvar.VariableType( 'Continuous' ); 
 | 
          } 
 | 
           
 | 
          // TripLotSizeUnder variable UoM: Unit 
 | 
          varunder := program.TripLotSizeUnderVariables().New( trip );      // Additional quantity required to reach the multiples of lot size 
 | 
          varover := program.TripLotSizeOverVariables().New( trip );      // Subtractive quantity required to reach the multiples of lot size 
 | 
          this.FreezeVariableUpperBound( varunder, trip.LotSize() );  
 | 
          this.FreezeVariableUpperBound( varover, trip.LotSize() ); 
 | 
        } 
 | 
      } 
 | 
    } 
 | 
     
 | 
    // Freeze the user planning product in trip 
 | 
    // User quantity must be adhered by the optimizer. Optimizer cannot change the transported quantity. 
 | 
    traverse( userproductintrips, Elements, productintrip ) 
 | 
    { 
 | 
      pitvar := program.TripNewSupplyVariables().Find( productintrip );  
 | 
      if ( not isnull( pitvar ) )  
 | 
      { 
 | 
        this.FixVariableStyleGuide( pitvar, productintrip.Quantity() ); 
 | 
      } 
 | 
    } 
 | 
  *] 
 | 
  InterfaceProperties { Accessibility: 'Module' } 
 | 
} 
 |