Search in sources :

Example 1 with GraphNode

use of org.drools.beliefs.graph.GraphNode in project drools by kiegroup.

the class BayesInstance method setLikelyhood.

public void setLikelyhood(BayesVariable var, double[] distribution) {
    GraphNode node = graph.getNode(var.getId());
    JunctionTreeClique clique = tree.getJunctionTreeNodes()[var.getFamily()];
    setLikelyhood(new BayesLikelyhood(graph, clique, node, distribution));
}
Also used : GraphNode(org.drools.beliefs.graph.GraphNode)

Example 2 with GraphNode

use of org.drools.beliefs.graph.GraphNode in project drools by kiegroup.

the class JunctionTreeBuilder method moralize.

public void moralize(GraphNode<BayesVariable> v, GraphNode v1) {
    for (Edge e2 : v.getInEdges()) {
        // moralize, by connecting each parent with each other
        GraphNode v2 = graph.getNode(e2.getOutGraphNode().getId());
        if (v1 == v2) {
            // don't connect to itself
            continue;
        }
        if (adjacencyMatrix[v1.getId()][v2.getId()]) {
            // already connected, continue
            continue;
        }
        connect(getAdjacencyMatrix(), v1.getId(), v2.getId());
    }
}
Also used : GraphNode(org.drools.beliefs.graph.GraphNode) Edge(org.drools.beliefs.graph.Edge)

Example 3 with GraphNode

use of org.drools.beliefs.graph.GraphNode in project drools by kiegroup.

the class JunctionTreeBuilder method moralize.

public void moralize() {
    for (GraphNode<BayesVariable> v : graph) {
        for (Edge e1 : v.getInEdges()) {
            GraphNode pV1 = graph.getNode(e1.getOutGraphNode().getId());
            moralize(v, pV1);
        }
    }
}
Also used : GraphNode(org.drools.beliefs.graph.GraphNode) Edge(org.drools.beliefs.graph.Edge)

Example 4 with GraphNode

use of org.drools.beliefs.graph.GraphNode in project drools by kiegroup.

the class BayesAbsorbtionTest method testAbsorption3.

@Test
public void testAbsorption3() {
    // Projects from node1 into sep. A, B and C are in node1. A and C are in the sep.
    // this tests a non separator var, in the middle of the vars
    BayesVariable a = new BayesVariable<String>("A", 0, new String[] { "A1", "A2" }, null);
    BayesVariable b = new BayesVariable<String>("B", 1, new String[] { "B1", "B2" }, null);
    BayesVariable c = new BayesVariable<String>("C", 2, new String[] { "C1", "C2" }, null);
    Graph<BayesVariable> graph = new BayesNetwork();
    GraphNode x0 = addNode(graph);
    GraphNode x1 = addNode(graph);
    GraphNode x2 = addNode(graph);
    x0.setContent(a);
    x1.setContent(b);
    x2.setContent(c);
    JunctionTreeClique node1 = new JunctionTreeClique(0, graph, bitSet("0111"));
    JunctionTreeClique node2 = new JunctionTreeClique(1, graph, bitSet("0101"));
    SeparatorState sep = new JunctionTreeSeparator(0, node1, node2, bitSet("0101"), graph).createState();
    BayesVariable[] vars = new BayesVariable[] { a, b, c };
    BayesVariable[] sepVars = new BayesVariable[] { a, c };
    int[] sepVarPos = PotentialMultiplier.createSubsetVarPos(vars, sepVars);
    int sepVarNumberOfStates = PotentialMultiplier.createNumberOfStates(sepVars);
    int[] sepVarMultipliers = PotentialMultiplier.createIndexMultipliers(sepVars, sepVarNumberOfStates);
    double v = 0.44;
    for (int i = 0; i < node1.getPotentials().length; i++) {
        node1.getPotentials()[i] = v;
        v += +0.4;
    }
    double[] oldSepPotentials = new double[sep.getPotentials().length];
    Arrays.fill(oldSepPotentials, 0.2);
    v = 0.5;
    for (int i = 0; i < sep.getPotentials().length; i++) {
        sep.getPotentials()[i] = v;
        v += +0.5;
    }
    BayesAbsorption p = new BayesAbsorption(sepVarPos, oldSepPotentials, sep.getPotentials(), sepVarMultipliers, vars, node1.getPotentials());
    p.absorb();
    assertArray(new double[] { 0.01, 0.038, 0.028, 0.075, 0.139, 0.222, 0.194, 0.295 }, scaleDouble(3, node1.getPotentials()));
}
Also used : GraphNode(org.drools.beliefs.graph.GraphNode) Test(org.junit.Test)

