public static void TryFixConnections(IJobShopLayer solution) { var moves = solution.GetMoves(true, false, false, false, false, false, false); for (int i = 0; i < moves.Length; i++) { Console.Write($"Fixing missed connection {i}..."); solution.ExecuteMove(moves[i]); Console.WriteLine($"\t(Cost={solution.GetTotalCost()})"); } }
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()); } }