public static ObjectValuePair PickItemWeightedReturnPair(List <ObjectValuePair> pairs) { // Compute total value. double s = 0; foreach (ObjectValuePair p in pairs) { if (p.value < 0) { throw new ArgumentOutOfRangeException("Weights must be nonnegative in PickItemWeightedReturnPair. weight = " + p.value.ToString()); } s += p.value; } ObjectValuePair picked = new ObjectValuePair(); double r = Utilities.rand.NextDouble() * s; double current = 0; foreach (ObjectValuePair p in pairs) { current += p.value; if (r < current + 0.00000001) { picked = p; break; } } return(picked); }
public static ObjectValuePair PickLargestItemReturnPair(List <ObjectValuePair> pairs) { double max = double.NegativeInfinity; ObjectValuePair argMax = new ObjectValuePair(); foreach (ObjectValuePair p in pairs) { if (p.value > max) { max = p.value; argMax = p; } } return(argMax); }