Example 5 with GraphNode

use of org.drools.beliefs.graph.GraphNode in project drools by kiegroup.

the class BayesProjectionTest method testProjection2.

@Test
public void testProjection2() {
    // Projects from node1 into sep. A, B and C are in node1. A and B are in the sep.
    // this tests a non separator var, after the vars
    BayesVariable a = new BayesVariable<String>("A", 0, new String[] { "A1", "A2" }, new double[][] { { 0.1, 0.2 } });
    BayesVariable b = new BayesVariable<String>("B", 1, new String[] { "B1", "B2" }, new double[][] { { 0.1, 0.2 } });
    BayesVariable c = new BayesVariable<String>("C", 2, new String[] { "C1", "C2" }, new double[][] { { 0.1, 0.2 } });
    Graph<BayesVariable> graph = new BayesNetwork();
    GraphNode x0 = addNode(graph);
    GraphNode x1 = addNode(graph);
    GraphNode x2 = addNode(graph);
    x0.setContent(a);
    x1.setContent(b);
    x2.setContent(c);
    JunctionTreeClique node1 = new JunctionTreeClique(0, graph, bitSet("0111"));
    JunctionTreeClique node2 = new JunctionTreeClique(1, graph, bitSet("0011"));
    SeparatorState sep = new JunctionTreeSeparator(0, node1, node2, bitSet("0011"), graph).createState();
    double v = 0.1;
    for (int i = 0; i < node1.getPotentials().length; i++) {
        node1.getPotentials()[i] = v;
        v = scaleDouble(3, v + 0.1);
    }
    BayesVariable[] vars = new BayesVariable[] { a, b, c };
    BayesVariable[] sepVars = new BayesVariable[] { a, b };
    int[] sepVarPos = PotentialMultiplier.createSubsetVarPos(vars, sepVars);
    int sepVarNumberOfStates = PotentialMultiplier.createNumberOfStates(sepVars);
    int[] sepVarMultipliers = PotentialMultiplier.createIndexMultipliers(sepVars, sepVarNumberOfStates);
    double[] projectedSepPotentials = new double[sep.getPotentials().length];
    BayesProjection p = new BayesProjection(vars, node1.getPotentials(), sepVarPos, sepVarMultipliers, projectedSepPotentials);
    p.project();
    // remember it's been normalized, from 0.3, 0.7, 1.1, 1.5
    assertArray(new double[] { 0.083, 0.194, 0.306, 0.417 }, scaleDouble(3, projectedSepPotentials));
}
Also used : GraphNode(org.drools.beliefs.graph.GraphNode) Test(org.junit.Test)

Aggregations

GraphNode (org.drools.beliefs.graph.GraphNode)39 Test (org.junit.Test)32 OpenBitSet (org.drools.core.util.bitmask.OpenBitSet)13 ArrayList (java.util.ArrayList)8 EdgeImpl (org.drools.beliefs.graph.impl.EdgeImpl)4 PriorityQueue (java.util.PriorityQueue)3 HashMap (java.util.HashMap)2 HashSet (java.util.HashSet)2 BayesNetwork (org.drools.beliefs.bayes.BayesNetwork)2 BayesVariable (org.drools.beliefs.bayes.BayesVariable)2 Edge (org.drools.beliefs.graph.Edge)2 Bif (org.drools.beliefs.bayes.model.Bif)1 Graph (org.drools.beliefs.graph.Graph)1