@Override public BooleanVertex or(boolean that) { return this.or(new ConstantBooleanVertex(that)); }
@Test public void youCanLabelVertices() { BooleanVertex a = new BernoulliVertex(0.5); BooleanVertex b = new BernoulliVertex(0.5); BooleanVertex ored = a.or(b); BooleanVertex unlabelled = ored.or(a); Vertex retrieved; VertexLabel labelA = new VertexLabel(LABEL_A); VertexLabel labelB = new VertexLabel(LABEL_B); VertexLabel labelOr = new VertexLabel(LABEL_ORED); a.setLabel(labelA); b.setLabel(labelB); ored.setLabel(labelOr); BayesianNetwork net = new BayesianNetwork(a.getConnectedGraph()); retrieved = net.getVertexByLabel(labelA); assertThat(retrieved, is(a)); retrieved = net.getVertexByLabel(labelB); assertThat(retrieved, is(b)); retrieved = net.getVertexByLabel(labelOr); assertThat(retrieved, is(ored)); retrieved = net.getVertexByLabel(null); assertThat(retrieved, nullValue()); }
@Before public void setUpNetwork() { input1 = new BernoulliVertex(0.25); input2 = new BernoulliVertex(0.75); output = input1.or(input2); connectedGraph = output.getConnectedGraph(); network = new BayesianNetwork(connectedGraph); }
@Test(expected = IllegalArgumentException.class) public void labelErrorsDetected() { BooleanVertex a = new BernoulliVertex(0.5); BooleanVertex b = new BernoulliVertex(0.5); BooleanVertex ored = a.or(b); a.setLabel(LABEL_A); b.setLabel(LABEL_A); BayesianNetwork net = new BayesianNetwork(a.getConnectedGraph()); }
@Test public void constantVertexWorksAsExpected() { double p = 0.5; BernoulliVertex f = new BernoulliVertex(0.5); ConstantBooleanVertex tru = ConstantVertex.of(true); ConstantBooleanVertex fal = ConstantVertex.of(false); BooleanVertex a = f.and(tru).or(fal); assertEquals(priorProbabilityTrue(a, 10000, random), p, 0.01); }
private boolean xor(boolean b1, boolean b2) { BooleanVertex v3 = v1.and(not(v2)) .or(not(v1).and(v2)); v1.setValue(b1); v2.setValue(b2); return v3.eval().scalar(); }
@BeforeClass public static void setUpComplexNet() { VertexId.ID_GENERATOR.set(0); complexResultVertex = ((new GammaVertex(0, 1)) .lessThan(new ConstantIntegerVertex(-1))) .or((new GaussianVertex(0, 1)) .plus(new ConstantDoubleVertex(5)) .equalTo(new ConstantDoubleVertex(10))); BayesianNetwork complexNet = new BayesianNetwork(complexResultVertex.getConnectedGraph()); complexNetDotSaver = new DotSaver(complexNet); }
@Test public void TheOperatorsAreExecutedInOrder() { BernoulliVertex v3 = new BernoulliVertex(0.5); BooleanVertex v4 = v1.and(v2).or(v3); // (v1 AND v2) OR v3 BooleanVertex v5 = v1.and(v2.or(v3)); // v1 AND (v2 OR v3) v1.setValue(false); v2.setValue(true); v3.setValue(true); assertTrue(v4.eval().scalar()); assertFalse(v5.eval().scalar()); }
@Test public void canRunGradientOptimiserThroughIfWhenFalse() { UniformVertex a = new UniformVertex(2, 2.5); a.setValue(2.1); UniformVertex b = new UniformVertex(1, 1.5); b.setValue(1.1); BooleanVertex leftFlip = new BernoulliVertex(0.5); BooleanVertex rightFlip = new BernoulliVertex(0.5); leftFlip.observe(false); rightFlip.observe(false); DoubleVertex ifVertex = If.isTrue(leftFlip.or(rightFlip)) .then(a) .orElse(b); double sigma = 2.0; GaussianVertex observedIf = new GaussianVertex(ifVertex, sigma); observedIf.observe(1.25); BayesianNetwork bayesianNetwork = new BayesianNetwork(observedIf.getConnectedGraph()); GradientOptimizer gradientOptimizer = KeanuOptimizer.Gradient.of(bayesianNetwork); gradientOptimizer.maxLikelihood(); Assert.assertEquals(1.25, b.getValue().scalar(), 1e-6); }
@Test public void canRunGradientOptimiserThroughIfWhenTrue() { UniformVertex a = new UniformVertex(2, 2.5); a.setValue(2.1); UniformVertex b = new UniformVertex(1, 1.5); b.setValue(1.1); BooleanVertex leftFlip = new BernoulliVertex(0.5); BooleanVertex rightFlip = new BernoulliVertex(0.5); leftFlip.observe(false); rightFlip.observe(true); DoubleVertex ifVertex = If.isTrue(leftFlip.or(rightFlip)) .then(a) .orElse(b); double sigma = 2.0; GaussianVertex observedIf = new GaussianVertex(ifVertex, sigma); observedIf.observe(2.25); BayesianNetwork bayesianNetwork = new BayesianNetwork(observedIf.getConnectedGraph()); GradientOptimizer gradientOptimizer = KeanuOptimizer.Gradient.of(bayesianNetwork); gradientOptimizer.maxLikelihood(); Assert.assertEquals(2.25, a.getValue().scalar(), 1e-6); }