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); }
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); }
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"); } }
private double LocalLikelihoodNode(ActivationNode node, int na, BiTemplate constraint) { return(node.Subtrace.Count(constraint.IsActivation) / (double)na); }