Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
03/29/11 15:40:01 (13 years ago)
Author:
svonolfe
Message:

Merged changes from trunk into branch (#1177)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/Manipulators/PotvinTwoLevelExchangeManipulator.cs

    r4752 r5867  
    4444      : base(original, cloner) {
    4545    }
    46    
     46
    4747    protected override void Manipulate(IRandom random, PotvinEncoding individual) {
    4848      int selectedIndex = SelectRandomTourBiasedByLength(random, individual);
    49       Tour route1 =
    50         individual.Tours[selectedIndex];
     49      Tour route1 = individual.Tours[selectedIndex];
    5150
    52       for (int customer1Position = 0; customer1Position < route1.Stops.Count; customer1Position++) {
     51      bool performed = false;
     52      int customer1Position = 0;
     53      while (customer1Position < route1.Stops.Count) {
     54        performed = false;
     55
    5356        foreach (Tour tour in individual.Tours) {
    5457          if (tour != route1) {
     
    6063              tour.Stops[customer2Position] = customer1;
    6164              if (ProblemInstance.Feasible(tour)) {
    62                 int route, place;
     65                int routeIdx, place;
    6366                if (FindInsertionPlace(individual,
    64                   customer2, selectedIndex, out route, out place)) {
    65                     individual.Tours[route].Stops.Insert(place, customer2);
    66                     route1.Stops.RemoveAt(customer1Position);
     67                  customer2, selectedIndex, out routeIdx, out place)) {
     68                  individual.Tours[routeIdx].Stops.Insert(place, customer2);
     69                  route1.Stops.RemoveAt(customer1Position);
    6770
    68                     if (route1.Stops.Count == 0)
     71                  if (route1.Stops.Count == 0)
    6972                    individual.Tours.Remove(route1);
    7073
    7174                  //two-level exchange has been performed
    72                   return;
     75                  performed = true;
     76                  break;
    7377                } else {
    7478                  tour.Stops[customer2Position] = customer2;
     
    7983            }
    8084          }
     85
     86          if (performed)
     87            break;
    8188        }
     89
     90        if (!performed)
     91          customer1Position++;
    8292      }
    8393    }
Note: See TracChangeset for help on using the changeset viewer.