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));
}
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());
}
}
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);
}
}
}
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()));
}
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));
}
Aggregations