Exemplo n.º 1
0
        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());
            }
        }