Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
10/12/11 15:45:48 (13 years ago)
Author:
svonolfe
Message:

Fixed more isses that occured in dynamic instances (#1177)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Moves/PickupDelivery/PDShift/PotvinPDShiftSingleMoveGenerator.cs

    r6851 r6909  
    6262      IPickupAndDeliveryProblemInstance pdp = problemInstance as IPickupAndDeliveryProblemInstance;
    6363      for (int i = 1; i <= individual.Cities; i++) {
    64         if(pdp == null || pdp.GetDemand(i) >= 0)
     64        if (pdp == null || pdp.GetDemand(i) >= 0)
    6565          cities.Add(i);
    6666      }
    6767
    68       int city = cities[rand.Next(cities.Count)];
    69       Tour oldTour = individual.Tours.Find(t => t.Stops.Contains(city));
    70       int oldTourIndex = individual.Tours.IndexOf(oldTour);
     68      if (cities.Count > 1 && individual.Tours.Count > 1) {
     69        int city = cities[rand.Next(cities.Count)];
     70        Tour oldTour = individual.Tours.Find(t => t.Stops.Contains(city));
     71        int oldTourIndex = individual.Tours.IndexOf(oldTour);
    7172
    72       int max = individual.Tours.Count;
    73       if (individual.Tours.Count < problemInstance.Vehicles.Value)
    74         max = max - 1;
     73        int max = individual.Tours.Count;
     74        if (individual.Tours.Count < problemInstance.Vehicles.Value)
     75          max = max - 1;
    7576
    76       int newTourIndex = rand.Next(max);
    77       if (newTourIndex >= oldTourIndex)
    78         newTourIndex++;
     77        int newTourIndex = rand.Next(max);
     78        if (newTourIndex >= oldTourIndex)
     79          newTourIndex++;
    7980
    80       return new PotvinPDShiftMove(city, oldTourIndex, newTourIndex, individual);
     81        return new PotvinPDShiftMove(city, oldTourIndex, newTourIndex, individual);
     82      } else {
     83        return null;
     84      }             
    8185    }
    8286
Note: See TracChangeset for help on using the changeset viewer.