Changeset 4825
- Timestamp:
- 11/17/10 07:41:28 (14 years ago)
- Location:
- trunk/sources
- Files:
-
- 1 added
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Optimization/3.3/Run.cs
r4722 r4825 23 23 using System.Collections.Generic; 24 24 using System.Drawing; 25 using System.Linq; 25 26 using HeuristicLab.Common; 26 27 using HeuristicLab.Core; … … 87 88 88 89 private void Initialize(IAlgorithm algorithm) { 89 IAlgorithm clone = (IAlgorithm)algorithm.Clone();90 90 parameters = new Dictionary<string, IItem>(); 91 91 results = new Dictionary<string, IItem>(); 92 clone.CollectParameterValues(parameters); 93 clone.CollectResultValues(results); 94 if (clone.StoreAlgorithmInEachRun) { 92 93 if (algorithm.StoreAlgorithmInEachRun) { 94 IAlgorithm clone = (IAlgorithm)algorithm.Clone(); 95 clone.CollectParameterValues(parameters); 96 clone.CollectResultValues(results); 95 97 clone.Prepare(true); 96 98 this.algorithm = clone; 99 } else { 100 algorithm.CollectParameterValues(parameters); 101 algorithm.CollectResultValues(results); 102 Cloner cloner = new Cloner(); 103 parameters = parameters.Select(x => new KeyValuePair<string, IItem>(x.Key, (IItem)x.Value.Clone(cloner))).ToDictionary(x => x.Key, x => x.Value); 104 results = results.Select(x => new KeyValuePair<string, IItem>(x.Key, (IItem)x.Value.Clone(cloner))).ToDictionary(x => x.Key, x => x.Value); 97 105 } 98 106 } -
trunk/sources/HeuristicLab.Parameters/3.3/OptionalValueParameter.cs
r4722 r4825 78 78 } 79 79 80 [Storable(DefaultValue = true)] 81 private bool reactOnValueToStringChangedAndValueItemImageChanged; 82 /// <summary> 83 /// True if this parameter should react on the ToStringChanged and ItemImageChanged events of its value, otherwise false. 84 /// </summary> 85 /// <remarks> 86 /// In some rare cases when the value of the parameter is not deeply cloned, this property has to be set to false 87 /// to avoid a memory leak (cf. ticket #1268). In all other cases this property should always be true. 88 /// </remarks> 89 public bool ReactOnValueToStringChangedAndValueItemImageChanged { 90 get { return reactOnValueToStringChangedAndValueItemImageChanged; } 91 set { 92 if (value != reactOnValueToStringChangedAndValueItemImageChanged) { 93 reactOnValueToStringChangedAndValueItemImageChanged = value; 94 if (reactOnValueToStringChangedAndValueItemImageChanged) 95 RegisterValueEvents(); 96 else 97 DeregisterValueEvents(); 98 } 99 } 100 } 101 80 102 #region Constructors 81 103 [StorableConstructor] … … 85 107 value = cloner.Clone(original.value); 86 108 getsCollected = original.getsCollected; 109 reactOnValueToStringChangedAndValueItemImageChanged = original.reactOnValueToStringChangedAndValueItemImageChanged; 87 110 RegisterValueEvents(); 88 111 } … … 90 113 : base("Anonymous", typeof(T)) { 91 114 this.getsCollected = true; 115 this.reactOnValueToStringChangedAndValueItemImageChanged = true; 92 116 } 93 117 public OptionalValueParameter(string name) 94 118 : base(name, typeof(T)) { 95 119 this.getsCollected = true; 120 this.reactOnValueToStringChangedAndValueItemImageChanged = true; 96 121 } 97 122 public OptionalValueParameter(string name, bool getsCollected) 98 123 : base(name, typeof(T)) { 99 124 this.getsCollected = getsCollected; 125 this.reactOnValueToStringChangedAndValueItemImageChanged = true; 100 126 } 101 127 public OptionalValueParameter(string name, T value) … … 103 129 this.value = value; 104 130 this.getsCollected = true; 131 this.reactOnValueToStringChangedAndValueItemImageChanged = true; 105 132 RegisterValueEvents(); 106 133 } … … 109 136 this.value = value; 110 137 this.getsCollected = getsCollected; 138 this.reactOnValueToStringChangedAndValueItemImageChanged = true; 111 139 RegisterValueEvents(); 112 140 } … … 114 142 : base(name, description, typeof(T)) { 115 143 this.getsCollected = true; 144 this.reactOnValueToStringChangedAndValueItemImageChanged = true; 116 145 } 117 146 public OptionalValueParameter(string name, string description, bool getsCollected) 118 147 : base(name, description, typeof(T)) { 119 148 this.getsCollected = getsCollected; 149 this.reactOnValueToStringChangedAndValueItemImageChanged = true; 120 150 } 121 151 public OptionalValueParameter(string name, string description, T value) … … 123 153 this.value = value; 124 154 this.getsCollected = true; 155 this.reactOnValueToStringChangedAndValueItemImageChanged = true; 125 156 RegisterValueEvents(); 126 157 } … … 129 160 this.value = value; 130 161 this.getsCollected = getsCollected; 162 this.reactOnValueToStringChangedAndValueItemImageChanged = true; 131 163 RegisterValueEvents(); 132 164 } … … 143 175 144 176 public override string ToString() { 145 return Name + ": " + (Value != null ? Value.ToString() : "null"); 177 if (reactOnValueToStringChangedAndValueItemImageChanged) 178 return Name + ": " + (Value != null ? Value.ToString() : "null"); 179 else 180 return Name; 146 181 } 147 182 … … 167 202 168 203 private void RegisterValueEvents() { 169 if ( value != null) {204 if ((value != null) && reactOnValueToStringChangedAndValueItemImageChanged) { 170 205 value.ItemImageChanged += new EventHandler(Value_ItemImageChanged); 171 206 value.ToStringChanged += new EventHandler(Value_ToStringChanged); -
trunk/sources/HeuristicLab.Problems.TravelingSalesman/3.3/Evaluators/TSPCoordinatesPathEvaluator.cs
r4722 r4825 40 40 get { return (ILookupParameter<DoubleMatrix>)Parameters["Coordinates"]; } 41 41 } 42 public ILookupParameter<D oubleMatrix> DistanceMatrixParameter {43 get { return (ILookupParameter<D oubleMatrix>)Parameters["DistanceMatrix"]; }42 public ILookupParameter<DistanceMatrix> DistanceMatrixParameter { 43 get { return (ILookupParameter<DistanceMatrix>)Parameters["DistanceMatrix"]; } 44 44 } 45 45 public ILookupParameter<BoolValue> UseDistanceMatrixParameter { … … 54 54 Parameters.Add(new LookupParameter<Permutation>("Permutation", "The TSP solution given in path representation which should be evaluated.")); 55 55 Parameters.Add(new LookupParameter<DoubleMatrix>("Coordinates", "The x- and y-Coordinates of the cities.")); 56 Parameters.Add(new LookupParameter<D oubleMatrix>("DistanceMatrix", "The matrix which contains the distances between the cities."));56 Parameters.Add(new LookupParameter<DistanceMatrix>("DistanceMatrix", "The matrix which contains the distances between the cities.")); 57 57 Parameters.Add(new LookupParameter<BoolValue>("UseDistanceMatrix", "True if a distance matrix should be calculated and used for evaluation, otherwise false.")); 58 } 59 60 [StorableHook(HookType.AfterDeserialization)] 61 private void AfterDeserialization() { 62 // BackwardsCompatibility3.3 63 #region Backwards compatible code (remove with 3.4) 64 LookupParameter<DoubleMatrix> oldDistanceMatrixParameter = Parameters["DistanceMatrix"] as LookupParameter<DoubleMatrix>; 65 if (oldDistanceMatrixParameter != null) { 66 Parameters.Remove(oldDistanceMatrixParameter); 67 Parameters.Add(new LookupParameter<DistanceMatrix>("DistanceMatrix", "The matrix which contains the distances between the cities.")); 68 DistanceMatrixParameter.ActualName = oldDistanceMatrixParameter.ActualName; 69 } 70 #endregion 58 71 } 59 72 … … 61 74 if (UseDistanceMatrixParameter.ActualValue.Value) { 62 75 Permutation p = PermutationParameter.ActualValue; 63 D oubleMatrix dm = DistanceMatrixParameter.ActualValue;76 DistanceMatrix dm = DistanceMatrixParameter.ActualValue; 64 77 65 78 if (dm == null) { // calculate distance matrix 66 79 DoubleMatrix c = CoordinatesParameter.ActualValue; 67 80 68 dm = new D oubleMatrix(c.Rows, c.Rows);81 dm = new DistanceMatrix(c.Rows, c.Rows); 69 82 for (int i = 0; i < dm.Rows; i++) { 70 83 for (int j = 0; j < dm.Columns; j++) 71 84 dm[i, j] = CalculateDistance(c[i, 0], c[i, 1], c[j, 0], c[j, 1]); 72 85 } 73 DistanceMatrixParameter.ActualValue = (D oubleMatrix)dm.AsReadOnly();86 DistanceMatrixParameter.ActualValue = (DistanceMatrix)dm.AsReadOnly(); 74 87 } 75 88 -
trunk/sources/HeuristicLab.Problems.TravelingSalesman/3.3/HeuristicLab.Problems.TravelingSalesman-3.3.csproj
r4703 r4825 109 109 <Compile Include="Analyzers\TSPPopulationDiversityAnalyzer.cs" /> 110 110 <Compile Include="Analyzers\TSPAlleleFrequencyAnalyzer.cs" /> 111 <Compile Include="DistanceMatrix.cs" /> 111 112 <Compile Include="Evaluators\TSPEuclideanPathEvaluator.cs" /> 112 113 <Compile Include="Evaluators\TSPGeoPathEvaluator.cs" /> -
trunk/sources/HeuristicLab.Problems.TravelingSalesman/3.3/Interfaces/ITSPCoordinatesPathEvaluator.cs
r4068 r4825 29 29 public interface ITSPCoordinatesPathEvaluator : ITSPPathEvaluator { 30 30 ILookupParameter<DoubleMatrix> CoordinatesParameter { get; } 31 ILookupParameter<D oubleMatrix> DistanceMatrixParameter { get; }31 ILookupParameter<DistanceMatrix> DistanceMatrixParameter { get; } 32 32 ILookupParameter<BoolValue> UseDistanceMatrixParameter { get; } 33 33 } -
trunk/sources/HeuristicLab.Problems.TravelingSalesman/3.3/Interfaces/ITSPPathMoveEvaluator.cs
r4068 r4825 27 27 public interface ITSPPathMoveEvaluator : ITSPMoveEvaluator, IPermutationMoveOperator { 28 28 ILookupParameter<DoubleMatrix> CoordinatesParameter { get; } 29 ILookupParameter<D oubleMatrix> DistanceMatrixParameter { get; }29 ILookupParameter<DistanceMatrix> DistanceMatrixParameter { get; } 30 30 ILookupParameter<BoolValue> UseDistanceMatrixParameter { get; } 31 31 } -
trunk/sources/HeuristicLab.Problems.TravelingSalesman/3.3/MoveEvaluators/TSPPathMoveEvaluator.cs
r4722 r4825 40 40 get { return (ILookupParameter<DoubleMatrix>)Parameters["Coordinates"]; } 41 41 } 42 public ILookupParameter<D oubleMatrix> DistanceMatrixParameter {43 get { return (ILookupParameter<D oubleMatrix>)Parameters["DistanceMatrix"]; }42 public ILookupParameter<DistanceMatrix> DistanceMatrixParameter { 43 get { return (ILookupParameter<DistanceMatrix>)Parameters["DistanceMatrix"]; } 44 44 } 45 45 public ILookupParameter<BoolValue> UseDistanceMatrixParameter { … … 54 54 Parameters.Add(new LookupParameter<Permutation>("Permutation", "The solution as permutation.")); 55 55 Parameters.Add(new LookupParameter<DoubleMatrix>("Coordinates", "The city's coordinates.")); 56 Parameters.Add(new LookupParameter<D oubleMatrix>("DistanceMatrix", "The matrix which contains the distances between the cities."));56 Parameters.Add(new LookupParameter<DistanceMatrix>("DistanceMatrix", "The matrix which contains the distances between the cities.")); 57 57 Parameters.Add(new LookupParameter<BoolValue>("UseDistanceMatrix", "True if a distance matrix should be calculated (if it does not exist already) and used for evaluation, otherwise false.")); 58 } 59 60 [StorableHook(HookType.AfterDeserialization)] 61 private void AfterDeserialization() { 62 // BackwardsCompatibility3.3 63 #region Backwards compatible code (remove with 3.4) 64 LookupParameter<DoubleMatrix> oldDistanceMatrixParameter = Parameters["DistanceMatrix"] as LookupParameter<DoubleMatrix>; 65 if (oldDistanceMatrixParameter != null) { 66 Parameters.Remove(oldDistanceMatrixParameter); 67 Parameters.Add(new LookupParameter<DistanceMatrix>("DistanceMatrix", "The matrix which contains the distances between the cities.")); 68 DistanceMatrixParameter.ActualName = oldDistanceMatrixParameter.ActualName; 69 } 70 #endregion 58 71 } 59 72 … … 63 76 double relativeQualityDifference = 0; 64 77 if (UseDistanceMatrixParameter.ActualValue.Value) { 65 D oubleMatrix distanceMatrix = DistanceMatrixParameter.ActualValue;78 DistanceMatrix distanceMatrix = DistanceMatrixParameter.ActualValue; 66 79 if (distanceMatrix == null) { 67 80 distanceMatrix = CalculateDistanceMatrix(coordinates); … … 77 90 78 91 protected abstract double CalculateDistance(double x1, double y1, double x2, double y2); 79 protected abstract double EvaluateByDistanceMatrix(Permutation permutation, D oubleMatrix distanceMatrix);92 protected abstract double EvaluateByDistanceMatrix(Permutation permutation, DistanceMatrix distanceMatrix); 80 93 protected abstract double EvaluateByCoordinates(Permutation permutation, DoubleMatrix coordinates); 81 94 82 private D oubleMatrix CalculateDistanceMatrix(DoubleMatrix c) {83 D oubleMatrix distanceMatrix = new DoubleMatrix(c.Rows, c.Rows);95 private DistanceMatrix CalculateDistanceMatrix(DoubleMatrix c) { 96 DistanceMatrix distanceMatrix = new DistanceMatrix(c.Rows, c.Rows); 84 97 for (int i = 0; i < distanceMatrix.Rows; i++) { 85 98 for (int j = 0; j < distanceMatrix.Columns; j++) 86 99 distanceMatrix[i, j] = CalculateDistance(c[i, 0], c[i, 1], c[j, 0], c[j, 1]); 87 100 } 88 return distanceMatrix;101 return (DistanceMatrix)distanceMatrix.AsReadOnly(); 89 102 } 90 103 } -
trunk/sources/HeuristicLab.Problems.TravelingSalesman/3.3/MoveEvaluators/ThreeOpt/TSPTranslocationMovePathEvaluator.cs
r4722 r4825 82 82 } 83 83 84 protected override double EvaluateByDistanceMatrix(Permutation permutation, D oubleMatrix distanceMatrix) {84 protected override double EvaluateByDistanceMatrix(Permutation permutation, DistanceMatrix distanceMatrix) { 85 85 TranslocationMove move = TranslocationMoveParameter.ActualValue; 86 86 int edge1source = permutation.GetCircular(move.Index1 - 1); -
trunk/sources/HeuristicLab.Problems.TravelingSalesman/3.3/MoveEvaluators/TwoOpt/TSPInversionMovePathEvaluator.cs
r4722 r4825 67 67 } 68 68 69 protected override double EvaluateByDistanceMatrix(Permutation permutation, D oubleMatrix distanceMatrix) {69 protected override double EvaluateByDistanceMatrix(Permutation permutation, DistanceMatrix distanceMatrix) { 70 70 InversionMove move = InversionMoveParameter.ActualValue; 71 71 int edge1source = permutation.GetCircular(move.Index1 - 1); -
trunk/sources/HeuristicLab.Problems.TravelingSalesman/3.3/TravelingSalesmanProblem.cs
r4722 r4825 55 55 get { return (ValueParameter<DoubleMatrix>)Parameters["Coordinates"]; } 56 56 } 57 public OptionalValueParameter<D oubleMatrix> DistanceMatrixParameter {58 get { return (OptionalValueParameter<D oubleMatrix>)Parameters["DistanceMatrix"]; }57 public OptionalValueParameter<DistanceMatrix> DistanceMatrixParameter { 58 get { return (OptionalValueParameter<DistanceMatrix>)Parameters["DistanceMatrix"]; } 59 59 } 60 60 public ValueParameter<BoolValue> UseDistanceMatrixParameter { … … 89 89 set { CoordinatesParameter.Value = value; } 90 90 } 91 public D oubleMatrix DistanceMatrix {91 public DistanceMatrix DistanceMatrix { 92 92 get { return DistanceMatrixParameter.Value; } 93 93 set { DistanceMatrixParameter.Value = value; } … … 144 144 : base(original, cloner) { 145 145 this.operators = original.operators.Select(x => (IOperator)cloner.Clone(x)).ToList(); 146 this.DistanceMatrixParameter.Value = original.DistanceMatrixParameter.Value;147 146 AttachEventHandlers(); 148 147 } … … 157 156 Parameters.Add(new ValueParameter<BoolValue>("Maximization", "Set to false as the Traveling Salesman Problem is a minimization problem.", new BoolValue(false))); 158 157 Parameters.Add(new ValueParameter<DoubleMatrix>("Coordinates", "The x- and y-Coordinates of the cities.")); 159 Parameters.Add(new OptionalValueParameter<D oubleMatrix>("DistanceMatrix", "The matrix which contains the distances between the cities."));158 Parameters.Add(new OptionalValueParameter<DistanceMatrix>("DistanceMatrix", "The matrix which contains the distances between the cities.")); 160 159 Parameters.Add(new ValueParameter<BoolValue>("UseDistanceMatrix", "True if a distance matrix should be calculated and used for evaluation, otherwise false.", new BoolValue(true))); 161 160 Parameters.Add(new ValueParameter<IPermutationCreator>("SolutionCreator", "The operator which should be used to create new TSP solutions.", creator)); … … 163 162 Parameters.Add(new OptionalValueParameter<DoubleValue>("BestKnownQuality", "The quality of the best known solution of this TSP instance.")); 164 163 Parameters.Add(new OptionalValueParameter<Permutation>("BestKnownSolution", "The best known solution of this TSP instance.")); 164 165 DistanceMatrixParameter.ReactOnValueToStringChangedAndValueItemImageChanged = false; 165 166 166 167 Coordinates = new DoubleMatrix(new double[,] { … … 258 259 // BackwardsCompatibility3.3 259 260 #region Backwards compatible code (remove with 3.4) 261 OptionalValueParameter<DoubleMatrix> oldDistanceMatrixParameter = Parameters["DistanceMatrix"] as OptionalValueParameter<DoubleMatrix>; 262 if (oldDistanceMatrixParameter != null) { 263 Parameters.Remove(oldDistanceMatrixParameter); 264 Parameters.Add(new OptionalValueParameter<DistanceMatrix>("DistanceMatrix", "The matrix which contains the distances between the cities.")); 265 DistanceMatrixParameter.GetsCollected = oldDistanceMatrixParameter.GetsCollected; 266 DistanceMatrixParameter.ReactOnValueToStringChangedAndValueItemImageChanged = false; 267 if (oldDistanceMatrixParameter.Value != null) { 268 DoubleMatrix oldDM = oldDistanceMatrixParameter.Value; 269 DistanceMatrix newDM = new DistanceMatrix(oldDM.Rows, oldDM.Columns, oldDM.ColumnNames, oldDM.RowNames); 270 newDM.SortableView = oldDM.SortableView; 271 for (int i = 0; i < newDM.Rows; i++) 272 for (int j = 0; j < newDM.Columns; j++) 273 newDM[i, j] = oldDM[i, j]; 274 DistanceMatrixParameter.Value = (DistanceMatrix)newDM.AsReadOnly(); 275 } 276 } 277 260 278 if (operators == null) InitializeOperators(); 261 279 #endregion
Note: See TracChangeset
for help on using the changeset viewer.