private void AddNext(PowerplantInfo info) { int pNeeded = _powerRequest.load - totalP; int p; if (pNeeded >= info.pmax) { p = info.pmax; } else if (info.pmin > pNeeded) { p = info.pmin; ReducePreviousP(p - pNeeded); } else { p = pNeeded; } unused.Remove(info); used.Add(info); ps.Add(p); CalculateTotalPAndCost(); done = totalP == _powerRequest.load; }
private void ReducePreviousP(int toReduce) { for (int i = used.Count - 1; i >= 0; --i) { PowerplantInfo info = used[i]; ps[i] -= toReduce; if (ps[i] < info.pmin) { int diff = info.pmin - ps[i]; toReduce = diff; ps[i] = info.pmin; } else { break; } } }