Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
01/03/17 23:04:56 (7 years ago)
Author:
jzenisek
Message:

#2719 enhanced the optimizer's functionality

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.DatastreamAnalysis/HeuristicLab.DatastreamAnalysis/3.4/Datastream.cs

    r14536 r14538  
    4343    protected const string SlidingWindowStepWidthParameterName = "SlidingWindowStepWidth";
    4444    protected const string SlidingWindowMovementIntervalParameterName = "SlidingWindowMovementInterval";
     45    protected const string FitnessPartitionParameterName = "FitnessPartition";
    4546
    4647    #region parameter properites
     
    5051    }
    5152
    52     public IFixedValueParameter<IntRange> InitialSlidingWindowParameter {
    53       get { return (IFixedValueParameter<IntRange>) Parameters[InitialSlidingWindowParameterName]; }
    54     }
    55 
    56     public IFixedValueParameter<IntValue> SlidingWindowSizeParameter {
    57       get { return (IFixedValueParameter<IntValue>)Parameters[InitialSlidingWindowParameterName]; }
    58     }
    59 
    60     public IFixedValueParameter<IntValue> SlidingWindowStepWidthParameter {
    61       get { return (IFixedValueParameter<IntValue>)Parameters[SlidingWindowStepWidthParameterName]; }
    62     }
    63 
    64     public IFixedValueParameter<IntValue> SlidingWindowMovementIntervalParameter {
    65       get { return (IFixedValueParameter<IntValue>)Parameters[SlidingWindowMovementIntervalParameterName]; }
    66     }
    67 
     53    public IValueParameter<IntRange> InitialSlidingWindowParameter {
     54      get { return (IValueParameter<IntRange>) Parameters[InitialSlidingWindowParameterName]; }
     55    }
     56
     57    public IValueParameter<IntValue> SlidingWindowSizeParameter {
     58      get { return (IValueParameter<IntValue>) Parameters[SlidingWindowSizeParameterName]; }
     59    }
     60
     61    public IValueParameter<IntValue> SlidingWindowStepWidthParameter {
     62      get { return (IValueParameter<IntValue>) Parameters[SlidingWindowStepWidthParameterName]; }
     63    }
     64
     65    public IValueParameter<IntValue> SlidingWindowMovementIntervalParameter {
     66      get { return (IValueParameter<IntValue>) Parameters[SlidingWindowMovementIntervalParameterName]; }
     67    }
     68
     69    //public IValueParameter<IntRange> FitnessPartitionParameter {
     70    //  get { return (IValueParameter<IntRange>) Parameters[FitnessPartitionParameterName]; }
     71    //}
    6872
    6973    #endregion
     
    7579      set {
    7680        if(value == null) throw new ArgumentNullException("problemData", "The provided value for the problemData is null.");
    77         if (value == ProblemData) return;
    7881        ProblemDataParameter.Value = value;
    79       }
    80     }
     82        //OnProblemDataChanged();
     83      }
     84    }
     85   
    8186
    8287    public IntRange InitialSlidingWindow {
    8388      get { return InitialSlidingWindowParameter.Value; }
     89      set { InitialSlidingWindowParameter.Value = value; }
    8490    }
    8591
    8692    public IntValue SlidingWindowSize {
    8793      get { return SlidingWindowSizeParameter.Value; }
     94      set { SlidingWindowSizeParameter.Value = value; }
    8895    }
    8996
    9097    public IntValue SlidingWindowStepWidth {
    9198      get { return SlidingWindowStepWidthParameter.Value; }
     99      set { SlidingWindowStepWidthParameter.Value = value; }
    92100    }
    93101
    94102    public IntValue SlidingWindowMovementInterval {
    95103      get { return SlidingWindowMovementIntervalParameter.Value; }
     104      set { SlidingWindowMovementIntervalParameter.Value = value; }
    96105    }
    97106
     
    101110
    102111    public IntRange FitnessPartition { get; set; }
     112
     113    public bool UpdateAvailable {
     114      get { return false; }
     115    }
    103116
    104117    public bool SlidingWindowMovementPossible {
    105118      get {
    106119        return ProblemData != null && ProblemData.Dataset != null &&
    107                FitnessPartition.End + SlidingWindowStepWidth.Value <= ProblemData.Dataset.Rows;
    108         // TODO: add external datastream, hub, etc to condition
     120               (
     121                (FitnessPartition.End + SlidingWindowStepWidth.Value <= ProblemData.Dataset.Rows) // shift end
     122                || (FitnessPartition.Size > SlidingWindowSize.Value && (FitnessPartition.Start + SlidingWindowStepWidth.Value) < FitnessPartition.End) // shift start
     123               );
    109124      }
    110125    }
     
    112127    public bool SlidingWindowEvaluationPossible {
    113128      get {
    114         return ProblemData != null && ProblemData.Dataset != null &&
    115               FitnessPartition.Size > 0;
     129        //return ProblemData != null && ProblemData.Dataset != null && ProblemData.Dataset.Rows > 0 && FitnessPartition.Size > 0;
     130        return FitnessPartition.Size > 0;
    116131      }
    117132    }
     
    120135      if (ProblemData?.Dataset == null || ProblemData.Dataset.Rows == 0) return false;
    121136      if (FitnessPartition.End + SlidingWindowStepWidth.Value > ProblemData.Dataset.Rows) return false;
    122      
    123       if (FitnessPartition.Size > SlidingWindowSize.Value) {
    124         FitnessPartition.Start += SlidingWindowStepWidth.Value;
    125       } else if (FitnessPartition.Size == SlidingWindowSize.Value) {
     137
     138      if (FitnessPartition.Size == SlidingWindowSize.Value) {
    126139        FitnessPartition.Start += SlidingWindowStepWidth.Value;
    127140        FitnessPartition.End += SlidingWindowStepWidth.Value;
    128       } else {
     141      } else { 
    129142        FitnessPartition.End += SlidingWindowStepWidth.Value;
    130       }   
     143        FitnessPartition.Start += FitnessPartition.End - SlidingWindowSize.Value;
     144      }
     145
     146      //if (FitnessPartition.Size > SlidingWindowSize.Value) {
     147      //  FitnessPartition.Start += SlidingWindowStepWidth.Value;
     148      //} else if (FitnessPartition.Size == SlidingWindowSize.Value) {
     149      //  FitnessPartition.Start += SlidingWindowStepWidth.Value;
     150      //  FitnessPartition.End += SlidingWindowStepWidth.Value;
     151      //} else {
     152      //  FitnessPartition.End += SlidingWindowStepWidth.Value;
     153      //  if (FitnessPartition.Size > SlidingWindowSize.Value) {
     154      //    FitnessPartition.Start = FitnessPartition.End - FitnessPartition.Size;
     155      //  }
     156      //}   
    131157      return true;
    132158    }
     
    141167    private void AfterDeserialization() {
    142168      RegisterParameterEvents();
     169      RecoverState();
    143170    }
    144171
    145172    protected Datastream(Datastream original, Cloner cloner) : base(original, cloner) {
    146173      RegisterParameterEvents();
     174      RecoverState();
    147175    }
    148176
     
    151179    }
    152180
    153     public Datastream() {
     181    public Datastream() : base() {
    154182      Parameters.Add(new ValueParameter<RegressionProblemData>(ProblemDataParameterName, "ProblemData for analysis with selected ensembles.", null));
    155       Parameters.Add(new FixedValueParameter<IntRange>(InitialSlidingWindowParameterName, "Initial sliding window boundaries", new IntRange(0, 1)));
    156       Parameters.Add(new FixedValueParameter<IntValue>(SlidingWindowSizeParameterName, "Sliding window size", new IntValue(1)));
     183      Parameters.Add(new FixedValueParameter<IntRange>(InitialSlidingWindowParameterName, "Initial sliding window boundaries", new IntRange(0, 5)));
     184      Parameters.Add(new FixedValueParameter<IntValue>(SlidingWindowSizeParameterName, "Sliding window size", new IntValue(5)));
    157185      Parameters.Add(new FixedValueParameter<IntValue>(SlidingWindowStepWidthParameterName, "Sliding window step width", new IntValue(1)));
    158       Parameters.Add(new FixedValueParameter<IntValue>(SlidingWindowMovementIntervalParameterName, "Sliding window movement interval (milliseconds)", new IntValue(1000)));
     186      Parameters.Add(new FixedValueParameter<IntValue>(SlidingWindowMovementIntervalParameterName, "Sliding window movement interval (milliseconds)", new IntValue(2000)));
     187      RegisterParameterEvents();
    159188      InitializeState();
    160189    }
    161190    #endregion
    162191
    163 
    164     public void InitializeState() {
     192    public void InitializeState(){
    165193      if (ProblemData == null || ProblemData.Dataset == null || ProblemData.Dataset.Rows == 0) {
    166194        FitnessPartition = new IntRange(0, 0);
     
    173201    }
    174202
     203    public void RecoverState() {
     204      if (ProblemData == null || ProblemData.Dataset == null || ProblemData.Dataset.Rows == 0) {
     205        FitnessPartition = new IntRange(0, 0);
     206      } else {
     207        if(FitnessPartition == null) FitnessPartition = (IntRange)InitialSlidingWindow.Clone();
     208        if (FitnessPartition.End > ProblemData.Dataset.Rows) {
     209          FitnessPartition.End = ProblemData.Dataset.Rows;
     210        }
     211      }
     212    }
     213
    175214    public event EventHandler ProblemDataChanged;
    176 
     215    public event EventHandler Reset;
     216    public event EventHandler SlidingWindowChanged;
     217
     218
     219    //protected virtual void OnProblemDataChanged() {
     220    //  EventHandler handler = ProblemDataChanged;
     221    //  if(handler != null) handler(this, EventArgs.Empty);
     222    //}
     223
     224    //protected virtual void OnReset() {
     225    //  EventHandler handler = Reset;
     226    //  if (handler != null) handler(this, EventArgs.Empty);
     227    //}
    177228
    178229    private void RegisterParameterEvents() {
    179230      ProblemDataParameter.ValueChanged += new EventHandler(ProblemData_ValueChanged);
     231      //SlidingWindowSizeParameter.ValueChanged += new EventHandler(SlidingWindow_Changed);
     232      InitialSlidingWindowParameter.ValueChanged += new EventHandler(SlidingWindow_Changed);
    180233    }
    181234
     
    183236      if (e == null) return;
    184237
     238      InitializeState();
    185239      DatastreamAnalysisUtil.RaiseEvent(this, ProblemDataChanged);
    186240    }
    187241
     242    private void SlidingWindow_Changed(object sender, EventArgs e) {
     243      InitializeState();
     244    }
     245
     246
     247    // TODO
     248    public IEnumerable<IParameterizedItem> ExecutionContextItems { get; }
    188249   
    189 
    190250  }
    191251}
Note: See TracChangeset for help on using the changeset viewer.