示例#1
0
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
示例#2
0
	
	# 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):