Quintiq file version 2.0
|
#parent: #root
|
Method InitConstraintsGoalsForCampaigns (
|
CapacityPlanningSuboptimizer_CapacityPlanningAlgorithm program,
|
const LibOpt_Scope scope
|
) const
|
{
|
TextBody:
|
[*
|
totalcombislack_constname := typeof( MPTotalCampaignSequencingCombiSlackConstraint );
|
scalefactor_totalcombislackVariables_const := this.ScaleConstraintTerm( typeof( MPTotalCampaignSequencingCombiSlackVariable ), totalcombislack_constname );
|
scalefactor_underselectioncombiVariables_const := this.ScaleConstraintTerm( typeof( MPUnderSelectionOfCampaignCombiVariable ), totalcombislack_constname );
|
scalefactor_isselectedvar_const := this.ScaleConstraintTerm( typeof( MPIsCampaignCombiSelectedVariable ), totalcombislack_constname );
|
scalefactor_ptqtyslack := this.ScaleConstraintTerm( typeof( MPPTQtyInCampaignSlackVariable ), totalcombislack_constname );
|
scalefactor_incompatiblewithprevVariables_const := this.ScaleConstraintTerm( typeof( MPIsIncompatibleWithPrevOptSubUnitPeriodLastElementVariable ), totalcombislack_constname );
|
|
totalcampaign_constname := typeof( MPTotalCampaignConstraint );
|
scalefactor_totalcampaign_const := this.ScaleConstraintTerm( typeof( MPTotalCampaignVariable ), totalcampaign_constname );
|
scalefactor_totalcampaignutil_const := this.ScaleConstraintTerm( typeof( MPTotalUnitPeriodCampaignUtilizationSlackVariable ), totalcampaign_constname );
|
scalefactor_totalcampaignmaxqty_const := this.ScaleConstraintTerm( typeof( MPTotalCampaignMaxQtyOverVariable ), totalcampaign_constname );
|
scalefactor_totalcampaignminqty_const := this.ScaleConstraintTerm( typeof( MPTotalCampaignMinQtyUnderVariable ), totalcampaign_constname );
|
scalefactor_totalcampaignmindur_const := this.ScaleConstraintTerm( typeof( MPTotalCampaignMinDurationUnderVariable ), totalcampaign_constname );
|
scalefactor_totalcampaignmaxdur_const := this.ScaleConstraintTerm( typeof( MPTotalCampaignMaxDurationOverVariable ), totalcampaign_constname );
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
//Sum the penalties due to incompatible Campaigns/TransitionStages between 2 consecutive combi, and the penalties due to the under-selection for all combis.
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
totalcombislackctr := program.TotalCampaignSequencingCombiSlackConstraints().New();
|
totalcombislackctr.RHSValue( 0.0 );
|
totalcombislackctr.Sense( "=" );
|
vartotalcombislack := program.TotalCampaignSequencingCombiSlackVariables().Get();
|
totalcombislackctr.NewTerm( 1.0 * scalefactor_totalcombislackVariables_const, vartotalcombislack );
|
|
traverse( scope.GetUnitPeriodInOptimizerRunConst(), Elements.OptCampaignUnitSubPeriod, ocusp )
|
{
|
varunderselectioncombi := program.UnderSelectionOfCampaignCombiVariables().Get( ocusp );
|
totalcombislackctr.NewTerm( -1.0 * scalefactor_underselectioncombiVariables_const, varunderselectioncombi );
|
varincompatiblewithprev := program.IsIncompatibleWithPrevOptSubUnitPeriodLastElementVariables().Get( ocusp );
|
totalcombislackctr.NewTerm( -1.0 * scalefactor_incompatiblewithprevVariables_const, varincompatiblewithprev );
|
|
traverse( ocusp, OptCampaignCombiActive, combi, combi.NrSequenceViolationsInternal() > 0 )
|
{
|
varisselected := program.IsCampaignCombiSelectedVariables().Get( combi );
|
totalcombislackctr.NewTerm( -1.0 * combi.NrSequenceViolationsInternal() * scalefactor_isselectedvar_const, varisselected );
|
}
|
}
|
|
traverse( scope.GetOperationInOptimizerRunConst(), Elements, operation,
|
operation.OperationInCampaignType( relsize ) > 0
|
or operation.OperationInTransitionType( relsize ) > 0 )
|
{
|
// Only select those periods that are relevant for this operation for the optimizer run
|
periods := this.GetPeriodsForOperation( scope, operation );
|
|
traverse( periods, Elements, period,
|
period.GetIsInCampaignTypeHorizonUnit( operation.Unit() ) )
|
{
|
varslack := program.PTQtyInCampaignSlackVariables().Find( operation, period );
|
if ( not isnull( varslack ) )
|
{
|
totalcombislackctr.NewTerm( -1.0 * scalefactor_ptqtyslack, varslack );
|
}
|
}
|
}
|
|
this.InitConstraintsGoalsForCampaignLimitations( program, scope )
|
|
totalcampaignconst := program.TotalCampaignConstraints().New();
|
totalcampaignconst.RHSValue( 0.0 );
|
totalcampaignconst.NewTerm( -1.0 * scalefactor_totalcampaign_const, program.TotalCampaignVariables().Get() );
|
totalcampaignconst.NewTerm( CapacityPlanningSuboptimizer::OptCampaignUtilizationPenaltyWeight() * scalefactor_totalcampaignutil_const, program.TotalUnitPeriodCampaignUtilizationSlackVariables().Get() );
|
totalcampaignconst.NewTerm( CapacityPlanningSuboptimizer::OptCampaignMinMaxWeight() * scalefactor_totalcampaignmaxqty_const , program.TotalCampaignMaxQtyOverVariables().Get() );
|
totalcampaignconst.NewTerm( CapacityPlanningSuboptimizer::OptCampaignMinMaxWeight() * scalefactor_totalcampaignminqty_const, program.TotalCampaignMinQtyUnderVariables().Get() );
|
totalcampaignconst.NewTerm( CapacityPlanningSuboptimizer::OptCampaignMinMaxWeight() * scalefactor_totalcampaignmindur_const, program.TotalCampaignMinDurationUnderVariables().Get() );
|
totalcampaignconst.NewTerm( CapacityPlanningSuboptimizer::OptCampaignMinMaxWeight() * scalefactor_totalcampaignmaxdur_const, program.TotalCampaignMaxDurationOverVariables().Get() );
|
//totalcampaignconst.NewTerm( CapacityPlanningSuboptimizer::OptCampaignCombiSlackWeight() * scalefactor_totalcombislack_const , vartotalcombislack );
|
*]
|
}
|