Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
03/29/11 01:42:41 (14 years ago)
Author:
abeham
Message:

#1330

  • Fixed calculation of normalized stress value
  • Fixed a few bugs
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/QAP/HeuristicLab.Problems.QuadraticAssignment/3.3/QuadraticAssignmentProblem.cs

    r5838 r5855  
    104104      : base() {
    105105      Parameters.Add(new OptionalValueParameter<Permutation>("BestKnownSolution", "The best known solution which is updated whenever a new better solution is found or may be the optimal solution if it is known beforehand.", null));
    106       Parameters.Add(new ValueParameter<DoubleMatrix>("Coordinates", "The coordinates of the locations. If this is changed the distance matrix is calculated automatically using the euclidean distance."));
     106      Parameters.Add(new OptionalValueParameter<DoubleMatrix>("Coordinates", "The coordinates of the locations. If this is changed the distance matrix is calculated automatically using the euclidean distance."));
    107107      Parameters.Add(new ValueParameter<DoubleMatrix>("Weights", "The strength of the connection between the facilities.", new DoubleMatrix(5, 5)));
    108108      Parameters.Add(new ValueParameter<DoubleMatrix>("Distances", "The distance matrix which can either be specified directly without the coordinates, or can be calculated automatically from the coordinates.", new DoubleMatrix(5, 5)));
     
    178178    private void WeightsParameter_ValueChanged(object sender, EventArgs e) {
    179179      Weights.RowsChanged += new EventHandler(Weights_RowsChanged);
     180      Weights.ColumnsChanged += new EventHandler(Weights_ColumnsChanged);
    180181      ParameterizeSolutionCreator();
    181182      ParameterizeEvaluator();
    182183      ParameterizeOperators();
     184      AdjustDistanceMatrix();
    183185    }
    184186    private void Weights_RowsChanged(object sender, EventArgs e) {
     187      if (Weights.Rows != Weights.Columns)
     188        ((IStringConvertibleMatrix)Weights).Columns = Weights.Rows;
     189      else {
     190        ParameterizeSolutionCreator();
     191        ParameterizeEvaluator();
     192        ParameterizeOperators();
     193        AdjustDistanceMatrix();
     194      }
     195    }
     196    private void Weights_ColumnsChanged(object sender, EventArgs e) {
     197      if (Weights.Rows != Weights.Columns)
     198        ((IStringConvertibleMatrix)Weights).Rows = Weights.Columns;
     199      else {
     200        ParameterizeSolutionCreator();
     201        ParameterizeEvaluator();
     202        ParameterizeOperators();
     203        AdjustDistanceMatrix();
     204      }
     205    }
     206    private void DistancesParameter_ValueChanged(object sender, EventArgs e) {
     207      Distances.RowsChanged += new EventHandler(Distances_RowsChanged);
     208      Distances.ColumnsChanged += new EventHandler(Distances_ColumnsChanged);
    185209      ParameterizeSolutionCreator();
    186210      ParameterizeEvaluator();
    187211      ParameterizeOperators();
     212      AdjustWeightsMatrix();
     213    }
     214    private void Distances_RowsChanged(object sender, EventArgs e) {
     215      if (Distances.Rows != Distances.Columns)
     216        ((IStringConvertibleMatrix)Distances).Columns = Distances.Rows;
     217      else {
     218        ParameterizeSolutionCreator();
     219        ParameterizeEvaluator();
     220        ParameterizeOperators();
     221        AdjustWeightsMatrix();
     222      }
     223    }
     224    private void Distances_ColumnsChanged(object sender, EventArgs e) {
     225      if (Distances.Rows != Distances.Columns)
     226        ((IStringConvertibleMatrix)Distances).Rows = Distances.Columns;
     227      else {
     228        ParameterizeSolutionCreator();
     229        ParameterizeEvaluator();
     230        ParameterizeOperators();
     231        AdjustWeightsMatrix();
     232      }
    188233    }
    189234    private void CoordinatesParameter_ValueChanged(object sender, EventArgs e) {
    190       Coordinates.Reset += new EventHandler(Coordinates_Reset);
    191       Coordinates.ItemChanged += new EventHandler<EventArgs<int, int>>(Coordinates_ItemChanged);
    192       UpdateDistanceMatrix();
     235      if (Coordinates != null) {
     236        Coordinates.Reset += new EventHandler(Coordinates_Reset);
     237        Coordinates.ItemChanged += new EventHandler<EventArgs<int, int>>(Coordinates_ItemChanged);
     238        UpdateDistancesFromCoordinates();
     239      }
    193240    }
    194241    private void Coordinates_ItemChanged(object sender, EventArgs<int, int> e) {
    195       UpdateDistanceMatrix();
     242      UpdateDistancesFromCoordinates();
    196243    }
    197244    private void Coordinates_Reset(object sender, EventArgs e) {
    198       UpdateDistanceMatrix();
     245      UpdateDistancesFromCoordinates();
    199246    }
    200247    #endregion
     
    211258      WeightsParameter.ValueChanged += new EventHandler(WeightsParameter_ValueChanged);
    212259      Weights.RowsChanged += new EventHandler(Weights_RowsChanged);
     260      Weights.ColumnsChanged += new EventHandler(Weights_ColumnsChanged);
     261      DistancesParameter.ValueChanged += new EventHandler(DistancesParameter_ValueChanged);
     262      Distances.RowsChanged += new EventHandler(Distances_RowsChanged);
     263      Distances.ColumnsChanged += new EventHandler(Distances_ColumnsChanged);
    213264      CoordinatesParameter.ValueChanged += new EventHandler(CoordinatesParameter_ValueChanged);
    214265      Coordinates.Reset += new EventHandler(Coordinates_Reset);
     
    273324    }
    274325
    275     private void UpdateDistanceMatrix() {
     326    private void AdjustDistanceMatrix() {
     327      if (Distances.Rows != Weights.Rows || Distances.Columns != Weights.Columns) {
     328        ((IStringConvertibleMatrix)Distances).Rows = Weights.Rows;
     329      }
     330    }
     331
     332    private void AdjustWeightsMatrix() {
     333      if (Weights.Rows != Distances.Rows || Weights.Columns != Distances.Columns) {
     334        ((IStringConvertibleMatrix)Weights).Rows = Distances.Rows;
     335      }
     336    }
     337
     338    private void UpdateDistancesFromCoordinates() {
    276339      if (Coordinates != null && Coordinates.Columns == 2 && Coordinates.Rows > 1) {
    277340        DoubleMatrix distance = new DoubleMatrix(Coordinates.Rows, Coordinates.Rows);
Note: See TracChangeset for help on using the changeset viewer.