private static SearchMove[] GetMoves(IJobShopLayer origin, ITabooList tabooList, Random random) { if (origin.GetConnectionsCost() > .5 * origin.GetTotalCost()) { return(origin.GetMoves( connectionFix: true, connectionImprovement: true, criticalArcsBased: tabooList.Any(), routeSwapBased: false, routeSwapWithHeuristicInsertion: false, //true, //!tabooList.Any(), jobReinsertion: false, routePenaltyImprovement: false) .Shuffle(random) .Select(m => new SearchMove(m)) .ToArray()); } if (origin.GetDelayCost() > origin.GetRoutingCost()) { bool changeRoute = !tabooList.Any() || random.NextDouble() < .3; return(origin .GetMoves( connectionFix: true, connectionImprovement: true, criticalArcsBased: true, routeSwapBased: changeRoute, routeSwapWithHeuristicInsertion: changeRoute, //true, //!tabooList.Any(), jobReinsertion: changeRoute, routePenaltyImprovement: false) .Shuffle(random) .Select(m => new SearchMove(m)) .ToArray()); } else { return(origin .GetMoves(false, false, false, false, false, false, routePenaltyImprovement: true) .Shuffle(random).Select(m => new SearchMove(m)).ToArray()); } }