/// <summary> /// Adds a relationship to the list /// </summary> /// <param name="r"></param> public void Add(Relationship r) { RelationKey key = r.GetRelationKey(); if (knowledge.ContainsKey(key)) { bool bNew = true; //sadly will need to do a for-loop here to prevent duplicates foreach (Relationship oldrelationship in knowledge[key]) { if (oldrelationship.Relation == r.Relation && oldrelationship.A == r.A && oldrelationship.B == r.B ) { bNew = false; } } // If the rules already added don't do it again. //if (knowledge[key].Contains(r)) return; DID NOT WORK (Probably because of the weights being different?) if (bNew == true) { knowledge[key].Add(r); } return; } else { List <Relationship> relationList = new List <Relationship>(); relationList.Add(r); knowledge.Add(key, relationList); } }
/// <summary> /// Adds a relationship to the list /// </summary> /// <param name="r"></param> public void Add(Relationship r) { RelationKey key = r.GetRelationKey(); if (knowledge.ContainsKey(key)) { bool bNew = true; //sadly will need to do a for-loop here to prevent duplicates foreach (Relationship oldrelationship in knowledge[key]) { if (oldrelationship.Relation == r.Relation && oldrelationship.A == r.A && oldrelationship.B == r.B ) { bNew = false; } } // If the rules already added don't do it again. //if (knowledge[key].Contains(r)) return; DID NOT WORK (Probably because of the weights being different?) if (bNew == true) { knowledge[key].Add(r); } return; } else { List<Relationship> relationList = new List<Relationship>(); relationList.Add(r); knowledge.Add(key, relationList); } }
private void DeduceRule(Relationship relationship, List <Relationship> potentialNewKnowledge) { Relationship aIs = relationship; //Get the B's List <Relationship> theBs = knowledge[aIs.GetRelationKey()]; // june 12 2009 - was having trouble with foreach working so I did a normal for //foreach (Relationship secondRelation in theBs) for (int i = 0; i < theBs.Count; i++) { Relationship secondRelation = theBs[i]; // A is B1, B2, B3 ... string b = secondRelation.B; RelationKey bRelation = new RelationKey(b, DEDUCED_IS); if (!knowledge.ContainsKey(bRelation)) { // do nothing if we don't have any 'deductions' to make // removed the break beacuse it was messing with looping? //break; } else { List <Relationship> theCs = knowledge[bRelation]; foreach (Relationship bIs in theCs) { double newWeight = (aIs.Weight + bIs.Weight) / 2; int newPriority = Math.Max(aIs.Priority, bIs.Priority); //Create A is C, if it doesn't exist add it. Relationship newRule = new Relationship(aIs.A, DEDUCED_IS, bIs.B , "", newWeight, newPriority, false); potentialNewKnowledge.Add(newRule); } } } }