package org.personalsmartspace.cm.reasoning.bayesian; import java.util.ArrayList; import org.personalsmartspace.cm.reasoning.bayesian.solving.*; import org.personalsmartspace.cm.reasoning.bayesian.structures.DAG; import org.personalsmartspace.cm.reasoning.bayesian.structures.Edge; import org.personalsmartspace.cm.reasoning.bayesian.structures.Node; /** * @author fran_ko * */ public class BayesMain { /** * @param args */ public static void main(String[] args) { System.out.println("Start new"); DAG bNet = createActivityNetwork();//createExampleGraph();// // System.out.println(bNet); JunctionTree beispiel = new JunctionTree(bNet); beispiel.initialiseJTree(); beispiel.propagate(); /*change something*/ /* * HARD EVIDENCE: COMPLETE NETWORK * Microphone Loud, show AS, Activity * * later: * * Microphone Loud, US WordProcessor, show AS, Activity beispiel.addEvidence(bNet.getNodes()[11], "Loud"); System.out.println("\n\n\n\n\n\n\n\n\n\n"+bNet.getNodes()[8].printMarginalization()); System.out.println(bNet.getNodes()[1].printMarginalization()+"\n\n\n\n\n\n\n\n\n\n"); beispiel.addEvidence(bNet.getNodes()[3], "WordProcessor"); System.out.println("\n\n\n\n\n\n\n\n\n\n"+bNet.getNodes()[8].printMarginalization()); System.out.println(bNet.getNodes()[1].printMarginalization()+"\n\n\n\n\n\n\n\n\n\n"); */ //beispiel.removeEvidence(bNet.getNodes()[11]); //beispiel.removeEvidence(bNet.getNodes()[3]); /* * SOFT EVIDENCE: BAYESLETS * AS soft, show Activity * * later: * * AS soft, US WordProcessor, show AS, Activity */ String[] values = bNet.getNodes()[8].getStates();//{"Noisy", "Conversation", "Quiet"}; double[] probs = {0.6725,0.3275,0}; beispiel.addEvidence(bNet.getNodes()[8], values, probs); System.out.println("\n\n\n\n\n\n\n\n\n\n"+bNet.getNodes()[8].printMarginalization()); System.out.println(bNet.getNodes()[1].printMarginalization()+"\n\n\n\n\n\n\n\n\n\n"); beispiel.addEvidence(bNet.getNodes()[3], "WordProcessor"); System.out.println("\n\n\n\n\n\n\n\n\n\n"+bNet.getNodes()[8].printMarginalization()); System.out.println(bNet.getNodes()[1].printMarginalization()+"\n\n\n\n\n\n\n\n\n\n"); System.out.println("\n\n\n\n\n"+ beispiel.getMarginalized("Activity", 1)+"\n\n\n\n\n"); //Wrong Evidence!!! beispiel.addEvidence(bNet.getNodes()[3], "WordProssor"); System.out.println("\n\n\n\n\n\n\n\n\n\n"+bNet.getNodes()[8].printMarginalization()); System.out.println(bNet.getNodes()[1].printMarginalization()+"\n\n\n\n\n\n\n\n\n\n"); beispiel.addEvidence(bNet.getNodes()[8], values, probs); System.out.println("\n\n\n\n\n\n\n\n\n\n"+bNet.getNodes()[8].printMarginalization()); System.out.println(bNet.getNodes()[1].printMarginalization()+"\n\n\n\n\n\n\n\n\n\n"); System.out.println("\n\n\n\n\n"+ beispiel.getMarginalized("Activity", 1)+"\n\n\n\n\n"); // beispiel.removeEvidence(bNet.getNodes()[3]); // System.out.println("\n\n\n\n\n\n\n\n\nremoved evidence from UsedServices\n"+bNet.getNodes()[1].printMarginalization()+"\n\n\n\n\n\n\n\n\n\n"); /* String[] values = {"Home", "Office", "MeetingRoom", "Outdoor"};//{"off", "on"}; double[] probs = {0,1,0,0};//{1,0}; beispiel.addEvidence(bNet.getNodes()[4], "evening"); beispiel.addEvidence(bNet.getNodes()[5], "yes"); beispiel.addEvidence(bNet.getNodes()[2], "unknown"); beispiel.addEvidence(bNet.getNodes()[3], "VoIP"); beispiel.addEvidence(bNet.getNodes()[7], values, probs); System.out.println("\n\n\n\n\n"+bNet.getNodes()[0].printMarginalization()); */ System.out.println("fertig"); /* String[] abc = {"on", "off"}; Edge e = new Edge(new Node("a",abc),new Node("a",abc)); UndirectedEdge u = (UndirectedEdge) e; System.out.println(u instanceof Edge); */ } private static DAG createExampleGraph(){ String[] abc = {"on", "off"}; Node a = new Node("a",abc); Node b = new Node("b",abc); Node c = new Node("c",abc); Node d = new Node("d",abc); Node e = new Node("e",abc); Node f = new Node("f",abc);//def); Node g = new Node("g",abc); Node h = new Node("h",abc); Edge ab = new Edge(a,b); Edge ac = new Edge(a,c); Edge bd = new Edge(b,d); Edge ce = new Edge(c,e); Edge df = new Edge(d,f); Edge ef = new Edge(e,f); Edge cg = new Edge(c,g); Edge eh = new Edge(e,h); Edge gh = new Edge(g,h); ArrayList nodes = new ArrayList(); ArrayList edges = new ArrayList(); nodes.add(a); nodes.add(b); nodes.add(c); /* ArrayList<String[]> states = new ArrayList<String[]>(); String[] temp = new String[3]; int position = 0; structures.ProbabilityDistribution.createStatePermutations(nodes, states, temp, position); String ergebnis = ""; for (String[] s: states) { for(String str: s) ergebnis+=str+"\t"; ergebnis+="\n";} System.out.println("\nHier kommt das endergebnis, das ich jetzt nimmer versteh:\n"+ergebnis); */ nodes.add(d); nodes.add(e); nodes.add(f); nodes.add(g); nodes.add(h); edges.add(ab); edges.add(ac); edges.add(bd); edges.add(ce); edges.add(df); edges.add(ef); edges.add(cg); edges.add(eh); edges.add(gh); double[] tempa = {0.5, 0.5}; a.setProbDistribution(tempa); double[] tempb = {0.5, 0.4,.5,.6}; b.setProbDistribution(tempb); double[] tempc = {0.7, 0.2,.3,.8}; c.setProbDistribution(tempc); double[] tempd = {0.9, 0.5,.1,.5}; d.setProbDistribution(tempd); double[] tempe = {0.3, 0.6,.7,.4}; e.setProbDistribution(tempe); double[] tempf = {0.01, 0.01,.01,.99,.99,.99,.99,.01};//,0,0,0,0,0,0,0,0}; f.setProbDistribution(tempf); double[] tempg = {0.8, 0.1,.2,.9}; g.setProbDistribution(tempg); double[] temph = {0.05, 0.95,.95,.95,.95,.05,.05,.05}; h.setProbDistribution(temph); return new DAG(nodes, edges); } private static DAG createActivityNetwork(){ String[] as = {"busy", "free"}; String[] bs = {"DangerousActivity", "IntellectualActivity", "CommunicationActivity", "IdleActivity", "PassiveActivity"}; String[] cs = {"none", "Family", "Boss", "unknown"}; String[] ds = {"WordProcessor", "VoIP", "Newscast", "NoActivity"}; String[] es = {"morning", "afternoon", "evening", "night"}; String[] fs = {"yes", "no"}; String[] gs = {"Walking", "Standing", "Sitting"}; String[] hs = {"Home", "Office", "MeetingRoom", "Outdoor"}; String[] is = {"Noisy", "Conversation", "Quiet"}; String[] js = {"high", "medium", "low"}; String[] ks = {"Home", "Office", "MeetingRoom", "Outdoor"}; String[] ls = {"Loud", "Medium", "Silent"}; Node a = new Node("Busy_Status",as); Node b = new Node("Activity",bs); Node c = new Node("Caller",cs); Node d = new Node("Used_Services",ds); Node e = new Node("Time",es); Node f = new Node("Working_Day",fs);//def); Node g = new Node("Movement",gs); Node h = new Node("Location",hs); Node i = new Node("Noise_Level",is); Node j = new Node("MovementSensor",js); Node k = new Node("LocationSensor",ks); Node l = new Node("Microphone",ls); /* * ONLY the order of constructing edges determines the order of parent-configurations in probability tables!!! */ Edge ca = new Edge(c,a); Edge ba = new Edge(b,a); Edge bd = new Edge(b,d); Edge fb = new Edge(f,b); Edge eb = new Edge(e,b); Edge bg = new Edge(b,g); Edge bh = new Edge(b,h); Edge bi = new Edge(b,i); Edge hj = new Edge(h,j); Edge gj = new Edge(g,j); Edge hk = new Edge(h,k); Edge il = new Edge(i,l); ArrayList nodes = new ArrayList(); ArrayList edges = new ArrayList(); nodes.add(a); nodes.add(b); nodes.add(c); nodes.add(d); nodes.add(e); nodes.add(f); nodes.add(g); nodes.add(h); nodes.add(i); nodes.add(j); nodes.add(k); nodes.add(l); edges.add(ca); edges.add(ba); edges.add(bd); edges.add(fb); edges.add(eb); edges.add(bg); edges.add(bh); edges.add(bi); edges.add(hj); edges.add(gj); edges.add(hk); edges.add(il); double[] tempa = {1, 0.7, 0.8, 0, 0.4, 1, 0.3, 0.5, 0, 0.4, 1, 0, 0.1, 0, 0.2, 1, 0.7, 0.8, 0, 0.4, 0, 0.3, 0.2, 1, 0.6, 0, 0.7, 0.5, 1, 0.6, 0, 1, 0.9, 1, 0.8, 0, 0.3, 0.2, 1, 0.6}; a.setProbDistribution(tempa); double[] tempb = {0, 0, 0.2, 0.1, 0.1, 0.3, 0.2, 0.2, 0.5, 0.5, 0.2, 0, 0, 0.1, 0.1, 0, 0.3, 0.3, 0.1, 0.1, 0.1, 0.3, 0.2, 0.2, 0, 0, 0.2, 0.7, 0.5, 0.1, 0.2, 0.5, 0.2, 0.2, 0.3, 0.1, 0.3, 0.2, 0.3, 0.1}; b.setProbDistribution(tempb); double[] tempc = {0.98, 0.1,.05,.05}; c.setProbDistribution(tempc); double[] tempd = {0, 0.6, 0.1, 0, 0, 0.2, 0.3, 0.5, 0, 0, 0, 0, 0.2, 0, 0.8, 0.8, 0.1, 0.2, 1, 0.2}; d.setProbDistribution(tempd); double[] tempe = {0.25, 0.25,.25,.25}; e.setProbDistribution(tempe); double[] tempf = {0.6, 0.4}; /* 220/365 = 0.6027; 145/365 = 0.3972...*/ f.setProbDistribution(tempf); double[] tempg = {0.8, 0.15, 0.2, 0, 0.2, 0.2, 0.15, 0.2, 0.1, 0.1, 0, 0.7, 0.6, 0.9, 0.7}; g.setProbDistribution(tempg); double[] temph = {0.1, 0.2, 0.25, 0.6, 0.5, 0.1, 0.5, 0.1, 0.1, 0.1, 0.1, 0.2, 0.4, 0.1, 0.2, 0.7, 0.1, 0.25, 0.2, 0.2}; h.setProbDistribution(temph); double[] tempi = {0.5, 0, 0.1, 0.1, 0.3, 0, 0.3, 0.8, 0.1, 0.6, 0.5, 0.7, 0.1, 0.8, 0.1}; i.setProbDistribution(tempi); double[] tempj = {0.4, 0, 0, 0.4, 0, 0, 0.4, 0, 0, 0.4, 0, 0, 0.5, 0.3, 0.1, 0.5, 0.3, 0.1, 0.5, 0.3, 0.1, 0.5, 0.3, 0.1, 0.1, 0.7, 0.9, 0.1, 0.7, 0.9, 0.1, 0.7, 0.9, 0.1, 0.7, 0.9}; j.setProbDistribution(tempj); double[] tempk = {1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1}; k.setProbDistribution(tempk); double[] templ = {0.9, 0.2, 0, 0.1, 0.7, 0.1, 0, 0.1, 0.9}; l.setProbDistribution(templ); return new DAG(nodes, edges); } }