public static Problem Merge(Problem p1, Problem p2) { var newP = new Problem() { Depot = p1.Depot, VehicleCap = p1.VehicleCap, Abbr = p1.Abbr, Customers = new List<Customer>() }; foreach (var c in p1.Customers) newP.Customers.Add(c); foreach (var c in p2.Customers) newP.Customers.Add(c); newP.SetAllNodes(); return newP; }
public static List<Problem> Divide(Problem problem, List<int> frac=null) { if(frac == null) frac = DefaultFraction; var subproblems = new List<Problem>(frac.Count); var rnd = new Random(); var customers = new List<Customer>(problem.Customers); foreach (var count in frac) { var p = new Problem { Abbr = problem.Abbr, VehicleCap = problem.VehicleCap, Depot = problem.Depot, Customers = new List<Customer>(count) }; for(var i = 0; i < count; ++i) { var j = rnd.Next(0, customers.Count); p.Customers.Add(customers[j]); customers.RemoveAt(j); } p.SetAllNodes(); subproblems.Add(p); } return subproblems; }