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/SymbolicDataAnalysisIslandGeneticAlgorithm.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 SymbolicDataAnalysisIslandGeneticAlgorithm()
    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."));
     
    174174    }
    175175
    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 
    181176    protected override void OnProblemChanged() {
    182177      Problem.FitnessCalculationPartition.ValueChanged += Problem_Reset;
    183       FixedSamples = Problem.FitnessCalculationPartition.Size / NumberOfIslands.Value;
    184178
    185179      if (Problem != null && EvaluatorParameter.Value == null) {
     
    201195      var samplesEnd = Problem.FitnessCalculationPartition.End;
    202196      var totalSamples = Problem.FitnessCalculationPartition.Size;
    203       var fixedSamples = FixedSamples;
     197      var fixedSamples = (int)(FixedSamples * totalSamples);
    204198      var islands = NumberOfIslands.Value;
    205199
    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
    207204      List<IntRange> partitions = new List<IntRange>();
    208205      for (int i = 0; i < islands; i++) {
    209         var partitionStart = samplesStart + offset * i;
     206        var partitionStart = samplesStart + offset * i + (int)(remainder * i);
    210207        partitions.Add(new IntRange(partitionStart, partitionStart + fixedSamples));
    211208      }
    212209
    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.
    215211      int exceedsSamples = partitions[partitions.Count - 1].End - samplesEnd;
    216212      if (exceedsSamples > 0) {
Note: See TracChangeset for help on using the changeset viewer.