Quintiq file version 2.0
|
#parent: #root
|
Method CompleteForSmallPuzzle (
|
LibOpt_Task task,
|
RunContextForCapacityPlanning runcontext,
|
LibOpt_Scope outscope
|
)
|
{
|
TextBody:
|
[*
|
threshold_when_to_complete := 0.75; // at 95% of all pit or pto's we just add the rest
|
macroplan := this.Optimization().astype( Optimization ).MacroPlan();
|
|
nrpispipsinscope := outscope.GetPISPIPInOptimizerRun().Size();
|
if ( nrpispipsinscope = runcontext.NumberOfPISPIPPlanningGlobal() )
|
{
|
pto := outscope.GetPeriodTaskOperationInOptimizerRun();
|
nrptoglobal := sum( macroplan, Unit.Operation, op, true, op.PeriodTaskOperation( relsize ) );
|
if ( pto.Size() < nrptoglobal and pto.Size() >= threshold_when_to_complete * nrptoglobal )
|
{
|
debuginfo( 'Completing operation for small puzzle. Adding # period task:', nrptoglobal - pto.Size() );
|
traverse( macroplan, Unit, unit, unit.IsInOptimizerPuzzle() )
|
{
|
traverse( unit, Operation.PeriodTaskOperation, periodtaskop, periodtaskop.UnitPeriod().Period_MP().IsInOptimizerPuzzle() and
|
PeriodTaskOperation::GetIsValidPeriodTask( periodtaskop.Operation(), periodtaskop.UnitPeriod().Period_MP() ) )
|
{
|
outscope.Add( periodtaskop );
|
}
|
}
|
}
|
|
pit := outscope.GetProductInTripInOptimizerRun();
|
nrpitglobal := sum( macroplan, Unit.Lane.LaneLeg.Trip, trip, trip.GetIsValidNonFrozenTrip(), trip.ProductInTrip( relsize ) );
|
if ( pit.Size() < nrpitglobal and pit.Size() >= threshold_when_to_complete * nrpitglobal )
|
{
|
debuginfo( 'Completing product in trips for small puzzle. Adding # pit:', nrpitglobal - pit.Size() );
|
traverse( macroplan, Unit, unit, unit.IsInOptimizerPuzzle() )
|
{
|
departurecutoff := maxvalue( unit.EndOfFrozen(), runcontext.FirstPeriod_MP().Start() );
|
traverse( unit,
|
Lane.LaneLeg.Trip.ProductInTrip,
|
prodintrip,
|
prodintrip.Trip().GetIsValidNonFrozenTrip()
|
and prodintrip.IsInOptimizerPuzzle()
|
and prodintrip.Trip().Departure() >= departurecutoff )
|
{
|
outscope.Add( prodintrip );
|
}
|
}
|
}
|
}
|
*]
|
InterfaceProperties { Accessibility: 'Module' }
|
}
|