Quintiq file version 2.0
|
#parent: #root
|
MethodOverride AddTermsForCapacityUsage (
|
CapacityPlanningSuboptimizer_CapacityPlanningAlgorithm program,
|
MPConstraint minconst,
|
MPConstraint maxconst,
|
const LibOpt_Scope scope,
|
const CapacityPlanningSuboptimizer subopt,
|
const UnitPeriod unitperiodforconstraint,
|
Real scalefactor_periodtaskqty_minconst,
|
Real scalefactor_periodtaskqty_maxconst,
|
Real scalefactor_tripnewsupply_minconst,
|
Real scalefactor_tripnewsupply_maxconst,
|
output Real bound
|
) const
|
{
|
TextBody:
|
[*
|
traverse( this, PeriodTask_MP.astype( PeriodTaskLaneLeg ), ptll,
|
scope.Contains( ptll.Trip().TripInOptimizerRun() ) ) // Only if the trip is part of this optimizer run
|
{
|
traverse( ptll, Trip.ProductInTrip, productintrip,
|
scope.Contains( productintrip.ProductInTripInOptimizerRun() ) ) // Only if the productintrip is part of this optimizer run
|
{
|
uomconversion := productintrip.UnitConversionFactor();
|
factor := ptll.Process_MP().GetCapacityUsagePerQuantity( unitperiodforconstraint );
|
|
var := program.TripNewSupplyVariables().Get( productintrip );
|
|
// Term: uomconversion * factor * TripNewSupply variable
|
// UoM: [Output PISP to Unit] * [Time / Unit] * [Output PISP]
|
maxconst.NewTerm( uomconversion * factor * scalefactor_tripnewsupply_maxconst, var );
|
minconst.NewTerm( uomconversion * factor * scalefactor_tripnewsupply_minconst, var );
|
|
bound := bound + factor * var.LowerBound();
|
}
|
}
|
|
traverse( this, ChildOfUnitDimension, childunitperiod )
|
{
|
childunitperiod.AddTermsForCapacityUsage( program,
|
minconst,
|
maxconst,
|
scope,
|
subopt,
|
unitperiodforconstraint,
|
scalefactor_periodtaskqty_minconst,
|
scalefactor_periodtaskqty_maxconst,
|
scalefactor_tripnewsupply_minconst,
|
scalefactor_tripnewsupply_maxconst,
|
bound );
|
}
|
*]
|
}
|