/** * Copyright (c) 2011 Michael Kutschke. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Michael Kutschke - initial API and implementation. */ package org.eclipse.recommenders.testing.jayes; import java.util.Arrays; import org.eclipse.recommenders.jayes.BayesNet; import org.eclipse.recommenders.jayes.BayesNode; import org.eclipse.recommenders.jayes.transformation.util.ArrayFlatten; public final class NetExamples { private NetExamples() { // Not meant to be instantiated } /** * a simple network with 4 nodes. The structure is as follows: <br/> * * <pre> * a - b * \ / * c - d * * </pre> * * so although this is an easy network, LBP should show some expected trouble with this. JunctionTree will merge a, * b and c together to form a Clique * * @return */ public static BayesNet testNet1() { BayesNet net = new BayesNet(); BayesNode a = net.createNode("a"); a.addOutcomes("true", "false"); a.setProbabilities(0.2, 0.8); BayesNode b = net.createNode("b"); b.addOutcomes("la", "le", "lu"); b.setParents(Arrays.asList(a)); // @formatter:off b.setProbabilities(ArrayFlatten.flatten(new double[][] { { 0.1, 0.4, 0.5 }, // a = true { 0.3, 0.4, 0.3 } // a = false })); // @formatter:on BayesNode c = net.createNode("c"); c.addOutcomes("true", "false"); c.setParents(Arrays.asList(a, b)); // @formatter:off c.setProbabilities(ArrayUtils.flatten(new double[][][] { { // a = true { 0.1, 0.9 }, // b = la { 0.0, 1.0 }, // b = le { 0.5, 0.5 } // b = lu }, { // a = false { 0.2, 0.8 }, // b = la { 0.0, 1.0 }, // b = le { 0.7, 0.3 } // b = lu } })); // @formatter:on BayesNode d = net.createNode("d"); d.addOutcomes("true", "false"); d.setParents(Arrays.asList(c)); // @formatter:off d.setProbabilities(ArrayFlatten.flatten(new double[][] { { 0.5, 0.5 }, // c = true { 0.2, 0.8 } // c = false })); // @formatter:on return net; } public static BayesNet unconnectedNet() { BayesNet net = new BayesNet(); BayesNode a = net.createNode("a"); BayesNode b = net.createNode("b"); a.addOutcomes("true", "false"); b.addOutcomes("true", "false"); a.setProbabilities(0.4, 0.6); b.setProbabilities(0.55, 0.45); return net; } public static BayesNet sparseNet() { BayesNet net = new BayesNet(); BayesNode a = net.createNode("a"); a.addOutcome("true"); a.addOutcome("false"); a.setProbabilities(0, 1); BayesNode b = net.createNode("b"); b.addOutcomes("la", "le", "lu"); b.setParents(Arrays.asList(a)); // @formatter:off b.setProbabilities(ArrayFlatten.flatten(new double[][] { { 0.1, 0.4, 0.5 }, // a = true { 0.3, 0.4, 0.3 } // a = false })); // @formatter:on BayesNode c = net.createNode("c"); c.addOutcomes("true", "false", "sth", "sthElse"); c.setParents(Arrays.asList(a, b)); // @formatter:off c.setProbabilities(ArrayUtils.flatten(new double[][][] { { // a = true { 0.0, 0.0, 0.1, 0.9 }, // b = la { 0.0, 0.0, 0.0, 1.0 }, // b = le { 0.0, 0.0, 0.0, 1.0 } // b = lu }, { // a = false { 0.0, 0.5, 0.0, 0.5 }, // b = la { 0.0, 0.0, 0.0, 1.0 }, // b = le { 0.0, 0.7, 0.3, 0.0 } // b = lu } })); // @formatter:on BayesNode d = net.createNode("d"); d.addOutcomes("true", "false"); d.setParents(Arrays.asList(c)); // @formatter:off d.setProbabilities(ArrayFlatten.flatten(new double[][] { { 0.5, 0.5 }, // c = true { 0.2, 0.8 }, // c = false { 0.5, 0.5 }, // c = sth { 0.0, 1.0 } // c = sthElse })); // @formatter:on return net; } public static BayesNet treeNet() { BayesNet net = new BayesNet(); BayesNode a = net.createNode("a"); a.addOutcomes("true", "false"); BayesNode b = net.createNode("b"); b.addOutcomes("true", "false"); b.setParents(Arrays.asList(a)); BayesNode c = net.createNode("c"); c.addOutcomes("true", "false"); c.setParents(Arrays.asList(a)); BayesNode d = net.createNode("d"); d.addOutcomes("true", "false"); d.setParents(Arrays.asList(a)); a.setProbabilities(0.4, 0.6); b.setProbabilities(0.55, 0.45, 0.45, 0.55); c.setProbabilities(0.55, 0.45, 0.45, 0.55); d.setProbabilities(0.55, 0.45, 0.45, 0.55); return net; } }