Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
11/17/10 07:41:28 (14 years ago)
Author:
swagner
Message:

Fixed memory leak when using parameters whose values are not deeply cloned (#1268)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Problems.TravelingSalesman/3.3/Evaluators/TSPCoordinatesPathEvaluator.cs

    r4722 r4825  
    4040      get { return (ILookupParameter<DoubleMatrix>)Parameters["Coordinates"]; }
    4141    }
    42     public ILookupParameter<DoubleMatrix> DistanceMatrixParameter {
    43       get { return (ILookupParameter<DoubleMatrix>)Parameters["DistanceMatrix"]; }
     42    public ILookupParameter<DistanceMatrix> DistanceMatrixParameter {
     43      get { return (ILookupParameter<DistanceMatrix>)Parameters["DistanceMatrix"]; }
    4444    }
    4545    public ILookupParameter<BoolValue> UseDistanceMatrixParameter {
     
    5454      Parameters.Add(new LookupParameter<Permutation>("Permutation", "The TSP solution given in path representation which should be evaluated."));
    5555      Parameters.Add(new LookupParameter<DoubleMatrix>("Coordinates", "The x- and y-Coordinates of the cities."));
    56       Parameters.Add(new LookupParameter<DoubleMatrix>("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."));
    5757      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
    5871    }
    5972
     
    6174      if (UseDistanceMatrixParameter.ActualValue.Value) {
    6275        Permutation p = PermutationParameter.ActualValue;
    63         DoubleMatrix dm = DistanceMatrixParameter.ActualValue;
     76        DistanceMatrix dm = DistanceMatrixParameter.ActualValue;
    6477
    6578        if (dm == null) {  // calculate distance matrix
    6679          DoubleMatrix c = CoordinatesParameter.ActualValue;
    6780
    68           dm = new DoubleMatrix(c.Rows, c.Rows);
     81          dm = new DistanceMatrix(c.Rows, c.Rows);
    6982          for (int i = 0; i < dm.Rows; i++) {
    7083            for (int j = 0; j < dm.Columns; j++)
    7184              dm[i, j] = CalculateDistance(c[i, 0], c[i, 1], c[j, 0], c[j, 1]);
    7285          }
    73           DistanceMatrixParameter.ActualValue = (DoubleMatrix)dm.AsReadOnly();
     86          DistanceMatrixParameter.ActualValue = (DistanceMatrix)dm.AsReadOnly();
    7487        }
    7588
Note: See TracChangeset for help on using the changeset viewer.