Changeset 4270


Ignore:
Timestamp:
08/20/10 11:43:31 (12 years ago)
Author:
svonolfe
Message:

Code cleanup (#1039)

Location:
branches/VRP/HeuristicLab.Problems.VehicleRouting/3.3/Encodings
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/GVR/GVREncoding.cs

    r4268 r4270  
    4040
    4141    public override List<Tour> GetTours(ILookupParameter<DoubleMatrix> distanceMatrix = null, int maxVehicles = int.MaxValue) {
    42       List<Tour> tours = new List<Tour>();
    43       Tour newTour = new Tour();
    44       double currentDemand = 0;
     42      List<Tour> tours = new List<Tour>();   
    4543
    46       int toursProcessed = 0;
    4744      foreach (Tour tour in base.Tours) {
    48         if (maxVehicles > tours.Count) {
    49           newTour = new Tour();
    50           currentDemand = 0;
    51         }
     45        Tour newTour = new Tour();
     46        double currentDemand = 0;
    5247
    5348        foreach (int city in tour.Cities) {
    5449          currentDemand += demand[city];
    5550
    56           if (maxVehicles > tours.Count &&
    57             currentDemand > capacity.Value) {
     51          if (currentDemand > capacity.Value) {
    5852            if(newTour.Cities.Count > 0)
    5953              tours.Add(newTour);
     
    6761        }
    6862
    69         if (newTour.Cities.Count > 0 &&
    70           maxVehicles > tours.Count)
     63        if (newTour.Cities.Count > 0)
    7164          tours.Add(newTour);
     65      }
    7266
    73         toursProcessed++;
    74       }
     67      //repair if there are too many vehicles used
     68      while (tours.Count > maxVehicles) {
     69        Tour tour = tours[tours.Count - 1];
     70        tours[tours.Count - 2].Cities.AddRange(tour.Cities);
     71
     72        tours.Remove(tour);
     73      }
    7574
    7675      return tours;
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/GVR/Manipulators/GVRInsertionManipulator.cs

    r4231 r4270  
    5555      } else {
    5656        Tour newTour = individual.Tours[random.Next(individual.Tours.Count)];
    57         int newPosition = newTour.Cities.Count;
     57        int newPosition = random.Next(newTour.Cities.Count + 1);
    5858
    5959        newTour.Cities.Insert(newPosition, customer);
  • branches/VRP/HeuristicLab.Problems.VehicleRouting/3.3/Encodings/Prins/Manipulators/PrinsLSManipulator.cs

    r4268 r4270  
    7777    protected const int depot = -1;
    7878
    79     private Tour FindTour(PrinsEncoding individual, int citiy) {
     79    private Tour FindTour(PrinsEncoding individual, int city) {
    8080      Tour found = null;
    8181
     
    8484
    8585      while (found == null && i < tours.Count) {
    86         if (tours[i].Cities.Contains(citiy + 1))
     86        if (tours[i].Cities.Contains(city))
    8787          found = tours[i];
    8888       
     
    252252      if (u != depot) {
    253253        if (v == depot) {
    254           Tour tour = FindTour(child, u);
     254          Tour tour = FindTour(child, u + 1);
    255255          v = tour.Cities[0] - 1;
    256256          InsertBefore(u, v, parent, child);
     
    259259        }
    260260      }
    261 
    262       if(!child.Validate()) {
    263       }
    264261    }
    265262
    266263    private void M2(PrinsEncoding parent, PrinsEncoding child, int u, int v) {
    267264      if (u != depot) {
    268         Tour tour = FindTour(child, u);
     265        Tour tour = FindTour(child, u + 1);
    269266        int iu = tour.Cities.IndexOf(u + 1);
    270267        if (iu < tour.Cities.Count - 1) {
     
    272269
    273270          if (v == depot) {
    274             tour = FindTour(child, u);
     271            tour = FindTour(child, u + 1);
    275272            v = tour.Cities[0] - 1;
    276273            InsertBefore(u, x, v, parent, child);
     
    280277        }
    281278      }
    282 
    283       if (!child.Validate()) {
    284       }
    285279    }
    286280
    287281    private void M3(PrinsEncoding parent, PrinsEncoding child, int u, int v) {
    288282      if (u != depot) {
    289         Tour tour = FindTour(child, u);
     283        Tour tour = FindTour(child, u + 1);
    290284        int iu = tour.Cities.IndexOf(u + 1);
    291285        if (iu < tour.Cities.Count - 1) {
     
    293287
    294288          if (v == depot) {
    295             tour = FindTour(child, u);
     289            tour = FindTour(child, u + 1);
    296290            v = tour.Cities[0] - 1;
    297291            InsertBefore(x, u, v, parent, child);
     
    301295        }
    302296      }
    303 
    304       if (!child.Validate()) {
    305       }
    306297    }
    307298
     
    310301        Swap(u, v, parent, child);
    311302      }
    312 
    313       if (!child.Validate()) {
    314       }
    315303    }
    316304
    317305    private void M5(PrinsEncoding parent, PrinsEncoding child, int u, int v) {
    318306      if (u != depot && v != depot) {
    319         Tour tour = FindTour(child, u);
     307        Tour tour = FindTour(child, u + 1);
    320308        int iu = tour.Cities.IndexOf(u + 1);
    321309        if (iu < tour.Cities.Count - 1) {
     
    326314        }
    327315      }
    328 
    329       if (!child.Validate()) {
    330       }
    331316    }
    332317
    333318    private void M6(PrinsEncoding parent, PrinsEncoding child, int u, int v) {
    334319      if (u != depot && v != depot) {
    335         Tour tour = FindTour(child, u);
     320        Tour tour = FindTour(child, u + 1);
    336321        int iu = tour.Cities.IndexOf(u + 1);
    337322        if (iu < tour.Cities.Count - 1) {
    338323          int x = tour.Cities[iu + 1] - 1;
    339324
    340           tour = FindTour(child, v);
     325          tour = FindTour(child, v + 1);
    341326          int iv = tour.Cities.IndexOf(v + 1);
    342327          if (iv < tour.Cities.Count - 1) {
     
    348333        }
    349334      }
    350 
    351       if (!child.Validate()) {
    352       }
    353335    }
    354336
    355337    private void M7(PrinsEncoding parent, PrinsEncoding child, int u, int v) {
    356338      if (u != depot && v != depot) {
    357         Tour tu = FindTour(child, u);
    358         Tour tv = FindTour(child, v);
     339        Tour tu = FindTour(child, u + 1);
     340        Tour tv = FindTour(child, v + 1);
    359341
    360342        if (tu.Cities[0] == tv.Cities[0]) {
     
    373355        }
    374356      }
    375 
    376       if (!child.Validate()) {
    377       }
    378357    }
    379358
    380359    private void M8(PrinsEncoding parent, PrinsEncoding child, int u, int v) {
    381360      if (u != depot && v != depot) {
    382         Tour tu = FindTour(child, u);
    383         Tour tv = FindTour(child, v);
     361        Tour tu = FindTour(child, u + 1);
     362        Tour tv = FindTour(child, v + 1);
    384363
    385364        if (tu.Cities[0] != tv.Cities[0]) {
     
    398377        }
    399378      }
    400 
    401       if (!child.Validate()) {
    402       }
    403379    }
    404380
    405381    private void M9(PrinsEncoding parent, PrinsEncoding child, int u, int v) {
    406382      if (u != depot && v != depot) {
    407         Tour tu = FindTour(child, u);
    408         Tour tv = FindTour(child, v);
     383        Tour tu = FindTour(child, u + 1);
     384        Tour tv = FindTour(child, v + 1);
    409385
    410386        if (tu.Cities[0] != tv.Cities[0]) {
     
    423399        }
    424400      }
    425 
    426       if (!child.Validate()) {
    427       }
    428401    }
    429402
     
    492465        return null;
    493466    }
    494 
    495     protected override void Manipulate(IRandom random, PrinsEncoding individual) {
    496       List<Tour> tours = individual.GetTours(DistanceMatrixParameter);
    497       bool improvement = false;
    498       int iterations = 0;
    499 
    500       do {
    501         int u = depot;
    502         improvement = false;
    503         double originalQuality = GetQuality(individual);
    504         PrinsEncoding child = null;
    505 
    506         while (!improvement && u < Cities) {
    507           int v = depot;
    508           while (!improvement && v < Cities) {
    509             if (u != v) {
    510               child = Manipulate(individual,
    511                 originalQuality, u, v);
    512 
    513               improvement = child != null;
    514             }
    515             v++;
    516           }
    517           u++;
    518         }
    519 
    520         if (improvement) {
    521           for (int i = 0; i < child.Length; i++) {
    522             individual[i] = child[i];
    523           }
    524         }
    525 
    526         iterations++;
    527       } while (improvement &&
    528         iterations < Iterations.Value.Value);
    529     }
    530467  }
    531468}
Note: See TracChangeset for help on using the changeset viewer.