2 dimensional bit vector approach Mikio Kubo. TIGER/Line graph DC.tmp 9559 nodes and 29818 arcs Shortest Paths between all border nodes of 2 regions.

Slides:



Advertisements
Similar presentations
組合せ最適化輪講 2.3 連結性 川原 純. 2.3 連結性 内容 – グラフ上の節点をすべてたどるアルゴリズム 計算機上でのグラフの表現 – 強連結成分を求めるアルゴリズム トポロジカル順序を求める方法も – k- 連結、 k- 辺連結について – 2- 連結グラフの耳分解について.
Advertisements

図示、可視化モジュール ~ pylab と numpy を ちょっと~. pylab とは? ・数学や統計的なグラフを生成するモ ジュール ・インストール pip や easy install からのインストールを推奨 →numpy モジュールなどの前提としている。 Anaconda の場合は標準.
第 5 章 2 次元モデル Chapter 5 2-dimensional model. Contents 1.2 次元モデル 2-dimensional model 2. 弱形式 Weak form 3.FEM 近似 FEM approximation 4. まとめ Summary.
数学のかたち 数学解析の様々なツール GRAPSE編 Masashi Sanae.
到着時刻と燃料消費量を同時に最適化する船速・航路計画
ロジスティクス工学 第6章 動的ロットサイズ決定モデル 東京商船大学 久保 幹雄
コンピュータビジョン特論B - Graph Cuts - 永橋知行.
NetworkXによるネットワーク分析 東京海洋大学 久保 幹雄.
情報処理演習 (9)グラフィックス システム科学領域 日浦 慎作.
2009/12/4 グラフ (2) 第10講: 平成21年12月4日 (金) 4限 E252教室 コンピュータアルゴリズム.
久保幹雄 東京海洋大 宇野 毅明 国立情報学研究所 藤澤 克樹 中央大学 宮本 裕一郎 上智大学
稲葉 一浩 (k.inaba) Python と プログラミングコンテスト 稲葉 一浩 (k.inaba)
Ex7. Search for Vacuum Problem
Ex8. Search for Vacuum Problem(2)
6-2 データベース 1.SQLite SQLを単純化した SQLite を使ってデータベースを操作 表「fruit」
東京海洋大学 久保 幹雄 理論と実務をつなぐには Part II 東京海洋大学 久保 幹雄
最短路問題をGurobiで解こう! 流通最適化工学 補助資料.
Problem D: Double Sorting 原案: oxy, 解答作成: oxy, nya.
最適化ソルバーのための Python言語入門
Approximation of k-Set Cover by Semi-Local Optimization
EGSに対応した粒子軌跡と 計算体系の3次元表示ソフト - CGVIEW -
Object Group ANalizer Graduate School of Information Science and Technology, Osaka University OGAN visualizes representative interactions between a pair.
情報工学概論 (アルゴリズムとデータ構造)
Paper from PVLDB vol.7 (To appear in VLDB 2014)
Bottle/Pythonによる Webアプリ入門
SP0 check.
Real Time Graph 指定された計測のデータを実時間収集サーバ(LABCOM)から取得し、リアルタイムにグラフとして表示する。
第11講: 平成18年12月 8日 (金) 4限 E352教室 グラフ (1).
データ構造と アルゴリズム 第八回 知能情報学部 新田直也.
最短路問題のための LMS(Levelwise Mesh Sparsification)
Estimating Position Information by Detecting Network-Connection
ピカチュウによる オブジェクト指向入門 (新版)
Licensing information
データ構造と アルゴリズム 第十一回 理工学部 情報システム工学科 新田直也.
データ構造と アルゴリズム 第四回 知能情報学部 新田直也.
Yuri Y. Boykov Marie-Pierre Jolly
最短経路.
領域分割手法について 2008年2月26日 中島研吾.
ロジスティクス工学 第7章 配送計画モデル 東京商船大学 久保 幹雄
点素パス問題に対するアルゴリズム 小林 佑輔 東京大学 大学院情報理工学系研究科 組合せ最適化セミナー 2012 年 7月 13日
第25章 単一始点最短路 3節 Bellman-Fordのアルゴリズム
ネットワーク理論 Text. Part 3 pp 最短路問題 pp 最大流問題 pp.85-94
グラフアルゴリズムの可視化 数理科学コース 福永研究室 高橋 優子 2018/12/29.
情報工学概論 (アルゴリズムとデータ構造)
豊田正史(Masashi Toyoda) 福地健太郎(Kentarou Fukuchi)
最短路を ものすごくはやく 答える方法.
第9回 優先度つき待ち行列,ヒープ,二分探索木
EGSに対応した粒子軌跡と 計算体系の3次元表示ソフト - CGVIEW -
First Course in Combinatorial Optimization
データ構造と アルゴリズム 第五回 知能情報学部 新田直也.
Ex7. Search for Vacuum Problem
数値計算モジュール NumPy.
算法数理工学 第8回 定兼 邦彦.
アルゴリズムとデータ構造 2011年7月8日課題の復習
B+Treeのバケットサイズ.
15.1 文字列処理の基本 15.2 文字列処理用ライブラリ関数
算法数理工学 第7回 定兼 邦彦.
情報知能学科「アルゴリズムとデータ構造」
統計ソフトウエアRの基礎.
第9回 優先度つき待ち行列,ヒープ,二分探索木
離散数学 06. グラフ 序論 五島.
Solver for COnstraint Programming:スコープ Pythonモジュールの使い方
2009/11/27 グラフ (1) 第9講: 平成21年11月27日 (金) 4限 E252教室 コンピュータアルゴリズム.
pf-7. データ構造とアルゴリズム (Python プログラミング基礎を演習で学ぶシリーズ)
データ構造と アルゴリズム 第四回 知能情報学部 新田直也.
データ構造と アルゴリズムI 第三回 知能情報学部 新田直也.
15.1 文字列処理の基本 15.2 文字列処理用ライブラリ関数
点素パス問題に対するアルゴリズム 小林 佑輔 東京大学 大学院情報理工学系研究科 組合せ最適化セミナー 2012 年 7月 13日
君ならどうする – ls-lRシェル Python編
自己ルーティングによるラベル識別 コリニア音響光学効果を用いたラベル識別 スケジューリング 経路制御 ラベル ラベル 識別 ラベル 処理
Presentation transcript:

