- Timestamp:
- 02/22/12 22:43:09 (13 years ago)
- Location:
- branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3
- Files:
-
- 3 added
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Evaluators/GQAPNMoveEvaluator.cs
r7419 r7505 20 20 #endregion 21 21 22 using System.Collections.Generic;23 22 using System.Linq; 24 23 using HeuristicLab.Common; … … 32 31 33 32 namespace HeuristicLab.Problems.GeneralizedQuadraticAssignment { 34 [Item(" GQAPNMoveEvaluator", "Evaluates an n-move.")]33 [Item("N-Move Evaluator", "Evaluates an N-Move.")] 35 34 [StorableClass] 36 35 public class GQAPNMoveEvaluator : SingleSuccessorOperator, IGQAPNMoveEvaluator, IAssignmentAwareGQAPOperator, … … 159 158 var slack = (DoubleArray)capacities.Clone(); 160 159 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; 167 164 moveInstallationQuality -= installationCosts[equip, assignment[equip]]; 168 165 moveInstallationQuality += installationCosts[equip, newLoc]; 169 166 for (int j = 0; j < assignment.Length; j++) { 170 if (!mov ing.ContainsKey(j)) {167 if (!move.NewAssignments.ContainsKey(j)) { 171 168 moveFlowDistanceQuality += weights[equip, j] * distances[newLoc, assignment[j]]; 172 169 moveFlowDistanceQuality -= weights[equip, j] * distances[assignment[equip], assignment[j]]; 173 170 moveFlowDistanceQuality += weights[j, equip] * distances[assignment[j], newLoc]; 174 171 moveFlowDistanceQuality -= weights[j, equip] * distances[assignment[j], assignment[equip]]; 175 if ( i == 0) { // only once for each untouched equipment deduct the demand from the capacity172 if (first) { // only once for each untouched equipment deduct the demand from the capacity 176 173 slack[assignment[j]] -= demands[j]; 177 174 oldSlack[assignment[j]] -= demands[j]; 178 175 } 179 176 } else { 180 moveFlowDistanceQuality += weights[equip, j] * distances[newLoc, mov ing[j]];177 moveFlowDistanceQuality += weights[equip, j] * distances[newLoc, move.NewAssignments[j]]; 181 178 moveFlowDistanceQuality -= weights[equip, j] * distances[assignment[equip], assignment[j]]; 182 179 } 183 180 } 181 first = false; 184 182 slack[newLoc] -= demands[equip]; 185 183 oldSlack[assignment[equip]] -= demands[equip]; -
branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/HeuristicLab.Problems.GeneralizedQuadraticAssignment-3.3.csproj
r7478 r7505 134 134 <Compile Include="Moves\GQAPMoveGenerator.cs" /> 135 135 <Compile Include="Moves\GQAPNMoveGenerator.cs" /> 136 <Compile Include="Moves\NMoveAbsoluteAttribute.cs" /> 136 137 <Compile Include="Moves\NMoveMaker.cs" /> 138 <Compile Include="Moves\NMoveTabuChecker.cs" /> 139 <Compile Include="Moves\NMoveTabuMaker.cs" /> 137 140 <Compile Include="Moves\StochasticNMoveMultiMoveGenerator.cs" /> 138 141 <Compile Include="Moves\StochasticNMoveSingleMoveGenerator.cs" /> -
branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Moves/GQAPNMoveGenerator.cs
r7419 r7505 30 30 31 31 namespace HeuristicLab.Problems.GeneralizedQuadraticAssignment { 32 [Item(" GQAPNMoveGenerator", "Base class for move operators that generate n-move moves.")]32 [Item("N-Move Generator", "Base class for move operators that generate N-Move moves.")] 33 33 [StorableClass] 34 34 public abstract class GQAPNMoveGenerator : GQAPMoveGenerator, IGQAPNMoveOperator { -
branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Moves/NMove.cs
r7407 r7505 21 21 22 22 using System; 23 using System.Collections.Generic; 23 24 using HeuristicLab.Common; 24 25 using HeuristicLab.Core; … … 27 28 28 29 namespace HeuristicLab.Problems.GeneralizedQuadraticAssignment { 29 [Item(" n-move", "An n-move describes moving n equipments to nlocations.")]30 [Item("N-Move", "An N-Move describes the relocation of n equipments to n different locations.")] 30 31 [StorableClass] 31 32 public class NMove : Item { 32 33 [Storable] 33 public int[] Equipments { get; private set; } 34 [Storable] 35 public int[] Locations { get; private set; } 34 public Dictionary<int, int> NewAssignments { get; private set; } 36 35 [Storable] 37 36 public IntegerVector OriginalVector { get; private set; } 38 37 39 public int N { get { return Equipments.Length; } }38 public int N { get { return NewAssignments.Count; } } 40 39 41 40 [StorableConstructor] … … 43 42 protected NMove(NMove original, Cloner cloner) 44 43 : base(original, cloner) { 45 Equipments = (int[])original.Equipments.Clone(); 46 Locations = (int[])original.Locations.Clone(); 44 NewAssignments = new Dictionary<int, int>(original.NewAssignments); 47 45 if (original.OriginalVector != null) 48 46 OriginalVector = cloner.Clone(original.OriginalVector); … … 55 53 if (locations == null) throw new ArgumentNullException("locations", "NMove: Locations must not be null."); 56 54 if (equipments.Length != locations.Length) throw new ArgumentException("NMove: Length of equipments and locations is not identical."); 57 Equipments = equipments; 58 Locations = locations; 55 NewAssignments = new Dictionary<int, int>(); 56 for (int i = 0; i < equipments.Length; i++) 57 NewAssignments[equipments[i]] = locations[i]; 59 58 OriginalVector = originalVector; 60 59 } -
branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Moves/NMoveMaker.cs
r7419 r7505 30 30 31 31 namespace HeuristicLab.Problems.GeneralizedQuadraticAssignment { 32 [Item("N MoveMaker", "Performs an n-move.")]32 [Item("N-Move Maker", "Performs an N-Move.")] 33 33 [StorableClass] 34 34 public class NMoveMaker : SingleSuccessorOperator, IAssignmentAwareGQAPOperator, IQualityAwareGQAPOperator, IMoveQualityAwareGQAPOperator, IGQAPNMoveOperator, IMoveMaker { … … 97 97 98 98 public static void Apply(IntegerVector vector, NMove move) { 99 for (int i = 0; i < move.N; i++) { 100 vector[move.Equipments[i]] = move.Locations[i]; 101 } 99 foreach (var kvp in move.NewAssignments) 100 vector[kvp.Key] = kvp.Value; 102 101 } 103 102 -
branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Moves/StochasticNMoveMultiMoveGenerator.cs
r7419 r7505 30 30 31 31 namespace HeuristicLab.Problems.GeneralizedQuadraticAssignment { 32 [Item("Stochastic n-move MultiMoveGenerator", "Randomly samples a number of n-moves.")]32 [Item("Stochastic N-Move MultiMoveGenerator", "Randomly samples a number of N-Moves.")] 33 33 [StorableClass] 34 34 public class StochasticNMoveMultiMoveGenerator : GQAPNMoveGenerator, ICapacitiesAwareGQAPOperator, IStochasticOperator, IMultiMoveGenerator { -
branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/Moves/StochasticNMoveSingleMoveGenerator.cs
r7419 r7505 30 30 31 31 namespace HeuristicLab.Problems.GeneralizedQuadraticAssignment { 32 [Item("Stochastic n-move SingleMoveGenerator", "Randomly samples a single n-move.")]32 [Item("Stochastic N-Move SingleMoveGenerator", "Randomly samples a single N-Move.")] 33 33 [StorableClass] 34 34 public class StochasticNMoveSingleMoveGenerator : GQAPNMoveGenerator, ICapacitiesAwareGQAPOperator, IStochasticOperator, ISingleMoveGenerator {
Note: See TracChangeset
for help on using the changeset viewer.