Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
05/23/12 16:25:40 (12 years ago)
Author:
abeham
Message:

#1856:

  • Added Gilmore-Lawler lower bound
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Problems.QuadraticAssignment/3.3/QuadraticAssignmentProblem.cs

    r7768 r7877  
    6060      get { return (IValueParameter<DoubleMatrix>)Parameters["Distances"]; }
    6161    }
     62    public IValueParameter<DoubleValue> LowerBoundParameter {
     63      get { return (IValueParameter<DoubleValue>)Parameters["LowerBound"]; }
     64    }
     65    public IValueParameter<DoubleValue> AverageQualityParameter {
     66      get { return (IValueParameter<DoubleValue>)Parameters["AverageQuality"]; }
     67    }
    6268    #endregion
    6369
     
    7884      get { return DistancesParameter.Value; }
    7985      set { DistancesParameter.Value = value; }
     86    }
     87    public DoubleValue LowerBound {
     88      get { return LowerBoundParameter.Value; }
     89      set { LowerBoundParameter.Value = value; }
     90    }
     91    public DoubleValue AverageQuality {
     92      get { return AverageQualityParameter.Value; }
     93      set { AverageQualityParameter.Value = value; }
    8094    }
    8195
     
    105119      Parameters.Add(new ValueParameter<DoubleMatrix>("Weights", "The strength of the connection between the facilities.", new DoubleMatrix(5, 5)));
    106120      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)));
     121      Parameters.Add(new OptionalValueParameter<DoubleValue>("LowerBound", "The Gilmore-Lawler lower bound to the solution quality."));
     122      Parameters.Add(new OptionalValueParameter<DoubleValue>("AverageQuality", "The expected quality of a random solution."));
    107123
    108124      Maximization.Value = false;
    109125      MaximizationParameter.Hidden = true;
    110126
     127      WeightsParameter.GetsCollected = false;
    111128      Weights = new DoubleMatrix(new double[,] {
    112129        { 0, 1, 0, 0, 1 },
     
    117134      });
    118135
     136      DistancesParameter.GetsCollected = false;
    119137      Distances = new DoubleMatrix(new double[,] {
    120138        {   0, 360, 582, 582, 360 },
     
    153171        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.", d));
    154172      }
     173      if (!Parameters.ContainsKey("LowerBound")) {
     174        Parameters.Add(new OptionalValueParameter<DoubleValue>("LowerBound", "The Gilmore-Lawler lower bound to the solution quality."));
     175        LowerBound = new DoubleValue(GilmoreLawlerBoundCalculator.CalculateLowerBound(Weights, Distances));
     176      }
     177      if (!Parameters.ContainsKey("AverageQuality")) {
     178        Parameters.Add(new OptionalValueParameter<DoubleValue>("AverageQuality", "The expected quality of a random solution."));
     179        AverageQuality = new DoubleValue(Weights.Average() * Distances.Average() * Weights.Rows * Weights.Rows);
     180      }
     181      #endregion
    155182      RegisterEventHandlers();
    156       #endregion
    157183    }
    158184
     
    186212      Weights.RowsChanged += new EventHandler(Weights_RowsChanged);
    187213      Weights.ColumnsChanged += new EventHandler(Weights_ColumnsChanged);
     214      Weights.ToStringChanged += new EventHandler(Weights_ToStringChanged);
    188215      ParameterizeSolutionCreator();
    189216      ParameterizeEvaluator();
     
    211238      }
    212239    }
     240    private void Weights_ToStringChanged(object sender, EventArgs e) {
     241      UpdateParameterValues();
     242    }
    213243    private void DistancesParameter_ValueChanged(object sender, EventArgs e) {
    214244      Distances.RowsChanged += new EventHandler(Distances_RowsChanged);
    215245      Distances.ColumnsChanged += new EventHandler(Distances_ColumnsChanged);
     246      Distances.ToStringChanged += new EventHandler(Distances_ToStringChanged);
    216247      ParameterizeSolutionCreator();
    217248      ParameterizeEvaluator();
     
    239270      }
    240271    }
     272    private void Distances_ToStringChanged(object sender, EventArgs e) {
     273      UpdateParameterValues();
     274    }
    241275    #endregion
    242276
    243     #region Helpers
    244277    private void RegisterEventHandlers() {
    245278      SolutionCreator.PermutationParameter.ActualNameChanged += new EventHandler(SolutionCreator_PermutationParameter_ActualNameChanged);
     
    248281      Weights.RowsChanged += new EventHandler(Weights_RowsChanged);
    249282      Weights.ColumnsChanged += new EventHandler(Weights_ColumnsChanged);
     283      Weights.ToStringChanged += new EventHandler(Weights_ToStringChanged);
    250284      DistancesParameter.ValueChanged += new EventHandler(DistancesParameter_ValueChanged);
    251285      Distances.RowsChanged += new EventHandler(Distances_RowsChanged);
    252286      Distances.ColumnsChanged += new EventHandler(Distances_ColumnsChanged);
    253     }
    254 
     287      Distances.ToStringChanged += new EventHandler(Distances_ToStringChanged);
     288    }
     289
     290    #region Helpers
    255291    private void InitializeOperators() {
    256292      var defaultOperators = new HashSet<IPermutationOperator>(new IPermutationOperator[] {
     
    363399      }
    364400    }
     401
     402    private void UpdateParameterValues() {
     403      LowerBound = new DoubleValue(GilmoreLawlerBoundCalculator.CalculateLowerBound(Weights, Distances));
     404      AverageQuality = new DoubleValue(Weights.Average() * Distances.Average() * Weights.Rows * Weights.Rows);
     405    }
    365406    #endregion
    366407
     
    407448      BestKnownSolution = null;
    408449      BestKnownSolutions = null;
     450      UpdateParameterValues();
    409451    }
    410452
Note: See TracChangeset for help on using the changeset viewer.