Changeset 10196


Ignore:
Timestamp:
12/05/13 11:27:14 (6 years ago)
Author:
mkommend
Message:

#2123: Implemented reduction operations for BoolValues in the DataReducer.

Location:
trunk/sources/HeuristicLab.Operators/3.3
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Operators/3.3/DataReducer.cs

    r9456 r10196  
    6969    public override IOperation Apply() {
    7070      var values = ParameterToReduce.ActualValue;
    71       if (values.Count() > 0) {
    72         if (values.All(x => typeof(IntValue).IsAssignableFrom(x.GetType()))) {
    73           CalculateResult(values.OfType<IntValue>().Select(x => x.Value), values.First().GetType());
    74         } else if (values.All(x => typeof(DoubleValue).IsAssignableFrom(x.GetType()))) {
    75           CalculateResult(values.OfType<DoubleValue>().Select(x => x.Value), values.First().GetType());
    76         } else if (values.All(x => typeof(TimeSpanValue).IsAssignableFrom(x.GetType()))) {
    77           CalculateResult(values.OfType<TimeSpanValue>().Select(x => x.Value), values.First().GetType());
    78         } else {
    79           throw new ArgumentException(string.Format("Type {0} is not supported by the DataReducer.", values.First().GetType()));
    80         }
    81       }
     71      if (!values.Any()) return base.Apply();
     72
     73      if (values.All(x => x is IntValue)) {
     74        CalculateResult(values.OfType<IntValue>().Select(x => x.Value), values.First().GetType());
     75      } else if (values.All(x => x is DoubleValue)) {
     76        CalculateResult(values.OfType<DoubleValue>().Select(x => x.Value), values.First().GetType());
     77      } else if (values.All(x => x is TimeSpanValue)) {
     78        CalculateResult(values.OfType<TimeSpanValue>().Select(x => x.Value), values.First().GetType());
     79      } else if (values.All(x => x is BoolValue)) {
     80        CalculateResult(values.OfType<BoolValue>().Select(x => x.Value), values.First().GetType());
     81      } else {
     82        throw new ArgumentException(string.Format("Type {0} is not supported by the DataReducer.", values.First().GetType()));
     83      }
     84
    8285      return base.Apply();
    8386    }
     
    246249        case ReductionOperations.Assign:
    247250          target = InitializeTarget<TimeSpanValue, TimeSpan>(targetType, new TimeSpan());
     251          target.Value = result;
     252          break;
     253        default:
     254          throw new InvalidOperationException(string.Format("Operation {0} is not supported as TargetOperation for type: {1}.", TargetOperation.Value.Value, targetType));
     255      }
     256    }
     257    #endregion
     258    #region bool reduction
     259    private void CalculateResult(IEnumerable<bool> values, Type targetType) {
     260      bool result;
     261      switch (ReductionOperation.Value.Value) {
     262        case ReductionOperations.All:
     263          result = values.All(x => x);
     264          break;
     265        case ReductionOperations.Any:
     266          result = values.Any(x => x);
     267          break;
     268        default:
     269          throw new InvalidOperationException(string.Format("Operation {0} is not supported as ReductionOperation for type: {1}.", ReductionOperation.Value.Value, targetType));
     270      }
     271
     272      BoolValue target;
     273      switch (TargetOperation.Value.Value) {
     274        case ReductionOperations.Assign:
     275          target = InitializeTarget<BoolValue, bool>(targetType, true);
    248276          target.Value = result;
    249277          break;
  • trunk/sources/HeuristicLab.Operators/3.3/ReductionOperation.cs

    r10195 r10196  
    3434    Max,
    3535    Avg,
    36     Assign
     36    Assign,
     37    All,
     38    Any
    3739  }
    3840
Note: See TracChangeset for help on using the changeset viewer.