Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
01/17/14 13:05:47 (10 years ago)
Author:
mkommend
Message:

#1997: Changed data partition parameters to PercentValue types to enable the use relative numbers and fixed calculation of island partitions.

File:
1 edited

Legend:

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

    r10230 r10353  
    5656
    5757    #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]; }
    6060    }
    6161    public IValueParameter<ItemArray<IntRange>> FixedSamplesPartitionsParameter {
     
    7171
    7272    #region properties
    73     public int FixedSamples {
     73    public double FixedSamples {
    7474      get { return FixedSamplesParameter.Value.Value; }
    7575      set { FixedSamplesParameter.Value.Value = value; }
     
    9797    public SymbolicDataAnalysisIslandOffspringSelectionGeneticAlgorithm()
    9898      : 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)));
    100100      Parameters.Add(new ValueParameter<ItemArray<IntRange>>(FixedSamplesPartitionsParameterName, "The fixed samples partitions used for fitness calculation for every island."));
    101101      Parameters.Add(new OptionalValueParameter<ISymbolicDataAnalysisIslandGeneticAlgorithmEvaluator>(EvaluatorParameterName, "The evaluator of the algorithm."));
     
    170170    }
    171171
    172     protected override void Problem_Reset(object sender, EventArgs e) {
    173       FixedSamples = Problem.FitnessCalculationPartition.Size / NumberOfIslands.Value;
    174       base.Problem_Reset(sender, e);
    175     }
    176 
    177172    protected override void OnProblemChanged() {
    178173      Problem.FitnessCalculationPartition.ValueChanged += Problem_Reset;
    179       FixedSamples = Problem.FitnessCalculationPartition.Size / NumberOfIslands.Value;
    180174
    181175      if (Problem != null && EvaluatorParameter.Value == null) {
     
    197191      var samplesEnd = Problem.FitnessCalculationPartition.End;
    198192      var totalSamples = Problem.FitnessCalculationPartition.Size;
    199       var fixedSamples = FixedSamples;
     193      var fixedSamples = (int)(FixedSamples * totalSamples);
    200194      var islands = NumberOfIslands.Value;
    201195
    202       int offset = (int)Math.Ceiling(((double)(totalSamples - fixedSamples)) / (islands - 1));
     196      double shift = (double)((totalSamples - fixedSamples)) / (islands - 1);
     197      int offset = (int)Math.Floor(shift);
     198      double remainder = shift - offset;
     199
    203200      List<IntRange> partitions = new List<IntRange>();
    204201      for (int i = 0; i < islands; i++) {
    205         var partitionStart = samplesStart + offset * i;
     202        var partitionStart = samplesStart + offset * i + (int)(remainder * i);
    206203        partitions.Add(new IntRange(partitionStart, partitionStart + fixedSamples));
    207204      }
Note: See TracChangeset for help on using the changeset viewer.