private void AdicionaCabeca(Agente Agente) { ICollection <Tuple <Cabecario, double> > Add = Agente.ProcuraCabeca(); if (Add != null) { lock (this) { Cabecas.AddRange(Add); } } ; }
private void Montar(Regra Regra) { BancoDeDados db = new BancoDeDados(); Regra = db.Regras.Where(a => a.ID == Regra.ID).SingleOrDefault(); double confianca = 1; bool resultado = Cabecas.Select(a => a.Item1.ID).Contains(Regra.Se.ID); if (resultado) { confianca = Cabecas.Where(a => a.Item1.ID == Regra.Se.ID).SingleOrDefault().Item2; } int cont = Regra.E.Count + Regra.Ou.Count; if (cont == 0) { if (resultado) { Aplicar(Regra, confianca); return; } else { return; } } ; for (int i = 1; i <= cont; i++) { try { ListaE temp = Regra.E.Where(a => a.Pos == i).SingleOrDefault(); resultado = resultado && Cabecas.Select(a => a.Item1.ID).Contains(temp.Cabeca.ID); if (resultado) { confianca *= Cabecas.Where(a => a.Item1.ID == temp.Cabeca.ID).SingleOrDefault().Item2; } } catch (Exception) { } try { ListaOU temp = Regra.Ou.Where(a => a.Pos == i).SingleOrDefault(); resultado = resultado || Cabecas.Select(a => a.Item1.ID).Contains(temp.Cabeca.ID); double aux = Cabecas.Where(a => a.Item1.ID == temp.Cabeca.ID).SingleOrDefault().Item2; if (resultado) { confianca = (confianca + aux) - (confianca * aux); } } catch (Exception) { } } if (resultado) { Aplicar(Regra, confianca); } }