| Quintiq file version 2.0 | 
| #parent: #root | 
| Method InitConstraintsForTripDependentDemands ( | 
|   CapacityPlanningSuboptimizer_CapacityPlanningAlgorithm program, | 
|   const LibOpt_Scope scope, | 
|   const constcontent ProductInTrips pitinrun, | 
|   Number threadnr | 
| ) const | 
| { | 
|   Description: 'Initialize constraints for dependent demands for trips' | 
|   TextBody: | 
|   [* | 
|     // for each product in trip: | 
|     // dependent demand quantity = input factor * relative duration (should be always 1) * new supply quantity | 
|     constddqtyname := typeof( MPTripDependentDemandQtyConstraint ); | 
|      | 
|     scalefactor_tripdemandqty_constddqty := this.ScaleConstraintTerm( typeof( MPTripDemandQtyVariable ), constddqtyname ); | 
|     scalefactor_tripnewsupply_constddqty := this.ScaleConstraintTerm( typeof( MPTripNewSupplyVariable ), constddqtyname ); | 
|      | 
|     scalefactor_rhs_constddqty := this.ScaleConstraintRHS( constddqtyname, 1.0 ); | 
|      | 
|     traverse( pitinrun,  | 
|               Elements,  | 
|               productintrip,  | 
|               CapacityPlanningSuboptimizer::GetThreadNr( this.ThreadAParameter(), this.ThreadBParameter(), productintrip.PreThreadNr() ) = threadnr ) | 
|     { | 
|       // constddqty constraint UoM: Input PISP | 
|       constddqty := program.TripDependentDemandQtyConstraints().New( productintrip ); | 
|       constddqty.Sense( '=' ); | 
|       constddqty.RHSValue( 0.0 * scalefactor_rhs_constddqty ); | 
|      | 
|       factor := 1.0; | 
|       dd := productintrip.DependentDemand(); | 
|      | 
|       if( not isnull( dd ) ) | 
|       { | 
|         factor := guard( dd.ProcessInput().Factor(), 1 )  // can be changed to be > 1 or < 1. By default is 1 | 
|                   * dd.RelativeDuration(); | 
|       } | 
|       else | 
|       { | 
|         laneleginput := select( productintrip, Trip.LaneLeg.LaneLegInput, input, | 
|                                input.ProductInStockingPoint_MP().Product_MP() = productintrip.Product_MP() ); | 
|      | 
|         if( not isnull( laneleginput ) ) | 
|         { | 
|           factor := laneleginput.Factor(); | 
|         } | 
|       } | 
|      | 
|       // Term: [Input PISP] | 
|       constddqty.NewTerm( -scalefactor_tripdemandqty_constddqty, program.TripDemandQtyVariables().Get( productintrip ) ); | 
|      | 
|       uomconversion := productintrip.DeparturePISPConversionFactor(); | 
|      | 
|       // Term:     uomconversion        *  factor  * TripNewSupply variable | 
|       // UoM:  [Output PISP to Input PISP]  *   [-]    *     [Output PISP] | 
|       constddqty.NewTerm( uomconversion * factor * scalefactor_tripnewsupply_constddqty, program.TripNewSupplyVariables().Get( productintrip ) ); | 
|     } | 
|   *] | 
|   InterfaceProperties { Accessibility: 'Module' } | 
| } |