16 LotSizingSolution solution,
20 ArgumentNullException.ThrowIfNull(context);
21 ArgumentNullException.ThrowIfNull(solution);
22 ArgumentNullException.ThrowIfNull(domainKey);
23 ArgumentNullException.ThrowIfNull(variableValue);
25 if (variableValue.
Value < 0.5)
return;
34 WorkCenterSchedulingDecision? schedule =
35 solution.WorkCenterSchedulingDecisions.SingleOrDefault(existing =>
36 existing.WorkCenter.PlantId == plantId &&
37 existing.WorkCenter.WorkCenterId == workCenterId);
41 schedule =
new WorkCenterSchedulingDecision(
42 new WorkCenterReference(plantId, workCenterId),
43 solution.PlanningHorizon);
44 solution.AddWorkCenterSchedulingDecision(schedule);
47 ProductionMicroPeriodDecision? decision =
48 schedule.MicroPeriods.SingleOrDefault(existing =>
49 existing.MicroPeriod.MacroPeriod == period &&
50 existing.MicroPeriod.MicroPeriodIndex == microPeriodIndex);
54 decision =
new ProductionMicroPeriodDecision(
55 new ProductionMicroPeriodReference(period, microPeriodIndex),
57 schedule.AddMicroPeriodDecision(decision);
59 else if (decision.SetupItemId != itemId)
61 throw new InvalidOperationException(
62 "Two active GLSP setup states were mapped to the same micro-period.");
65 string productionKey =
67 plantId, workCenterId, routingId, itemId, decision.MicroPeriod);
70 productionValue is not
null)
73 Math.Abs(productionValue.Value) <= context.Options.ZeroTolerance
75 : productionValue.Value;
79 decision.RoutingId = routingId;
80 decision.Quantity = quantity;