private List <RouteSet> BuildSolutionPool <TProcedure, TParameters>(double overloadFactor, int shakings, Exploration expCondition, Random rdObj, List <Func <RouteSet, Exploration, Random, RouteSet> > neighborhoods, List <Func <RouteSet, Random, RouteSet> > shakingProcedures, TProcedure procedure, TParameters parameters, List <RouteSet> initialPool) where TProcedure : LocalSearchProcedure <RouteSet, TParameters> { List <RouteSet> solutionPool = new List <RouteSet>(); foreach (var solution in initialPool) { overloadFactor = 0; RouteSet current = solution; for (int i = 0; i < shakings; i++) { current = shakingProcedures[rdObj.Next(shakingProcedures.Count)](current, rdObj); current = procedure.Solve(parameters, current, neighborhoods, expCondition, GetCost, rdObj); var clone = (RouteSet)current.Clone(); clone.CleanUnusedRoutes(); solutionPool.Add(clone); if (!ProblemData.IsStrongFeasible(current)) { OverloadFactor += overloadFactor; } } } return(solutionPool); }