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;
        }