Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
04/20/20 17:31:31 (4 years ago)
Author:
abeham
Message:

#2521: Worked on ResultParameter for Problem and Algorithms

  • Add ResultParameter to TSP, BinaryVectorProblem, and HillClimber
  • Refactor ResultParameter to allow presetting the ResultCollection instead of having to discover it (e.g. for use in BasicAlgorithms)
  • Unify Results property among EngineAlgorithm and BasicAlgorithm
    • There is now only a single instance which is storable
Location:
branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/Results
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/Results/IResultParameter.cs

    r17226 r17517  
    2828  public interface IResultParameter : ILookupParameter {
    2929    string ResultCollectionName { get; set; }
     30    ResultCollection ResultCollection { get; set; }
     31
    3032    event EventHandler ResultCollectionNameChanged;
    3133  }
  • branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/Results/ResultParameter.cs

    r17257 r17517  
    6060    }
    6161
     62    [Storable]
     63    public ResultCollection ResultCollection { get; set; }
     64
    6265    [StorableConstructor]
    6366    private ResultParameter(StorableConstructorFlag _) : base(_) { }
     
    6669      resultCollectionName = original.resultCollectionName;
    6770      defaultValue = cloner.Clone(original.defaultValue);
     71      ResultCollection = cloner.Clone(original.ResultCollection);
    6872    }
    6973    public override IDeepCloneable Clone(Cloner cloner) {
     
    8993
    9094    protected override IItem GetActualValue() {
    91       ResultCollection results;
    92       if (CachedActualValue != null) {
    93         results = CachedActualValue as ResultCollection;
    94         if (results == null) throw new InvalidOperationException("ResultParameter (" + ActualName + "): ResultCollection not found.");
    95       } else {
    96         var tmp = ResultCollectionName;
    97         // verifyType has to be disabled, because the ResultCollection may not be identical to the generic type of the parameter
    98         results = GetValue(ExecutionContext, ref tmp) as ResultCollection;
    99         if (results == null) throw new InvalidOperationException("ResultParameter (" + ActualName + "): ResultCollection with name " + tmp + " not found.");
    100         CachedActualValue = results;
     95      ResultCollection results = ResultCollection;
     96      if (results == null) {
     97        if (CachedActualValue != null) {
     98          results = CachedActualValue as ResultCollection;
     99          if (results == null) throw new InvalidOperationException("ResultParameter (" + ActualName + "): ResultCollection not found.");
     100        } else {
     101          var tmp = ResultCollectionName;
     102          // verifyType has to be disabled, because the ResultCollection may not be identical to the generic type of the parameter
     103          results = GetValue(ExecutionContext, ref tmp) as ResultCollection;
     104          if (results == null) throw new InvalidOperationException("ResultParameter (" + ActualName + "): ResultCollection with name " + tmp + " not found.");
     105          CachedActualValue = results;
     106        }
    101107      }
    102108
    103109      IResult result;
    104110      if (!results.TryGetValue(ActualName, out result)) {
    105         if (DefaultValue == null) throw new InvalidOperationException("ResultParameter (" + ActualName + "): Result not found and no default value specified.");
     111        if (DefaultValue == null) return null;
    106112        result = ItemDescription == Description ? new Result(ActualName, (T)DefaultValue.Clone()) : new Result(ActualName, Description, (T)DefaultValue.Clone());
    107113        results.Add(result);
     
    116122
    117123    protected override void SetActualValue(IItem value) {
    118       ResultCollection results;
    119       if (CachedActualValue != null) {
    120         results = CachedActualValue as ResultCollection;
    121         if (results == null) throw new InvalidOperationException("ResultParameter (" + ActualName + "): ResultCollection not found.");
    122       } else {
    123         var tmp = ResultCollectionName;
    124         results = GetValue(ExecutionContext, ref tmp) as ResultCollection;
    125         if (results == null) throw new InvalidOperationException("ResultParameter (" + ActualName + "): ResultCollection with name " + tmp + " not found.");
    126         CachedActualValue = results;
     124      ResultCollection results = ResultCollection;
     125      if (results == null) {
     126        if (CachedActualValue != null) {
     127          results = CachedActualValue as ResultCollection;
     128          if (results == null) throw new InvalidOperationException("ResultParameter (" + ActualName + "): ResultCollection not found.");
     129        } else {
     130          var tmp = ResultCollectionName;
     131          results = GetValue(ExecutionContext, ref tmp) as ResultCollection;
     132          if (results == null) throw new InvalidOperationException("ResultParameter (" + ActualName + "): ResultCollection with name " + tmp + " not found.");
     133          CachedActualValue = results;
     134        }
    127135      }
    128136
Note: See TracChangeset for help on using the changeset viewer.