Quintiq file version 2.0
|
#parent: #root
|
Method ZeroCapacityReplenishment (
|
MacroPlan macroPlan,
|
Real timeDifference,
|
UnitPeriodTimeBase uptb,
|
UnitPeriodTimeBases uptbs
|
)
|
{
|
TextBody:
|
[*
|
debuginfo( "需要补零的时间(单位:小时)", timeDifference, " 需要补零的产能周期的开始时间:", uptb.StartDate().Format( "Y-M2-D2" ) );
|
|
//debuginfo( "考虑库存、lotsize" );
|
//traverse ( unitPeriodTimeBase, PeriodTaskOperation, pto, timeDifference > 0 ) {
|
// minimumQuantityThatCanBeBorrowed := Real::MaxReal();
|
// minimumCapacityThatCanBeBorrowed := Real::MaxReal();
|
// traverse ( pto, NewSupply, ns, true ) {
|
// targetBorrowSplitShiftLotsizeLimit := select( scenarioManager, SplitShiftLotsizeLimit, tempSSLL, tempSSLL.unitID() = unitPeriodTimeBase.UnitID() and
|
// tempSSLL.productID() = ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().ProductID() and
|
// tempSSLL.startTime() <= ns.Start().Date() and
|
// tempSSLL.endTime() >= ns.End().Date() );
|
// minimumQuantityThatCanBeBorrowed := minvalue(
|
// minvalue( ifexpr( not isnull( targetBorrowSplitShiftLotsizeLimit ) and targetBorrowSplitShiftLotsizeLimit.lotsize() < ns.Quantity(),
|
// ns.Quantity() - targetBorrowSplitShiftLotsizeLimit.lotsize(),
|
// Real::MaxReal() ),
|
// minvalue(
|
// ifexpr( ( ns.ProductInStockingPointInPeriodPlanningLeaf().InventoryLevelEnd() - ns.ProductInStockingPointInPeriodPlanningLeaf().MinInventoryLevel() ) > 0,
|
// ns.ProductInStockingPointInPeriodPlanningLeaf().InventoryLevelEnd() - ns.ProductInStockingPointInPeriodPlanningLeaf().MinInventoryLevel(),
|
// 0.0
|
// ),
|
// ns.Quantity()
|
// )
|
// ),
|
// minimumQuantityThatCanBeBorrowed
|
// );
|
// }
|
// minimumCapacityThatCanBeBorrowed := minimumQuantityThatCanBeBorrowed / pto.Operation().Throughput();
|
// nextUnitPeriodTimeBase := ifexpr( isnull( unitPeriodTimeBase.Next().astype( UnitPeriodTimeBase ) ), select( unitPeriodTimeBases, Elements, tempUPTB, tempUPTB.Start() = unitPeriodTimeBase.End() ), unitPeriodTimeBase.Next().astype( UnitPeriodTimeBase ) );
|
// while ( timeDifference > 0 and not isnull( nextUnitPeriodTimeBase ) and minimumCapacityThatCanBeBorrowed > 0 ) {
|
// acceptableCapacity := ifexpr( ( nextUnitPeriodTimeBase.TotalAvailableCapacity().HoursAsReal() - nextUnitPeriodTimeBase.UsedCapacity().HoursAsReal() ) > 0,
|
// nextUnitPeriodTimeBase.TotalAvailableCapacity().HoursAsReal() - nextUnitPeriodTimeBase.UsedCapacity().HoursAsReal(),
|
// 0.0 );
|
// unifiedProcessingTimeOfComplementZero := minvalue( timeDifference, minimumCapacityThatCanBeBorrowed, acceptableCapacity );
|
// debuginfo( "接纳的周期时间:", nextUnitPeriodTimeBase.StartDate().Format( "Y-M2-D2" ), String::Tab(),
|
// "接纳的周期能接受的产能:", acceptableCapacity, String::Tab(),
|
// "剩余补零的产能:", timeDifference, String::Tab(),
|
// "统一转移的产能:", unifiedProcessingTimeOfComplementZero, String::Tab()
|
// );
|
// this.A_unifiedProcessingOfComplementZeroLogic( unifiedProcessingTimeOfComplementZero, pto, nextUnitPeriodTimeBase, macroPlan );
|
// minimumCapacityThatCanBeBorrowed := minimumCapacityThatCanBeBorrowed - unifiedProcessingTimeOfComplementZero;
|
// timeDifference := timeDifference - unifiedProcessingTimeOfComplementZero;
|
// if ( isnull( nextUnitPeriodTimeBase.Next() ) ) {
|
// nextUnitPeriodTimeBase := select( unitPeriodTimeBases, Elements, tempUPTB, tempUPTB.Start() = nextUnitPeriodTimeBase.End() );
|
// } else {
|
// nextUnitPeriodTimeBase := nextUnitPeriodTimeBase.Next().astype( UnitPeriodTimeBase );
|
// }
|
// }
|
//}
|
|
debuginfo( "不考虑库存、lotsize使其达到整班" );
|
traverse ( uptb, PeriodTaskOperation, pto, timeDifference > 0 ) {
|
minimumQuantityThatCanBeBorrowed := Real::MaxReal();
|
minimumCapacityThatCanBeBorrowed := Real::MaxReal();
|
traverse ( pto, NewSupply, ns, true ) {
|
minimumQuantityThatCanBeBorrowed := minvalue(
|
minvalue(
|
ifexpr( ( ns.ProductInStockingPointInPeriodPlanningLeaf().InventoryLevelEnd() - ns.ProductInStockingPointInPeriodPlanningLeaf().MinInventoryLevel() ) > 0,
|
ns.ProductInStockingPointInPeriodPlanningLeaf().InventoryLevelEnd() - ns.ProductInStockingPointInPeriodPlanningLeaf().MinInventoryLevel(),
|
0.0
|
),
|
ns.Quantity()
|
),
|
minimumQuantityThatCanBeBorrowed
|
);
|
}
|
minimumCapacityThatCanBeBorrowed := minimumQuantityThatCanBeBorrowed / pto.Operation().Throughput();
|
nextUnitPeriodTimeBase := ifexpr( isnull( uptb.Next().astype( UnitPeriodTimeBase ) ), select( uptbs, Elements, tempUPTB, tempUPTB.Start() = uptb.End() ), uptb.Next().astype( UnitPeriodTimeBase ) );
|
while ( timeDifference > 0 and not isnull( nextUnitPeriodTimeBase ) and minimumCapacityThatCanBeBorrowed > 0 ) {
|
acceptableCapacity := /*ifexpr( ( nextUnitPeriodTimeBase.TotalAvailableCapacity().HoursAsReal() - nextUnitPeriodTimeBase.UsedCapacity().HoursAsReal() ) > 0,
|
nextUnitPeriodTimeBase.TotalAvailableCapacity().HoursAsReal() - nextUnitPeriodTimeBase.UsedCapacity().HoursAsReal(),
|
0.0 )*/
|
ifexpr( nextUnitPeriodTimeBase.FreeCapacity().HoursAsReal() > 0,
|
nextUnitPeriodTimeBase.FreeCapacity().HoursAsReal(),
|
0.0 );
|
unifiedProcessingTimeOfComplementZero := minvalue( timeDifference, minimumCapacityThatCanBeBorrowed, acceptableCapacity );
|
debuginfo( "接纳的周期时间:", nextUnitPeriodTimeBase.StartDate().Format( "Y-M2-D2" ), String::Tab(),
|
"接纳的周期能接受的产能:", acceptableCapacity, String::Tab(),
|
"剩余补零的产能:", timeDifference, String::Tab(),
|
"统一转移的产能:", unifiedProcessingTimeOfComplementZero, String::Tab()
|
);
|
if ( unifiedProcessingTimeOfComplementZero > 0.0 ) {
|
this.UnifiedProcessingOfComplementZeroLogic( unifiedProcessingTimeOfComplementZero, pto, nextUnitPeriodTimeBase, macroPlan );
|
}
|
minimumCapacityThatCanBeBorrowed := minimumCapacityThatCanBeBorrowed - unifiedProcessingTimeOfComplementZero;
|
timeDifference := timeDifference - unifiedProcessingTimeOfComplementZero;
|
if ( isnull( nextUnitPeriodTimeBase.Next() ) ) {
|
nextUnitPeriodTimeBase := select( uptbs, Elements, tempUPTB, tempUPTB.Start() = nextUnitPeriodTimeBase.End() );
|
} else {
|
nextUnitPeriodTimeBase := nextUnitPeriodTimeBase.Next().astype( UnitPeriodTimeBase );
|
}
|
}
|
}
|
*]
|
}
|