Я внедрил функцию невзвешенного случайного блуждания для графика, который я построил на Python, используя NetworkX. Ниже приведен фрагмент моей программы, касающейся случайного блуждания. В другом месте моей программы у меня есть метод, который создает граф, и у меня есть метод, который имитирует различные пользовательские методы тестирования графа, которые я написал. Один из этих методов тестирования графов выбирает два узла случайно из графика и выполняет произвольное блуждание между ними. Две вещи, которые вычисляются из этой случайной ходьбы, достигают времени (количество ссылок, которые пересекаются от начала до конечной точки) и время коммутации (количество пройденных линий от начала до конца и обратно до начальной точки).MapReduce, Python и NetworkX
def unweighted_random_walk(starting_point,ending_point, graph):
'''
starting_point: String that represents the starting point in the graph
ending_point: String that represents the ending point in the graph
graph: A NetworkX Graph object
'''
##Begin the random walk
current_point=starting_point
#current_node=graph[current_point]
current_point_neighors=graph.neighbors(current_point)
hitting_time=0
#Determine the hitting time to get to an arbitrary neighbor of the
#starting point
while current_point!=ending_point:
#pick one of the edges out of the starting_node with equal probs
possible_destination=current_point_neighbors[random.randint(0,current_point_neighors)]
current_point=possible_destination
current_point_neighbors=graph.neighbors(current_point)
hitting_time+=1
return hitting_time
Мой код для случайного блуждания является довольно прямо вперед, потому что я просто собирание случайных узлов, пока конечная точка не будет достигнута. Тем не менее, эта текущая реализация очень медленная, когда я пытаюсь запустить несколько случайных блужданий (я думаю, что мне нужно запустить миллион в какой-то момент).
Мой вопрос: есть ли способ, которым я могу использовать Hadoop MapReduce, чтобы распараллелить некоторые из операций, которые происходят здесь для этой случайной ходьбы? Есть ли лучший способ сделать мою случайную прогулку?
Я смущен вашим кодом: вы определили Ddict (который выглядит так же, как collection.defaultdict btw), а затем создайте его и никогда не используйте. –