Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
10/15/15 12:18:42 (9 years ago)
Author:
ascheibe
Message:

#2377 applied and improved bburlacus patch

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Analysis/3.3/PopulationSimilarityAnalysis/PopulationSimilarityAnalyzer.cs

    r12076 r13005  
    3939  public class PopulationSimilarityAnalyzer : SingleSuccessorOperator, IAnalyzer, ISimilarityBasedOperator {
    4040    private const string DiversityResultNameParameterName = "DiversityResultsName";
     41    private const string ExecuteInParallelParameterName = "ExecuteInParallel";
     42    private const string MaxDegreeOfParallelismParameterName = "MaxDegreeOfParallelism";
    4143
    4244    #region Backwards compatible code, remove with 3.4
     
    7173      get { return (FixedValueParameter<StringValue>)Parameters[DiversityResultNameParameterName]; }
    7274    }
     75    public IFixedValueParameter<BoolValue> ExecuteInParallelParameter {
     76      get { return (IFixedValueParameter<BoolValue>)Parameters[ExecuteInParallelParameterName]; }
     77    }
     78    public IFixedValueParameter<IntValue> MaxDegreeOfParallelismParameter {
     79      get { return (IFixedValueParameter<IntValue>)Parameters[MaxDegreeOfParallelismParameterName]; }
     80    }
    7381
    7482    public string DiversityResultName {
     
    7785    }
    7886
     87    public bool ExecuteInParallel {
     88      get { return ExecuteInParallelParameter.Value.Value; }
     89      set { ExecuteInParallelParameter.Value.Value = value; }
     90    }
     91
     92    public int MaxDegreeOfParallelism {
     93      get { return MaxDegreeOfParallelismParameter.Value.Value; }
     94      set { MaxDegreeOfParallelismParameter.Value.Value = value; }
     95    }
     96
    7997    [StorableConstructor]
    8098    protected PopulationSimilarityAnalyzer(bool deserializing) : base(deserializing) { }
    81     protected PopulationSimilarityAnalyzer(PopulationSimilarityAnalyzer original, Cloner cloner) : base(original, cloner) { }
     99
     100    protected PopulationSimilarityAnalyzer(PopulationSimilarityAnalyzer original, Cloner cloner)
     101      : base(original, cloner) {
     102      RegisterParametersEventHandlers();
     103    }
     104
    82105    public PopulationSimilarityAnalyzer(IEnumerable<ISolutionSimilarityCalculator> validSimilarityCalculators)
    83106      : base() {
     
    89112      Parameters.Add(new LookupParameter<IntValue>("UpdateCounter", "The value which counts how many times the operator was called since the last update.", "PopulationDiversityAnalyzerUpdateCounter"));
    90113      Parameters.Add(new FixedValueParameter<StringValue>(DiversityResultNameParameterName, "Specifies how the diversity results should be named.", new StringValue("PopulationDiversity")));
     114      Parameters.Add(new FixedValueParameter<BoolValue>(ExecuteInParallelParameterName, "Specifies whether similarity calculations should be parallelized.", new BoolValue(false)));
     115      Parameters.Add(new FixedValueParameter<IntValue>(MaxDegreeOfParallelismParameterName, "Specifies the maximum number of threads when calculating similarities in parallel.", new IntValue(-1)));
    91116
    92117      var similarityCalculators = SimilarityCalculatorParameter.ValidValues;
    93       foreach (var sc in validSimilarityCalculators)
     118      foreach (var sc in validSimilarityCalculators) {
    94119        similarityCalculators.Add(sc);
    95 
     120      }
    96121
    97122      ResultsParameter.Hidden = true;
    98123      UpdateCounterParameter.Hidden = true;
     124      ExecuteInParallelParameter.Hidden = true;
     125      MaxDegreeOfParallelismParameter.Hidden = true;
     126
     127      RegisterParametersEventHandlers();
     128    }
     129
     130    private void RegisterParametersEventHandlers() {
     131      ExecuteInParallelParameter.Value.ValueChanged += Value_ValueChanged;
     132      MaxDegreeOfParallelismParameter.Value.ValueChanged += Value_ValueChanged;
     133    }
     134
     135    private void Value_ValueChanged(object sender, EventArgs e) {
     136      var similarityCalculators = SimilarityCalculatorParameter.ValidValues;
     137      foreach (var similarityCalculator in similarityCalculators) {
     138        similarityCalculator.ExecuteInParallel = ExecuteInParallel;
     139        similarityCalculator.MaxDegreeOfParallelism = MaxDegreeOfParallelism;
     140      }
    99141    }
    100142
     
    113155        Parameters.Add(new ConstrainedValueParameter<ISolutionSimilarityCalculator>("SimilarityCalculator", "The similarity calculator that should be used to calculate solution similarity."));
    114156
    115       SimilarityCalculatorParameter.ValidValues.Add(oldSimilarityCalculator);
     157      if (oldSimilarityCalculator != null)
     158        SimilarityCalculatorParameter.ValidValues.Add(oldSimilarityCalculator);
     159
     160      if (!Parameters.ContainsKey(ExecuteInParallelParameterName)) {
     161        Parameters.Add(new FixedValueParameter<BoolValue>(ExecuteInParallelParameterName,
     162          "Specifies whether similarity calculations should be parallelized.", new BoolValue(false)));
     163        ExecuteInParallelParameter.Hidden = true;
     164      }
     165      if (!Parameters.ContainsKey(MaxDegreeOfParallelismParameterName)) {
     166        Parameters.Add(new FixedValueParameter<IntValue>(MaxDegreeOfParallelismParameterName,
     167          "Specifies the maximum number of threads when calculating similarities in parallel.", new IntValue(-1)));
     168        MaxDegreeOfParallelismParameter.Hidden = true;
     169      }
     170
     171      RegisterParametersEventHandlers();
    116172      #endregion
    117173    }
Note: See TracChangeset for help on using the changeset viewer.