Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
02/22/12 22:43:09 (13 years ago)
Author:
abeham
Message:

#1614

  • added instances of Cordeau et al. as given by L. Moccia
  • added operators for tabu search
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Evaluators/GQAPNMoveEvaluator.cs

    r7419 r7505  
    2020#endregion
    2121
    22 using System.Collections.Generic;
    2322using System.Linq;
    2423using HeuristicLab.Common;
     
    3231
    3332namespace HeuristicLab.Problems.GeneralizedQuadraticAssignment {
    34   [Item("GQAPNMoveEvaluator", "Evaluates an n-move.")]
     33  [Item("N-Move Evaluator", "Evaluates an N-Move.")]
    3534  [StorableClass]
    3635  public class GQAPNMoveEvaluator : SingleSuccessorOperator, IGQAPNMoveEvaluator, IAssignmentAwareGQAPOperator,
     
    159158      var slack = (DoubleArray)capacities.Clone();
    160159      var oldSlack = (DoubleArray)slack.Clone();
    161       Dictionary<int, int> moving = new Dictionary<int, int>();
    162       for (int i = 0; i < moves; i++) moving.Add(move.Equipments[i], move.Locations[i]);
    163 
    164       for (int i = 0; i < moves; i++) {
    165         int equip = move.Equipments[i];
    166         int newLoc = move.Locations[i];
     160      bool first = true;
     161      foreach (var kvp in move.NewAssignments) {
     162        int equip = kvp.Key;
     163        int newLoc = kvp.Value;
    167164        moveInstallationQuality -= installationCosts[equip, assignment[equip]];
    168165        moveInstallationQuality += installationCosts[equip, newLoc];
    169166        for (int j = 0; j < assignment.Length; j++) {
    170           if (!moving.ContainsKey(j)) {
     167          if (!move.NewAssignments.ContainsKey(j)) {
    171168            moveFlowDistanceQuality += weights[equip, j] * distances[newLoc, assignment[j]];
    172169            moveFlowDistanceQuality -= weights[equip, j] * distances[assignment[equip], assignment[j]];
    173170            moveFlowDistanceQuality += weights[j, equip] * distances[assignment[j], newLoc];
    174171            moveFlowDistanceQuality -= weights[j, equip] * distances[assignment[j], assignment[equip]];
    175             if (i == 0) { // only once for each untouched equipment deduct the demand from the capacity
     172            if (first) { // only once for each untouched equipment deduct the demand from the capacity
    176173              slack[assignment[j]] -= demands[j];
    177174              oldSlack[assignment[j]] -= demands[j];
    178175            }
    179176          } else {
    180             moveFlowDistanceQuality += weights[equip, j] * distances[newLoc, moving[j]];
     177            moveFlowDistanceQuality += weights[equip, j] * distances[newLoc, move.NewAssignments[j]];
    181178            moveFlowDistanceQuality -= weights[equip, j] * distances[assignment[equip], assignment[j]];
    182179          }
    183180        }
     181        first = false;
    184182        slack[newLoc] -= demands[equip];
    185183        oldSlack[assignment[equip]] -= demands[equip];
Note: See TracChangeset for help on using the changeset viewer.