示例#1
0
文件: IJGP.java 项目: acares/ProbCog
 public SchematicMiniBucket(BeliefNetworkEx bn, int bound) {
   this.bn = bn;
   bucketMap = new HashMap<BeliefNode, Bucket>();
   // order the variables from X_1 to X_n
   BeliefNode[] nodes = bn.bn.getNodes();
   int[] topOrder = bn.getTopologicalOrder();
   // place each CPT in the bucket of the highest index
   for (int i = topOrder.length - 1; i > -1; i--) {
     Bucket bucket = new Bucket(nodes[topOrder[i]]);
     int[] cpt = bn.getDomainProductNodeIndices(nodes[topOrder[i]]);
     HashSet<BeliefNode> cptNodes = new HashSet<BeliefNode>();
     for (int j : cpt) {
       cptNodes.add(nodes[j]);
     }
     BucketVar bv = new BucketVar(cptNodes);
     bv.setFunction(nodes[topOrder[i]].getCPF());
     bucket.addVar(bv);
     bucketMap.put(nodes[topOrder[i]], bucket);
   }
   // partition buckets and create arcs
   for (int i = topOrder.length - 1; i > -1; i--) {
     Bucket oldVar = bucketMap.get(nodes[topOrder[i]]);
     oldVar.partition(bound);
     HashSet<BucketVar> scopes = oldVar.createScopeFunctions();
     for (BucketVar bv : scopes) {
       // add new variables to the bucket with the highest index
       BeliefNode node = bv.getMaxNode(bn);
       bucketMap.get(node).addVar(bv);
     }
   }
 }