Esempio n. 1
0
        public CNode FullCopyMe()
        {
            var newNode = new CNode();

            foreach (var item in ElementIDs)
            {
                newNode.ElementIDs.Add(item);
            }

            newNode.Support = Support;
            return(newNode);
        }
Esempio n. 2
0
        private bool CalculateNextStep(float minSupport)
        {
            var tempList = new List <CNode>();

            if (CNodes.First().ElementIDs.Count == 1)
            {
                for (var i = 0; i < CNodes.Count; i++)
                {
                    for (var k = i + 1; k < CNodes.Count; k++)
                    {
                        var newNode = new CNode(CNodes[i].ElementIDs[0]);
                        newNode.AddElement(CNodes[k].ElementIDs[0]);
                        newNode.CalculateSupport(Data.Rows);
                        tempList.Add(newNode);
                    }
                }
            }
            else
            {
                foreach (var groups in CNodes.GroupByElements(CNodes.First().ElementIDs.Count - 1))
                {
                    var groupsCount = groups.Count();
                    for (var i = 0; i < groupsCount - 1; i++)
                    {
                        for (var k = i + 1; k < groupsCount; k++)
                        {
                            if (k == groupsCount)
                            {
                                break;
                            }

                            var newNode = groups.ElementAt(i).FullCopyMe();
                            newNode.AddElement(groups.ElementAt(k).ElementIDs.Last());
                            newNode.CalculateSupport(Data.Rows);

                            if (newNode.Support >= minSupport)
                            {
                                tempList.Add(newNode);
                            }
                        }
                    }
                }
            }

            if (tempList.Count >= 1)
            {
                //this.CNodes = CNode.ClearSame(tempList);// => this action deletes last cNode
                this.CNodes = tempList;
                return(true);
            }
            return(false);
        }
        private static List <AssociationRule> GetRules(CNode node, List <List <CNode> > eachLevelOfCNodes)
        {
            var rules   = new List <AssociationRule>();
            var subsets = SubSetsOf <int>(node.ElementIDs).OrderBy(x => x.Count()).ToList();

            for (int i = 1; i < (subsets.Count / 2); i++)
            {
                var nodeA = new CNode(subsets[i].ToList());
                var nodeB = new CNode(subsets[subsets.Count - i - 1].ToList());

                var aFound = eachLevelOfCNodes[nodeA.ElementIDs.Count - 1].FirstOrDefault(x => x.ElementIDs.OrderBy(t => t).SequenceEqual(nodeA.ElementIDs.OrderBy(t => t)));
                var bFound = eachLevelOfCNodes[nodeB.ElementIDs.Count - 1].FirstOrDefault(x => x.ElementIDs.OrderBy(t => t).SequenceEqual(nodeB.ElementIDs.OrderBy(t => t)));

                if (aFound != null && bFound != null)
                {
                    rules.Add(new AssociationRule(node, aFound, bFound).Calculate());
                    rules.Add(new AssociationRule(node, bFound, aFound).Calculate());
                }
            }

            return(rules);
        }
 public AssociationRule(CNode nodeAb, CNode nodeA, CNode nodeB)
 {
     NodeAB = nodeAb;
     NodeA  = nodeA;
     NodeB  = nodeB;
 }