def getModelProbem(k): """ Create a k-by-k grid and a matching length k^2 vector b. b is formed to represent a room with 0 on all sides except one side of length k with value 1. """ k = int(k) k2 = k*k # add the self loops A = DiGraph(ParVec.range(k2), ParVec.range(k2), ParVec(k2, 4), k2, k2) # add the left and right edges (same row, -1 and +1 column, -1 and +1 index) A += DiGraph(ParVec.range(k2-1), ParVec.range(1, k2), ParVec(k2-1, -1), k2) A += DiGraph(ParVec.range(1, k2), ParVec.range(k2-1), ParVec(k2-1, -1), k2) # add the up and down edges (same column, -1 and +1 column, -k and +k index) A += DiGraph(ParVec.range(k2-k), ParVec.range(k, k2), ParVec(k2-k, -1), k2) A += DiGraph(ParVec.range(k, k2), ParVec.range(k2-k), ParVec(k2-k, -1), k2) # create the right-hand side b = ParVec.range(k2) b._dpv.Apply(pcb.ifthenelse(pcb.bind2nd(pcb.less(), k), pcb.set(1.0), pcb.set(0.0))) return A, b
# the actual BFS if (useEWise): parents = bfsTreeEWise(G, start, sym=True) else: parents = G.bfsTree(start, sym=True) itertime = time.time() - before # // Aydin's code for finding number of edges: # FullyDistSpVec<int64_t, int64_t> parentsp = parents.Find(bind2nd(greater<int64_t>(), -1)); # parentsp.Apply(set<int64_t>(1)); # // we use degrees on the directed graph, so that we don't count the reverse edges in the teps score # int64_t nedges = EWiseMult(parentsp, degrees, false, (int64_t) 0).Reduce(plus<int64_t>(), (int64_t) 0); import kdt.pyCombBLAS as pcb parentsp_pcb = parents._dpv.Find(pcb.bind2nd(pcb.greater(), -1)) parentsp_pcb.Apply(pcb.set(1)) #print "number of discovered verts: ",parentsp_pcb.getnee()," total: ",len(parents) nedges = pcb.EWiseMult(parentsp_pcb, degrees._dpv, False, 0).Reduce(pcb.plus()) #nedges2 = len((parents[origI] != -1).find()) #if kdt.master(): # if (nedges != nedges2): # print "edge counts differ! ewisemult method: %d, find() method: %d"%(nedges, nedges2) K2elapsed.append(itertime) K2edges.append(nedges) K2TEPS.append(nedges/itertime) i += 1 if (doValidation): verifyInitTime = time.time()