Exemplo n.º 1
0
        private void Aplicar(Regra Regra, double confianca)
        {
            lock (this)
            {
                Aplicadas.Add(Regra);
                flag = true;
            }

            Parallel.ForEach(Regra.Entao, a => AplicaAção(a, confianca));
        }
Exemplo n.º 2
0
        private void Montar(Regra Regra)
        {
            bool Cond = false;

            if (Regra.Se.Operador == "=")
            {
                Cond = Regra.Se.Variavel.Valores.Select(o => o.Valor).Contains(Regra.Se.Valor);
            }
            else
            if (Regra.Se.Operador == "!=")
            {
                Cond = !Regra.Se.Variavel.Valores.Select(o => o.Valor).Contains(Regra.Se.Valor);
            }
            else
            if (Regra.Se.Operador == ">")
            {
                Cond = Convert.ToDecimal(Regra.Se.Variavel.Valores.OrderByDescending(o => o.Confianca).Select(o => o.Valor).FirstOrDefault()) > Convert.ToDecimal(Regra.Se.Valor);
            }
            else
            if (Regra.Se.Operador == "<")
            {
                Cond = Convert.ToDecimal(Regra.Se.Variavel.Valores.OrderByDescending(o => o.Confianca).Select(o => o.Valor).FirstOrDefault()) < Convert.ToDecimal(Regra.Se.Valor);
            }
            else
            if (Regra.Se.Operador == ">=")
            {
                Cond = Convert.ToDecimal(Regra.Se.Variavel.Valores.OrderByDescending(o => o.Confianca).Select(o => o.Valor).FirstOrDefault()) >= Convert.ToDecimal(Regra.Se.Valor);
            }
            else
            if (Regra.Se.Operador == "<=")
            {
                Cond = Convert.ToDecimal(Regra.Se.Variavel.Valores.OrderByDescending(o => o.Confianca).Select(o => o.Valor).FirstOrDefault()) <= Convert.ToDecimal(Regra.Se.Valor);
            }
            if (Regra.Se.NOT)
            {
                Cond = !Cond;
            }

            int max = 0;
            int Pos = 0;

            try
            {
                Pos = Regra.Ou.OrderByDescending(o => o.Pos).FirstOrDefault().Pos;
                if (Pos > max)
                {
                    max = Pos;
                }
            }
            catch (ArgumentNullException e)
            {
                Console.WriteLine(e);
            }

            try
            {
                Pos = Regra.E.OrderByDescending(o => o.Pos).FirstOrDefault().Pos;
                if (Pos > max)
                {
                    max = Pos;
                }
            }
            catch (Exception)
            {
            }



            for (int i = 1; i <= max; i++)
            {
                Cabecario temp = new Cabecario();

                try
                {
                    temp = Regra.E.Where(o => o.Pos == i).Select(o => o.Cabeca).SingleOrDefault();
                }
                catch (Exception)
                {
                    temp = null;
                }



                if (temp != null)
                {
                    if (temp.Operador == "=")
                    {
                        Cond = Cond & temp.Variavel.Valores.Select(o => o.Valor).Contains(temp.Valor);
                    }
                    else if (temp.Operador == "!=")
                    {
                        Cond = Cond & !temp.Variavel.Valores.Select(o => o.Valor).Contains(temp.Valor);
                    }
                    else if (temp.Operador == ">")
                    {
                        Cond = Cond & Convert.ToDecimal(temp.Variavel.Valores.OrderByDescending(o => o.Confianca).Select(o => o.Valor).FirstOrDefault()) > Convert.ToDecimal(temp.Valor);
                    }
                    else if (temp.Operador == "<")
                    {
                        Cond = Cond & Convert.ToDecimal(temp.Variavel.Valores.OrderByDescending(o => o.Confianca).Select(o => o.Valor).FirstOrDefault()) < Convert.ToDecimal(temp.Valor);
                    }
                    else if (temp.Operador == ">=")
                    {
                        Cond = Cond & Convert.ToDecimal(temp.Variavel.Valores.OrderByDescending(o => o.Confianca).Select(o => o.Valor).FirstOrDefault()) >= Convert.ToDecimal(temp.Valor);
                    }
                    else if (temp.Operador == "<=")
                    {
                        Cond = Cond & Convert.ToDecimal(temp.Variavel.Valores.OrderByDescending(o => o.Confianca).Select(o => o.Valor).FirstOrDefault()) <= Convert.ToDecimal(temp.Valor);
                    }
                    if (temp.NOT)
                    {
                        Cond = !Cond;
                    }
                }

                try
                {
                    temp = Regra.Ou.Where(o => o.Pos == i).Select(o => o.Cabeca).SingleOrDefault();
                }
                catch (Exception)
                {
                    temp = null;
                }


                if (temp != null)
                {
                    if (temp.Operador == "=")
                    {
                        Cond = Cond | temp.Variavel.Valores.Select(o => o.Valor).Contains(temp.Valor);
                    }
                    else if (temp.Operador == "!=")
                    {
                        Cond = Cond | !temp.Variavel.Valores.Select(o => o.Valor).Contains(temp.Valor);
                    }
                    else if (temp.Operador == ">")
                    {
                        Cond = Cond | Convert.ToDecimal(temp.Variavel.Valores.OrderByDescending(o => o.Confianca).Select(o => o.Valor).FirstOrDefault()) > Convert.ToDecimal(temp.Valor);
                    }
                    else if (temp.Operador == "<")
                    {
                        Cond = Cond | Convert.ToDecimal(temp.Variavel.Valores.OrderByDescending(o => o.Confianca).Select(o => o.Valor).FirstOrDefault()) < Convert.ToDecimal(temp.Valor);
                    }
                    else if (temp.Operador == ">=")
                    {
                        Cond = Cond | Convert.ToDecimal(temp.Variavel.Valores.OrderByDescending(o => o.Confianca).Select(o => o.Valor).FirstOrDefault()) >= Convert.ToDecimal(temp.Valor);
                    }
                    else if (temp.Operador == "<=")
                    {
                        Cond = Cond | Convert.ToDecimal(temp.Variavel.Valores.OrderByDescending(o => o.Confianca).Select(o => o.Valor).FirstOrDefault()) <= Convert.ToDecimal(temp.Valor);
                    }
                    if (temp.NOT)
                    {
                        Cond = !Cond;
                    }
                }
            }

            if (Cond)
            {
                Aplicadas.Add(Regra);
                foreach (var item in Regra.Entao)
                {
                    Entao(item);
                }
            }
        }
Exemplo n.º 3
0
        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);
            }
        }