Changeset 10230 for branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.DataAnalysis.Symbolic/3.3/RandomSamplesEvaluator .cs
- Timestamp:
- 12/16/13 16:11:31 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.DataAnalysis.Symbolic/3.3/RandomSamplesEvaluator .cs
r10177 r10230 41 41 private const string FitnessCalculationPartitionParameterName = "FitnessCalculationPartition"; 42 42 private const string FixedSamplesPartitionParameterName = "FixedSamplesPartition"; 43 private const string DataMigrationIntervalParameterName = "DataMigrationInterval"; 43 44 private const string RandomSamplesParameterName = "RandomSamples"; 45 private const string IterationsParameterName = "Iterations"; 46 private const string MaximumIterationsParameterName = "Maximum Iterations"; 44 47 45 48 #region parameter properties … … 62 65 get { return (ILookupParameter<IntRange>)Parameters[FixedSamplesPartitionParameterName]; } 63 66 } 67 public IValueLookupParameter<IntValue> DataMigrationIntervalParameter { 68 get { return (IValueLookupParameter<IntValue>)Parameters[DataMigrationIntervalParameterName]; } 69 } 64 70 public IFixedValueParameter<IntValue> RandomSamplesParameter { 65 71 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]; } 66 78 } 67 79 #endregion … … 93 105 Parameters.Add(new LookupParameter<IntRange>(FixedSamplesPartitionParameterName, "The data partition which is used to calculate the fitness on the fixed samples.")); 94 106 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 }); 95 110 } 96 111 … … 103 118 var randomSamples = RandomSamples; 104 119 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); 112 138 } 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 } 115 144 116 rows = rows.Concat(randomRows);117 }118 //filter out test rows119 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 easily122 145 var executionContext = new ExecutionContext(ExecutionContext, evaluator, ExecutionContext.Scope); 123 124 //TODO change to lookup parameter125 executionContext.Scope.Variables.Remove("Rows");126 executionContext.Scope.Variables.Add(new HeuristicLab.Core.Variable("Rows", new EnumerableItem<int>(rows)));127 146 var successor = evaluator.Execute(executionContext, this.CancellationToken); 128 147 return new OperationCollection(successor, base.Apply());
Note: See TracChangeset
for help on using the changeset viewer.