public SolutionResult Solve(Facility[] facilities, Customer[] customers) { var result = new SolutionResult(customers); var fIndex = 0; var remainingCapacity = facilities[fIndex].Capacity; var facility = facilities[fIndex]; // trivially just add while they fit foreach (var customer in customers) { while (customer.Demand > remainingCapacity) { facility = facilities[++fIndex]; remainingCapacity = facility.Capacity; } result.Map(customer, facility); remainingCapacity -= customer.Demand; } return result; }
/// <summary> /// Clones this instance. /// </summary> /// <returns>SolutionResult.</returns> public SolutionResult Clone() { // make a new result var result = new SolutionResult(customers); // add the mappings that exist in this instance to the other foreach (var x in facilityToCustomers) foreach (var y in x.Value) result.Map(y, x.Key); return result; }