39 ReadOnlySpan<double> demands,
40 ReadOnlySpan<double> setupCosts,
41 ReadOnlySpan<double> unitProductionCosts,
42 ReadOnlySpan<double> holdingCosts)
50 _demands = demands.ToArray();
51 _setupCosts = setupCosts.ToArray();
52 _unitProductionCosts = unitProductionCosts.ToArray();
53 _holdingCosts = holdingCosts.ToArray();
55 var totalDemand = 0.0;
56 var noSpeculativeMotive =
true;
58 for (var period = 0; period < _demands.Length; period++)
60 totalDemand += _demands[period];
62 if (period < _demands.Length - 1)
64 var deliveredNextPeriod =
65 _unitProductionCosts[period] + _holdingCosts[period];
67 if (!
double.IsFinite(deliveredNextPeriod) ||
68 deliveredNextPeriod < _unitProductionCosts[period + 1])
70 noSpeculativeMotive =
false;