Quintiq file version 2.0
|
#parent: #root
|
Method CapacityPlanningAlgorithmInitConstraints_ParallelTypeA (
|
CapacityPlanningSuboptimizer_CapacityPlanningAlgorithm program,
|
const constcontent ProductInStockingPointInPeriodPlannings pispipssmartplan,
|
const constcontent PeriodTaskOperations userperiodtasks,
|
const LibOpt_Task task,
|
const constcontent ProductInStockingPointInPeriodPlannings pispipsinrun,
|
constcontent ProductInStockingPointInPeriodPlanningLeafs leafpispipsinrun,
|
const constcontent ProductInStockingPoint_MPs pispsinrun,
|
const constcontent ProductInTrips pitinrun
|
) const
|
{
|
TextBody:
|
[*
|
runcontext := this.GetRunContextConst();
|
runcontextmeta := this.GetRunContextMeta();
|
start := OS::PrecisionCounter();
|
scope := task.Scope();
|
|
this.SetPTVarProperties( program, userperiodtasks, scope ) // set bounds for PTQty vars but also BigM constraint in case of process min qty
|
|
// >> constraints here need the existing plan prior to resetting the manual quantities
|
this.InitConstraintsForInventoryCarriedForward( program, this.Setting_Applyusersupplycorrection_CarriedFWDInventory(), scope, pispipsinrun ); // needs inventory levels past the optimizer scope so future demand is not broken
|
this.AdditionalConstraintMaxInventory( program, scope, runcontext, runcontextmeta ); // same remark as above
|
// <<
|
|
// The following methods create the constraints
|
// The optimizer solution design document explains how to consider scaling
|
// and unit of measurement when modifying constraints or creating new constraints
|
thread := 0;
|
this.InitConstraintsForOperationDependentDemands( program, runcontext, scope, thread );
|
this.InitConstraintsForOperationDependentDemandInputGroup( program, runcontext, scope );
|
this.InitConstraintsForOperationDependentDemandInputSet( program, runcontext, scope );
|
this.InitConstraintsForOperationDependentDemandInPeriod( program, runcontext, scope );
|
this.InitConstraintsForTripDependentDemands( program, scope, pitinrun, thread );
|
// type C this.InitConstraintsForUnitPeriods( program, runcontext, scope );
|
|
//Depending on the EnableCampaingSequncingOptimizer in Global params either the manual sequenced campaign optimizer will run or the new campain seuqencing optimizer will run
|
this.InitConstraintsForCampaignsManualSequenced( program, runcontext, scope );
|
this.InitConstraintsForCampaignSequencing( program, runcontext, scope );
|
|
this.InitConstraintsForPISPIPs_TYPEA( program, pispipssmartplan, runcontext, scope, leafpispipsinrun, pispipsinrun, pispsinrun, pitinrun );
|
// type B this.InitConstraintsForStockingPointInPeriods( program, runcontext, scope );
|
|
this.InitConstraintsForServiceLevel( program, runcontext, scope, leafpispipsinrun ); // only one of these
|
|
this.InitConstraintsForLotSizes( program, runcontext, scope );
|
this.InitConstraintsForSupplySpecifications( program, runcontext, scope );
|
this.InitConstraintsForBlending( program, runcontext, scope );
|
this.InitConstraintsForOneTimeCost( program, runcontext, scope );
|
|
this.InitConstraintsForShiftPatterns( program, runcontext, scope );
|
|
this.InitializeAdditionalMeta( program, runcontextmeta, scope, runcontext.IsMetaIteration() )
|
|
this.InitConstraintsForGoals_TypeA( program, runcontext, scope, pispipsinrun, leafpispipsinrun, pispsinrun, pitinrun ); // keep last for meta because we obtained values from existing plan
|
|
this.FilterCPLEXNoiseInitialization( program, runcontext )
|
|
end := OS::PrecisionCounter();
|
durationtypea := (end - start) / OS::PrecisionCounterFrequency();
|
program.StoreReal( 'type_A_constraints', durationtypea );
|
*]
|
InterfaceProperties { Accessibility: 'Module' }
|
}
|