2 dimensional bit vector approach Mikio Kubo

TIGER/Line graph DC.tmp 9559 nodes and arcs Shortest Paths between all border nodes of 2 regions

Source region border nodes (red) and other nodes (yellow)

Target region border nodes (red) and other nodes (yellow)

Connecting network

After concatenation of degree 2 nodes

After shrinking the nodes around the source and target regions By storing all shortest path length between transit (cut) nodes, the shortest path problem between 2 regions is reduced to the problem on the graph above.

TIGER/Line graph USA-road-d.NY nodes and arcs

degree frequency histogram [0, 28, 440, 32] Arcs on shortest paths between border nodes (red)

Connecting network and the graph after concatenation and shrinking the nodes in the regions

終点領域から遠い順に最短路を解き, 最短路木内の点を削除する( 59 回解くべきところを 25 回に削減)

始点付近の拡大図

Implementation (Python +networkX)

Read data and construct graph n=len(x_cord) for i in range(n): # 点集合の追加 G.add_node(i) G.position[i]=(x_cord[i], y_cord[i]) m=len(edge_info) for (i,j,length) in edge_info: # 枝集合の追加 G.add_edge(i,j,length) from pylab import * from networkx import * # モジュールの読み込み G=XGraph() # グラフインスタンスの生成 G.position={} # 座標保管用の辞書 点の座標のリスト x_cord[],y_cord[] 枝情報 (i,j,length) のリスト edge_info[]

draw(G,G.position,node_size=1000/n,with_labels=None,width=1, node_color='b',edge_color='g') グラフの表示( position 指定,サイズ 1000/n, ラベルなし,線幅 1 ,点色 b ,枝色 g )

最大の連結成分の抽出 # グラフ G の最大の連結成分( 0 番目)を H に入れる H=connected_component_subgraphs(G) [0] # 点の座標の更新 H.position={} for node in H.nodes_iter(): (x,y)=G.position[node] H.position[node]=(x,y) connected_component_subgraphs(G) は networkX の関数

バケット( 2 次元格子)に点を入れる

バケットの準備 # 各バケットにおおよそ 100 の点を入れるようにバケット数を決 める n_bucket=int(sqrt(n/100)) # バケット (i,j) に所属する点のリストを準備 bucket=[ [ [] for i in range(n_bucket) ] for j in range(n_bucket) ] G.bucket={} # 点の所属するバケットを保管する辞書を準備 for node in G.nodes_iter(): (x,y)=G.position[node] i=int(x*n_bucket) j=int(y*n_bucket) bucket[i][j].append(node) # バケット (i,j) のリストに点を追加 G.bucket[node]=(i,j) # 辞書にバケット番号を保管

バケットの縁の点集合 # 縁の点集合を保管するリストの準備 border=[[[] for i in range(n_bucket)] for j in range(n_bucket)] for i in range(n_bucket): for j in range(n_bucket): if len(bucket[i][j])>0: # 空でないバケットに対して for node in bucket[i][j]: for n1 in G.neighbors(node): # 隣接点集合 ( networkX ) if G.bucket[node] <> G.bucket[n1]: # 隣接点が異なるバケットに含まれているなら # 縁の点集合に追加 border[i][j].append(node)

点の重複の除去 startnodes=set(border[start_i][start_j]) 開始バケット( stgart_i,start_j) の縁の点集合の抽出 set() はリストから集合(重複がない要素の集まり)を抽出する関数

2 バケット間の最短路計算 paths=[] # パスを保管するリストの準備 for s in set(border[start_i][start_j]): #networkX の最短路は遅い ->BoostGraphLibrary(BGL) を利用 pred=BoostGraph.findAllShortestPath(s) for t in set(border[end_i][end_j]): dst=t #終点 t から最短路木を辿る sp = [dst] while s != dst: # 最短路木の前の点 pred へ移動 dst=BoostGraph.vertexesid[ pred[BoostGraph.vertexes[dst]] ] sp.append(dst) sp.reverse() # 終点からの点列を逆にす る paths.append(sp) # パスリストに追加

G.clear() # グラフのクリア for sp in paths: G.add_path(sp) # パスの追加 # 3倍の枝幅で描画 draw(G,G.position,node_size=1000/n,with_labels=None, width=3,node_color='b',edge_color='r')

点の次数のヒストグラム degseq=G.degree() # 次数を計算してリストを返す関数 dmax=max(degseq)+1 # 最大の次数を計算( max は python の関 数) freq= [ 0 for d in range(dmax) ] # 頻度を保管するリストの準備 for d in degseq: freq[d] += 1 print "degree frequency histgram",freq 結果 degree frequency histgram [0, 39, 648, 97, 18]