Changeset 10353 for branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.DataAnalysis.Symbolic/3.3/SymbolicDataAnalysisIslandGeneticAlgorithm.cs
- Timestamp:
- 01/17/14 13:05:47 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/DataAnalysis.IslandAlgorithms/HeuristicLab.Algorithms.DataAnalysis.Symbolic/3.3/SymbolicDataAnalysisIslandGeneticAlgorithm.cs
r10230 r10353 56 56 57 57 #region parameters 58 public IFixedValueParameter< IntValue> FixedSamplesParameter {59 get { return (IFixedValueParameter< IntValue>)Parameters[FixedSamplesParameterName]; }58 public IFixedValueParameter<PercentValue> FixedSamplesParameter { 59 get { return (IFixedValueParameter<PercentValue>)Parameters[FixedSamplesParameterName]; } 60 60 } 61 61 public IValueParameter<ItemArray<IntRange>> FixedSamplesPartitionsParameter { … … 71 71 72 72 #region properties 73 public intFixedSamples {73 public double FixedSamples { 74 74 get { return FixedSamplesParameter.Value.Value; } 75 75 set { FixedSamplesParameter.Value.Value = value; } … … 97 97 public SymbolicDataAnalysisIslandGeneticAlgorithm() 98 98 : base() { 99 Parameters.Add(new FixedValueParameter< IntValue>(FixedSamplesParameterName, "The number of fixed samples used for fitness calculation in each island.", new IntValue(0)));99 Parameters.Add(new FixedValueParameter<PercentValue>(FixedSamplesParameterName, "The number of fixed samples used for fitness calculation in each island.", new PercentValue(0.2))); 100 100 Parameters.Add(new ValueParameter<ItemArray<IntRange>>(FixedSamplesPartitionsParameterName, "The fixed samples partitions used for fitness calculation for every island.")); 101 101 Parameters.Add(new OptionalValueParameter<ISymbolicDataAnalysisIslandGeneticAlgorithmEvaluator>(EvaluatorParameterName, "The evaluator of the algorithm.")); … … 174 174 } 175 175 176 protected override void Problem_Reset(object sender, EventArgs e) {177 FixedSamples = Problem.FitnessCalculationPartition.Size / NumberOfIslands.Value;178 base.Problem_Reset(sender, e);179 }180 181 176 protected override void OnProblemChanged() { 182 177 Problem.FitnessCalculationPartition.ValueChanged += Problem_Reset; 183 FixedSamples = Problem.FitnessCalculationPartition.Size / NumberOfIslands.Value;184 178 185 179 if (Problem != null && EvaluatorParameter.Value == null) { … … 201 195 var samplesEnd = Problem.FitnessCalculationPartition.End; 202 196 var totalSamples = Problem.FitnessCalculationPartition.Size; 203 var fixedSamples = FixedSamples;197 var fixedSamples = (int)(FixedSamples * totalSamples); 204 198 var islands = NumberOfIslands.Value; 205 199 206 int offset = (int)Math.Ceiling(((double)(totalSamples - fixedSamples)) / (islands - 1)); 200 double shift = (double)((totalSamples - fixedSamples)) / (islands - 1); 201 int offset = (int)Math.Floor(shift); 202 double remainder = shift - offset; 203 207 204 List<IntRange> partitions = new List<IntRange>(); 208 205 for (int i = 0; i < islands; i++) { 209 var partitionStart = samplesStart + offset * i ;206 var partitionStart = samplesStart + offset * i + (int)(remainder * i); 210 207 partitions.Add(new IntRange(partitionStart, partitionStart + fixedSamples)); 211 208 } 212 209 213 //it can be the case that the last partitions exceeds the allowed samples 214 //move the last partition forward. 210 //if the last partitions exceeds the allowed samples move the last partition forward. 215 211 int exceedsSamples = partitions[partitions.Count - 1].End - samplesEnd; 216 212 if (exceedsSamples > 0) {
Note: See TracChangeset
for help on using the changeset viewer.