public ConstraintBasedStructureLearner(IList <RandomVariable> randomVariables, DualKeyDictionary <RandomVariable, ICollection <ISet <RandomVariable> > > independencies) { _randomVariables = randomVariables; _independencies = independencies; _dag = DagPattern <RandomVariable> .InitCompleteDag(randomVariables); _collectedConditions = new DualKeyDictionary <RandomVariable, ISet <RandomVariable> >(); foreach (var x in _dag.Nodes) { foreach (var y in _dag.Nodes.Where(y => x != y)) { _collectedConditions[x, y] = new HashSet <RandomVariable>(); } } }
/// <summary> /// Identifies as many conditional independencies in the model as possible. /// </summary> public DualKeyDictionary <RandomVariable, ICollection <ISet <RandomVariable> > > FindIndependencies(IList <FaultRandomVariable> faults, ICollection <McsRandomVariable> minimalCriticalSets, IList <BooleanRandomVariable> states, BooleanRandomVariable hazard) { _hazard = hazard; _faults = faults; _minimalCriticalSets = new HashSet <McsRandomVariable>(minimalCriticalSets); _states = states; _conditionalIndependencies = new DualKeyDictionary <RandomVariable, ICollection <ISet <RandomVariable> > >(); var variablesForCalculation = GetVariablesForCalculation(); CalculatePairIndependencies(variablesForCalculation); if (_config.UseDccaResultsForLearning && _minimalCriticalSets.Count > 0) { GenerateDccaIndependencies(); CalculateFurtherDccaIndependencies(); } return(_conditionalIndependencies); }