コード例 #1
0
ファイル: DecisionTree.cs プロジェクト: jpazarzis/hogar
 public DecisionTree MakeACopy()
 {
     var newDt = new DecisionTree();
     newDt._node = _node.Clone(newDt);
     newDt._statistics = _statistics.MakeACopy();
     return newDt;
 }
コード例 #2
0
ファイル: DecisionTree.cs プロジェクト: jpazarzis/hogar
        public static List<DecisionTree> CrossOver(DecisionTree dt1, DecisionTree dt2)
        {
            Debug.Assert(dt1 != dt2);

            Debug.Assert(CanBeCrossOvered(dt1,dt2));

            DecisionTree t1 = dt1.MakeACopy();
            Debug.Assert(t1.IsEqual(dt1));
            DecisionTree t2 = dt2.MakeACopy();
            Debug.Assert(t2.IsEqual(dt2));

            var nodes1 = new List<Node>();
            var nodes2 = new List<Node>();

            t1._node.Add(nodes1);
            t2._node.Add(nodes2);

            var list = new List<DecisionTree>();
            while (true)
            {
                int i1 = Randomizer.GetRandomInteger(nodes1.Count);
                int i2 = Randomizer.GetRandomInteger(nodes2.Count);

                Node n1 = nodes1[i1];
                Node n2 = nodes2[i2];

                if (CanBeCrossOvered(n1, n2))
                {

                    int dt2Count = dt2.NumberOfNodes;

                    Node parent1 = n1.Parent;
                    Node parent2 = n2.Parent;
                    parent1.SubstituteChild(n1, n2);
                    parent2.SubstituteChild(n2, n1);
                    list.Add(t1);
                    list.Add(t2);

                    break;
                }
            }
            return list;
        }