Free cookie consent management tool by TermsFeed Policy Generator

Changeset 7877


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

#1856:

  • Added Gilmore-Lawler lower bound
Location:
trunk/sources/HeuristicLab.Problems.QuadraticAssignment/3.3
Files:
2 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Problems.QuadraticAssignment/3.3/HeuristicLab.Problems.QuadraticAssignment-3.3.csproj

    r7646 r7877  
    114114    <Compile Include="Analyzers\QAPAlleleFrequencyAnalyzer.cs" />
    115115    <Compile Include="Analyzers\QAPPopulationDiversityAnalyzer.cs" />
     116    <Compile Include="BoundsCalculators\GilmoreLawlerBoundCalculator.cs" />
    116117    <Compile Include="Evaluators\QAPScrambleMoveEvaluator.cs" />
    117118    <Compile Include="Evaluators\QAPSwap2MoveEvaluator.cs" />
     
    202203      <Private>False</Private>
    203204    </ProjectReference>
     205    <ProjectReference Include="..\..\HeuristicLab.Problems.LinearAssignment\3.3\HeuristicLab.Problems.LinearAssignment-3.3.csproj">
     206      <Project>{7250653F-DE83-4069-8D34-8050E8E45EA1}</Project>
     207      <Name>HeuristicLab.Problems.LinearAssignment-3.3</Name>
     208    </ProjectReference>
    204209  </ItemGroup>
    205210  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
  • trunk/sources/HeuristicLab.Problems.QuadraticAssignment/3.3/Plugin.cs.frame

    r7558 r7877  
    3737  [PluginDependency("HeuristicLab.Persistence", "3.3")]
    3838  [PluginDependency("HeuristicLab.Problems.Instances", "3.3")]
     39  [PluginDependency("HeuristicLab.Problems.LinearAssignment", "3.3")]
    3940  public class HeuristicLabProblemsQuadraticAssignmentPlugin : PluginBase { }
    4041}
  • 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.