Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
11/17/10 07:41:28 (13 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/TravelingSalesmanProblem.cs

    r4722 r4825  
    5555      get { return (ValueParameter<DoubleMatrix>)Parameters["Coordinates"]; }
    5656    }
    57     public OptionalValueParameter<DoubleMatrix> DistanceMatrixParameter {
    58       get { return (OptionalValueParameter<DoubleMatrix>)Parameters["DistanceMatrix"]; }
     57    public OptionalValueParameter<DistanceMatrix> DistanceMatrixParameter {
     58      get { return (OptionalValueParameter<DistanceMatrix>)Parameters["DistanceMatrix"]; }
    5959    }
    6060    public ValueParameter<BoolValue> UseDistanceMatrixParameter {
     
    8989      set { CoordinatesParameter.Value = value; }
    9090    }
    91     public DoubleMatrix DistanceMatrix {
     91    public DistanceMatrix DistanceMatrix {
    9292      get { return DistanceMatrixParameter.Value; }
    9393      set { DistanceMatrixParameter.Value = value; }
     
    144144      : base(original, cloner) {
    145145      this.operators = original.operators.Select(x => (IOperator)cloner.Clone(x)).ToList();
    146       this.DistanceMatrixParameter.Value = original.DistanceMatrixParameter.Value;
    147146      AttachEventHandlers();
    148147    }
     
    157156      Parameters.Add(new ValueParameter<BoolValue>("Maximization", "Set to false as the Traveling Salesman Problem is a minimization problem.", new BoolValue(false)));
    158157      Parameters.Add(new ValueParameter<DoubleMatrix>("Coordinates", "The x- and y-Coordinates of the cities."));
    159       Parameters.Add(new OptionalValueParameter<DoubleMatrix>("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."));
    160159      Parameters.Add(new ValueParameter<BoolValue>("UseDistanceMatrix", "True if a distance matrix should be calculated and used for evaluation, otherwise false.", new BoolValue(true)));
    161160      Parameters.Add(new ValueParameter<IPermutationCreator>("SolutionCreator", "The operator which should be used to create new TSP solutions.", creator));
     
    163162      Parameters.Add(new OptionalValueParameter<DoubleValue>("BestKnownQuality", "The quality of the best known solution of this TSP instance."));
    164163      Parameters.Add(new OptionalValueParameter<Permutation>("BestKnownSolution", "The best known solution of this TSP instance."));
     164
     165      DistanceMatrixParameter.ReactOnValueToStringChangedAndValueItemImageChanged = false;
    165166
    166167      Coordinates = new DoubleMatrix(new double[,] {
     
    258259      // BackwardsCompatibility3.3
    259260      #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
    260278      if (operators == null) InitializeOperators();
    261279      #endregion
Note: See TracChangeset for help on using the changeset viewer.