Esempio n. 1
0
        public void AddOrder(Order order)
        {
            if (order.OrderNumber == 0)
                return;

            int LastMatrixID = 287;
            int NewMatrixID = order.MatrixID;
            int PreviousMatrixID = Orders.Count == 1 ? LastMatrixID : Orders[Orders.Count - 2].MatrixID;

            double OldTravelTime = TravelTime;

            TravelTime -= Data.DistanceMatrix[PreviousMatrixID, LastMatrixID].TravelTime;
            TravelTime += Data.DistanceMatrix[PreviousMatrixID, NewMatrixID].TravelTime;
            TravelTime += Data.DistanceMatrix[NewMatrixID, LastMatrixID].TravelTime;

            TravelTime += order.EmptyingTimeInSeconds;
            Weight += order.VolumePerContainer * order.NumberOfContainers;
            Orders.Insert(Orders.Count - 1, order);
            order.AddOrderOccurrence(this);
            if (partOfSolution != null)
            {
                partOfSolution.TravelTimeScore -= OldTravelTime - TravelTime;
                partOfSolution.AddPlannedOccurrence(order.OrderNumber, this);
            }
        }
Esempio n. 2
0
        public void AddOrderAt(Order newOrder, Order orderToInsertAfter)
        {
            if (newOrder.OrderNumber == 0 || orderToInsertAfter.OrderNumber == 0)
                return;

            int IndexOfOrderToInsertAfter = Orders.FindIndex(o => o.OrderNumber == orderToInsertAfter.OrderNumber);

            if (IndexOfOrderToInsertAfter == -1)
                return;

            if (IndexOfOrderToInsertAfter >= Orders.Count - 2)
            {
                AddOrder(newOrder);
                return;
            }

            int NextMatrixID = Orders[IndexOfOrderToInsertAfter + 1].MatrixID;
            int NewMatrixID = newOrder.MatrixID;
            int PreviousMatrixID = orderToInsertAfter.MatrixID;

            double OldTravelTime = TravelTime;

            TravelTime -= Data.DistanceMatrix[PreviousMatrixID, NextMatrixID].TravelTime;
            TravelTime += Data.DistanceMatrix[PreviousMatrixID, NewMatrixID].TravelTime;
            TravelTime += Data.DistanceMatrix[NewMatrixID, NextMatrixID].TravelTime;

            TravelTime += newOrder.EmptyingTimeInSeconds;
            Weight += newOrder.VolumePerContainer * newOrder.NumberOfContainers;
            Orders.Insert(IndexOfOrderToInsertAfter + 1, newOrder);
            newOrder.AddOrderOccurrence(this);
            if (partOfSolution != null)
            {
                partOfSolution.TravelTimeScore -= OldTravelTime - TravelTime;
                partOfSolution.AddPlannedOccurrence(newOrder.OrderNumber, this);
            }
        }