MapReduce、PythonやNetworkX
質問
私は実unweightedランダムに機能をグラフでる仕組みを構築した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の並列化に一部業務を継続して行っており、今後はここにランダムですよ。ですが今までになかったことになったとしても私のランダムですよ。
解決
住ご質問:
必要なアドレスヴのコメントとなります。たっくんです。説明してもコードより詳しく話すつもりですが。
できませんぜ歩行アルゴリズムが実行される。その本質は、それぞれの線形プロセス各ステップに依存していけるようになっています。使できるものではありませんか次のノードにジャンプすることを知らず、前のノードを除く開始ノード).の場合コードは実際にはランダムに選択独立したのは前回と趣向を変え、必要なものを説明するご質問です。
仮に各ランダムには独立しま ができ 走り多くのランダムウォーク。これをシナリオ embarassingly並列, ことになる良いことです。
わからないのはなぜ使用したいHadoop、具体的には、こちらです。最初のステップのあり方""できるだけ書くことを基本として、プログラムを使用qsubしくはそれに相当する)のスクリプトファームアイテムの学習プログレスを運行はこのプログラムのサーバへの?" 答えがnoの場合は、次のステップは、"サポートまでお問い合わせくださ マルチプロセモジュール?" へ行けば多重処理するために見 Jesse Nollerのマルチプロセ-プレゼンテーションPyCon2009年.
現在、特定のコー---
必要なものかを説明するのノードにグラフです。とても面白かったのはなぜだり扱い、そのような辞書(呼び出し
.keys()
)。な辞書、どのようにキーと値です。んだの保存の隣人であるキーが、NetworkXできることを通じてGraph.neighbors()
方法。だけを格納する近隣のノードをノード自体には、誤解のNetworkX図書館があります。のグラフにおまかせください。また、同じ論理回
unweighted_random_walk()
, また、旅行開始ノードからの送信先のノードのその先ノードを開始ノードです。なぜですか?必要なのは、論理のための一方向です。この関数を呼び出す。電話での起動先ノードに引数としての方向の一方、スワップの引数を先にてスタートを歩くのです。まして独立した通話とができること。使用しない
while True:
だけでなく、ここが一般的です。しなければなりませんの実際の条件の下で継続する.例えば、while current_point != ending_point: ...
ない文字列を返しの情報を返します。※例えば、
return hitting_time
れることに注意してくださいアドバイスポイント2直線上にいけを返しを打つ時に、和の到達時間のある通話および通話の合計通勤。便利です。
参照
- の プロジェクトディスコ のためのPythonのバMapReduceを実施
- Jesse Nollerの発表並行処理、分散コンピューティング からPyCon2009年
編集: 付属のリンクをJesse Nollerの発表とディスコ.
他のヒント
私はあなたを助けることができるマップ減らす方法が表示されません。最初の部分は、多くの異なるデータ要素に対して独立して行うことができ、計算され、第2の部分は何とかすべてのそれらの結果を組み合わせている:あなたは2部構成の操作を持ってどこに使われています。おそらく、そこにこのランダムウォークを支援するために、マップ減らす使用するための賢い方法ですが、私はそれを見ることはありません。
あなたのランダムウォークは完全にランダムである:それも上の続行する前に、同じ2つのノード間で前後にホッピング、多数のループで終わることができました。おそらく、あなたは、あなたが検索するので、大きなスペースを持っていないので、何とかそれを制約したい?
いて実際にランダムに徒歩でご利用の場合は数式の詳細に この論文.