Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
03/15/11 09:51:22 (14 years ago)
Author:
svonolfe
Message:

Implemented review comments from swagner (#1392)

Location:
branches/SuccessProgressAnalysis/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/SuccessfulOffspringAnalysis
Files:
1 added
1 copied

Legend:

Unmodified
Added
Removed
  • branches/SuccessProgressAnalysis/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/SuccessfulOffspringAnalysis/SuccessfulOffspringAnalyzer.cs

    r5674 r5682  
    3333using HeuristicLab.Analysis;
    3434
    35 namespace HeuristicLab.Algorithms.OffspringSelectionAlgorithm.SuccessProgressAnalysis {
     35namespace HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm {
    3636  /// <summary>
    3737  /// An operator for analyzing the solution diversity in a population.
    3838  /// </summary>
    39   [Item("SuccessProgressAnalyzer", "An operator for analyzing the success progress in a population.")]
     39  [Item("SuccessfulOffspringAnalyzer", "An operator for analyzing certain properties in the successful offspring. The properties to be analyzed can be specified in the CollectedValues parameter.")]
    4040  [StorableClass]
    41   public sealed class SuccessProgressAnalyzer: SingleSuccessorOperator, IAnalyzer {
     41  public sealed class SuccessfulOffspringAnalyzer : SingleSuccessorOperator, IAnalyzer {
    4242    public ValueParameter<StringValue> SuccessfulOffspringFlag {
    4343      get { return (ValueParameter<StringValue>)Parameters["SuccessfulOffspringFlag"]; }
     
    5252    }
    5353
    54     public LookupParameter<IntValue> Generations {
     54    public ILookupParameter<IntValue> GenerationsParameter {
    5555      get { return (LookupParameter<IntValue>)Parameters["Generations"]; }
     56    }
     57
     58    public ValueParameter<IntValue> DepthParameter {
     59      get { return (ValueParameter<IntValue>)Parameters["Depth"]; }
    5660    }
    5761   
    5862    public override IDeepCloneable Clone(Cloner cloner) {
    59       return new SuccessProgressAnalyzer(this, cloner);
     63      return new SuccessfulOffspringAnalyzer(this, cloner);
    6064    }   
    6165    [StorableConstructor]
    62     private SuccessProgressAnalyzer(bool deserializing) : base(deserializing) { }
    63     private SuccessProgressAnalyzer(SuccessProgressAnalyzer original, Cloner cloner) : base(original, cloner) { }
    64     public SuccessProgressAnalyzer()
     66    private SuccessfulOffspringAnalyzer(bool deserializing) : base(deserializing) { }
     67    private SuccessfulOffspringAnalyzer(SuccessfulOffspringAnalyzer original, Cloner cloner) : base(original, cloner) { }
     68    public SuccessfulOffspringAnalyzer()
    6569      : base() {
    66         Parameters.Add(new ValueParameter<StringValue>("SuccessfulOffspringFlag", "Indicates if the individual was successful.", new StringValue("SuccessfulOffspring")));
    67         Parameters.Add(new ValueParameter<ItemCollection<StringValue>>("CollectedValues", "The values that should be collected.", new ItemCollection<StringValue>()));
     70        Parameters.Add(new ValueParameter<StringValue>("SuccessfulOffspringFlag", "The name of the flag which indicates if the individual was successful.", new StringValue("SuccessfulOffspring")));
     71        Parameters.Add(new ValueParameter<ItemCollection<StringValue>>("CollectedValues", "The properties of the successful offspring that should be collected.", new ItemCollection<StringValue>()));
    6872        Parameters.Add(new ValueLookupParameter<ResultCollection>("Results", "The result collection where the succedd progress analysis results should be stored."));
    6973        Parameters.Add(new LookupParameter<IntValue>("Generations", "The current number of generations."));
     74        Parameters.Add(new ValueParameter<IntValue>("Depth", "The depth of the individuals in the scope tree.", new IntValue(1)));
    7075    }
    7176
    7277    public override IOperation Apply() {
    7378      ResultCollection results = ResultsParameter.ActualValue;
    74      
     79
     80      List<IScope> scopes = new List<IScope>() { ExecutionContext.Scope };
     81      for (int i = 0; i < DepthParameter.Value.Value; i++)
     82        scopes = scopes.Select(x => (IEnumerable<IScope>)x.SubScopes).Aggregate((a, b) => a.Concat(b)).ToList();
     83
    7584      ItemCollection<StringValue> collectedValues = CollectedValues.Value;
    7685        foreach (StringValue collected in collectedValues) {
     86          //collect the values of the successful offspring
    7787          Dictionary<String, int> counts = new Dictionary<String, int>();
    78           for (int i = 0; i < ExecutionContext.Scope.SubScopes.Count; i++) {
    79             IScope child = ExecutionContext.Scope.SubScopes[i];
     88          for (int i = 0; i < scopes.Count; i++) {
     89            IScope child = scopes[i];
    8090            string successfulOffspringFlag = SuccessfulOffspringFlag.Value.Value;
    8191            if (child.Variables.ContainsKey(collected.Value) &&
     
    92102          }
    93103
     104          //create a data table containing the collected values
    94105          DataTable successProgressAnalysis;
    95106          string resultKey = "Success Progress " + collected.Value;
     
    111122            if (!successProgressAnalysis.Rows.ContainsKey(value)) {
    112123              row = new DataRow(value);
    113               int iterations = Generations.ActualValue.Value;
     124              int iterations = GenerationsParameter.ActualValue.Value;
    114125
     126              //fill up all values seen the first time
    115127              for (int i = 1; i < iterations; i++)
    116128                row.Values.Add(0);
     
    124136          }
    125137
     138          //fill up all values that are not present in the current generation
    126139          foreach (DataRow row in successProgressAnalysis.Rows) {
    127140            if (!counts.ContainsKey(row.Name))
Note: See TracChangeset for help on using the changeset viewer.