Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
12/16/13 16:11:31 (10 years ago)
Author:
mkommend
Message:

#1997: Updated symbolic island algorithm evaluators and added automatic wiring of evaluators.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.DataAnalysis.Symbolic/3.3/RandomSamplesEvaluator .cs

    r10177 r10230  
    4141    private const string FitnessCalculationPartitionParameterName = "FitnessCalculationPartition";
    4242    private const string FixedSamplesPartitionParameterName = "FixedSamplesPartition";
     43    private const string DataMigrationIntervalParameterName = "DataMigrationInterval";
    4344    private const string RandomSamplesParameterName = "RandomSamples";
     45    private const string IterationsParameterName = "Iterations";
     46    private const string MaximumIterationsParameterName = "Maximum Iterations";
    4447
    4548    #region parameter properties
     
    6265      get { return (ILookupParameter<IntRange>)Parameters[FixedSamplesPartitionParameterName]; }
    6366    }
     67    public IValueLookupParameter<IntValue> DataMigrationIntervalParameter {
     68      get { return (IValueLookupParameter<IntValue>)Parameters[DataMigrationIntervalParameterName]; }
     69    }
    6470    public IFixedValueParameter<IntValue> RandomSamplesParameter {
    6571      get { return (IFixedValueParameter<IntValue>)Parameters[RandomSamplesParameterName]; }
     72    }
     73    public ILookupParameter<IntValue> IterationsParameter {
     74      get { return (ILookupParameter<IntValue>)Parameters[IterationsParameterName]; }
     75    }
     76    public IValueLookupParameter<IntValue> MaximumIterationsParameter {
     77      get { return (IValueLookupParameter<IntValue>)Parameters[MaximumIterationsParameterName]; }
    6678    }
    6779    #endregion
     
    93105      Parameters.Add(new LookupParameter<IntRange>(FixedSamplesPartitionParameterName, "The data partition which is used to calculate the fitness on the fixed samples."));
    94106      Parameters.Add(new FixedValueParameter<IntValue>(RandomSamplesParameterName, "The number of random samples used for fitness calculation in each island.", new IntValue()));
     107      Parameters.Add(new ValueLookupParameter<IntValue>(DataMigrationIntervalParameterName, "The number of generations that should pass between data migration phases."));
     108      Parameters.Add(new LookupParameter<IntValue>(IterationsParameterName, "The number of performed iterations."));
     109      Parameters.Add(new ValueLookupParameter<IntValue>(MaximumIterationsParameterName, "The maximum number of performed iterations.") { Hidden = true });
    95110    }
    96111
     
    103118      var randomSamples = RandomSamples;
    104119
    105       //create fixed rows enumerable
    106       var rows = Enumerable.Range(fixedSamples.Start, fixedSamples.Size);
    107       //create randomly chosen rows enumerable
    108       if (randomSamples > 0) {
    109         if (randomSamples > samples.Size - fixedSamples.Size) {
    110           var error = string.Format("Could not select {0} random samples, because there are {1} total samples present from which {2} where used in the fixed partition. Please lower the number of random samples in the algorithm configuration.", randomSamples, samples.Size, fixedSamples.Size);
    111           throw new OperatorExecutionException(this, error);
     120      var dataMigrationInterval = DataMigrationIntervalParameter.ActualValue.Value;
     121      var generationValue = IterationsParameter.ActualValue;
     122      var generation = generationValue == null ? 0 : generationValue.Value;
     123
     124      //calculat new rows for evaluation
     125      if (generation % dataMigrationInterval == 0) {
     126        //create fixed rows enumerable
     127        var rows = Enumerable.Range(fixedSamples.Start, fixedSamples.Size);
     128        //create randomly chosen rows enumerable
     129        if (randomSamples > 0) {
     130          if (randomSamples > samples.Size - fixedSamples.Size) {
     131            var error = string.Format("Could not select {0} random samples, because there are {1} total samples present from which {2} where used in the fixed partition. Please lower the number of random samples in the algorithm configuration.", randomSamples, samples.Size, fixedSamples.Size);
     132            throw new OperatorExecutionException(this, error);
     133          }
     134          var randomRows = Enumerable.Range(samples.Start, samples.Size).Where(r => r < fixedSamples.Start || r >= fixedSamples.End);
     135          randomRows = randomRows.SampleRandomWithoutRepetition(RandomParameter.ActualValue, randomSamples, samples.Size - fixedSamples.Size);
     136
     137          rows = rows.Concat(randomRows);
    112138        }
    113         var randomRows = Enumerable.Range(samples.Start, samples.Size).Where(r => r < fixedSamples.Start || r >= fixedSamples.End);
    114         randomRows = randomRows.SampleRandomWithoutRepetition(RandomParameter.ActualValue, randomSamples, samples.Size - fixedSamples.Size);
     139        //filter out test rows
     140        rows = rows.Where(r => r < problemData.TestPartition.Start || r > problemData.TestPartition.End);
     141        ExecutionContext.Scope.Variables.Remove("Rows");
     142        ExecutionContext.Scope.Variables.Add(new HeuristicLab.Core.Variable("Rows", new EnumerableItem<int>(rows)));
     143      }
    115144
    116         rows = rows.Concat(randomRows);
    117       }
    118       //filter out test rows
    119       rows = rows.Where(r => r < problemData.TestPartition.Start || r > problemData.TestPartition.End);
    120 
    121       //execution context is created manually to be able to clear the rows parameter easily
    122145      var executionContext = new ExecutionContext(ExecutionContext, evaluator, ExecutionContext.Scope);
    123 
    124       //TODO change to lookup parameter
    125       executionContext.Scope.Variables.Remove("Rows");
    126       executionContext.Scope.Variables.Add(new HeuristicLab.Core.Variable("Rows", new EnumerableItem<int>(rows)));
    127146      var successor = evaluator.Execute(executionContext, this.CancellationToken);
    128147      return new OperationCollection(successor, base.Apply());
Note: See TracChangeset for help on using the changeset viewer.