コード例 #1
0
        public double GlobalLikelihood(ActivationBinaryTree tree,
                                       List <ParametrizedTemplate> model, ActivationNode conflictResolution)
        {
            double result = 0;
            ActivationTreeBuilder treeBuilder = new();
            var kOfConflictActivations        = GetConflict(tree);
            var constraints = model
                              .Where(x => x.TemplateDescription.TemplateParametersType == TemplateTypes.BiTemplate)
                              .SelectMany(x => x.TemplateInstances).Cast <BiTemplate>().ToList();

            foreach (var resolution in kOfConflictActivations)
            {
                var gama = 0;
                foreach (var constraint in constraints)
                {
                    var tempTree = treeBuilder.BuildTree(conflictResolution.Subtrace, constraint);
                    if (GetFulfillment(tempTree).Contains(resolution))
                    {
                        gama += 1;
                    }
                    else if (GetViolation(tempTree).Contains(resolution))
                    {
                        gama += 1;
                    }
                }

                result += gama;
            }

            return(result / kOfConflictActivations.Count);
        }
コード例 #2
0
        public double LocalLikelihood(ActivationBinaryTree tree,
                                      ActivationNode conflictResolution)
        {
            var trace = tree.Leaves.Where(n => n.MaxFulfilling)
                        .SelectMany(n => n.Subtrace)
                        .Distinct(new EventEqualityComparer())
                        .ToList();
            var nf = conflictResolution.Subtrace.Count(tree.Constraint.IsActivation);
            var na = trace.Count(tree.Constraint.IsActivation);

            return(nf / (double)na);
        }
コード例 #3
0
        private static GaussianRandom grnd = new GaussianRandom(); //gausova raspodela za random vrednosti

        /// <summary>
        /// https://en.wikipedia.org/wiki/Artificial_neuron
        /// ulaz1*tezina1
        /// ulaz1*tezina2
        /// bias(+1*tezina)
        /// sve se sabere
        /// provuce se kroz aktivacionu funkciju
        /// </summary>
        /// <param name="n_inputs"></param>
        /// <param name="activation"> String naziv aktivacione funkcije </param>
        public NeuronNode(int n_inputs, string activation)
        {
            this.n_inputs        = n_inputs;
            this.multiplyNodes   = new List <MultiplyNode>();   //for inputs and weights
            this.sumNode         = new SumNode();               //for sum of inputs*weights
            this.previous_deltas = new List <double>();         //vrednost delti u prosloj iteraciji
            this.gradients       = new List <List <double> >(); //lokalni gradijenti
            MultiplyNode mulNode;

            //init inputs
            //collect inputs and corresponding weights
            for (int i = 0; i < this.n_inputs; i++)
            {
                mulNode = new MultiplyNode();
                double b = grnd.NextGaussian(0.3, 0.5);
                mulNode.x = new List <double>()
                {
                    1.0, b
                };
                this.multiplyNodes.Add(mulNode);
                previous_deltas.Add(0.0);
            }

            //init bias node and weight
            mulNode = new MultiplyNode();
            double m = grnd.NextGaussian(0.0, 0.01);

            mulNode.x = new List <double>()
            {
                1.0, m
            };
            this.multiplyNodes.Add(mulNode);
            previous_deltas.Add(0.0);

            // TODO: Ovde dodajem ako dodajem neku drugu aktivacionu funkciju

            /*
             * if else(activation.Equals("TangesHiperbolic").....
             */
            if (activation.Equals("sigmoid"))
            {
                this.activation_node = new SigmoidNode();
            }
            else if (activation.Equals("tanh"))
            {
                this.activation_node = new TanhNode();
            }
            else
            {
                throw new NotImplementedException("Activation function is not supported");
            }
        }
コード例 #4
0
 private double LocalLikelihoodNode(ActivationNode node, int na, BiTemplate constraint)
 {
     return(node.Subtrace.Count(constraint.IsActivation) / (double)na);
 }