Changeset 17139


Ignore:
Timestamp:
07/16/19 15:23:38 (6 weeks ago)
Author:
gkronber
Message:

#2847: added Storable-properties to map Queues to Arrays (and vice versa) to work around problem with serialization of Queues in HEAL.Attic

Location:
trunk/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees/3.4
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees/3.4/LeafTypes/LeafBase.cs

    r17080 r17139  
    112112    public class LeafBuildingState : Item {
    113113      [Storable]
    114       public Queue<RegressionNodeModel> nodeQueue = new Queue<RegressionNodeModel>();
     114      private RegressionNodeModel[] storableNodeQueue { get { return nodeQueue.ToArray(); } set { nodeQueue = new Queue<RegressionNodeModel>(value); } }
     115      public Queue<RegressionNodeModel> nodeQueue;
    115116      [Storable]
    116       public Queue<IReadOnlyList<int>> trainingRowsQueue = new Queue<IReadOnlyList<int>>();
     117      private IReadOnlyList<int>[] storabletrainingRowsQueue { get { return trainingRowsQueue.ToArray(); } set { trainingRowsQueue = new Queue<IReadOnlyList<int>>(value); } }
     118      public Queue<IReadOnlyList<int>> trainingRowsQueue;
    117119
    118120      //State.Code values denote the current action (for pausing)
     
    130132        Code = original.Code;
    131133      }
    132       public LeafBuildingState() { }
     134      public LeafBuildingState() {
     135        nodeQueue = new Queue<RegressionNodeModel>();
     136        trainingRowsQueue = new Queue<IReadOnlyList<int>>();
     137      }
    133138      public override IDeepCloneable Clone(Cloner cloner) {
    134139        return new LeafBuildingState(this, cloner);
  • trunk/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees/3.4/Pruning/ComplexityPruning.cs

    r17080 r17139  
    204204    public class PruningState : Item {
    205205      [Storable]
    206       public IDictionary<RegressionNodeModel, int> modelComplexities = new Dictionary<RegressionNodeModel, int>();
    207       [Storable]
    208       public IDictionary<RegressionNodeModel, int> nodeComplexities = new Dictionary<RegressionNodeModel, int>();
    209       [Storable]
    210       public IDictionary<RegressionNodeModel, int> pruningSizes = new Dictionary<RegressionNodeModel, int>();
    211       [Storable]
    212       public IDictionary<RegressionNodeModel, double> modelErrors = new Dictionary<RegressionNodeModel, double>();
    213 
    214       [Storable]
    215       public Queue<RegressionNodeModel> nodeQueue = new Queue<RegressionNodeModel>();
    216       [Storable]
    217       public Queue<IReadOnlyList<int>> trainingRowsQueue = new Queue<IReadOnlyList<int>>();
    218       [Storable]
    219       public Queue<IReadOnlyList<int>> pruningRowsQueue = new Queue<IReadOnlyList<int>>();
     206      public IDictionary<RegressionNodeModel, int> modelComplexities;
     207      [Storable]
     208      public IDictionary<RegressionNodeModel, int> nodeComplexities;
     209      [Storable]
     210      public IDictionary<RegressionNodeModel, int> pruningSizes;
     211      [Storable]
     212      public IDictionary<RegressionNodeModel, double> modelErrors;
     213
     214      [Storable]
     215      private RegressionNodeModel[] storableNodeQueue { get { return nodeQueue.ToArray(); } set { nodeQueue = new Queue<RegressionNodeModel>(value); } }
     216      public Queue<RegressionNodeModel> nodeQueue;
     217      [Storable]
     218      private IReadOnlyList<int>[] storabletrainingRowsQueue { get { return trainingRowsQueue.ToArray(); } set { trainingRowsQueue = new Queue<IReadOnlyList<int>>(value); } }
     219      public Queue<IReadOnlyList<int>> trainingRowsQueue;
     220      [Storable]
     221      private IReadOnlyList<int>[] storablepruningRowsQueue { get { return pruningRowsQueue.ToArray(); } set { pruningRowsQueue = new Queue<IReadOnlyList<int>>(value); } }
     222      public Queue<IReadOnlyList<int>> pruningRowsQueue;
    220223
    221224      //State.Code values denote the current action (for pausing)
     
    242245        Code = original.Code;
    243246      }
    244       public PruningState() { }
     247      public PruningState() {
     248        modelComplexities = new Dictionary<RegressionNodeModel, int>();
     249        nodeComplexities = new Dictionary<RegressionNodeModel, int>();
     250        pruningSizes = new Dictionary<RegressionNodeModel, int>();
     251        modelErrors = new Dictionary<RegressionNodeModel, double>();
     252        nodeQueue = new Queue<RegressionNodeModel>();
     253        trainingRowsQueue = new Queue<IReadOnlyList<int>>();
     254        pruningRowsQueue = new Queue<IReadOnlyList<int>>();
     255      }
    245256      public override IDeepCloneable Clone(Cloner cloner) {
    246257        return new PruningState(this, cloner);
  • trunk/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees/3.4/Splitting/SplitterBase.cs

    r17080 r17139  
    112112    [StorableType("BC1149FD-370E-4F3A-92F5-6E519736D09A")]
    113113    public class SplittingState : Item {
     114      public Queue<RegressionNodeModel> nodeQueue;
    114115      [Storable]
    115       public Queue<RegressionNodeModel> nodeQueue = new Queue<RegressionNodeModel>();
     116      private RegressionNodeModel[] storableNodeQueue {
     117        get { return nodeQueue.ToArray(); }
     118        set { nodeQueue = new Queue<RegressionNodeModel>(value); }
     119      }
     120
     121      public Queue<IReadOnlyList<int>> trainingRowsQueue;
    116122      [Storable]
    117       public Queue<IReadOnlyList<int>> trainingRowsQueue = new Queue<IReadOnlyList<int>>();
     123      private IReadOnlyList<int>[] storableTrainingRowsQueue {
     124        get { return trainingRowsQueue.ToArray(); }
     125        set { trainingRowsQueue = new Queue<IReadOnlyList<int>>(value); }
     126      }
     127
    118128
    119129      //State.Code values denote the current action (for pausing)
     
    131141        Code = original.Code;
    132142      }
    133       public SplittingState() { }
     143      public SplittingState() : base() {
     144        nodeQueue = new Queue<RegressionNodeModel>();
     145        trainingRowsQueue = new Queue<IReadOnlyList<int>>();
     146      }
    134147      public override IDeepCloneable Clone(Cloner cloner) {
    135148        return new SplittingState(this, cloner);
Note: See TracChangeset for help on using the changeset viewer.