From 1f8b402c01d2c74e240ffef750c5fa494a7274ba Mon Sep 17 00:00:00 2001 From: Dan Kortschak Date: Mon, 22 Jul 2019 12:37:24 +0930 Subject: [PATCH] graph/layout: add Isomap layout --- graph/layout/isomap.go | 63 ++++++ graph/layout/isomap_test.go | 180 ++++++++++++++++++ graph/layout/testdata/line_isomap_golden.png | Bin 0 -> 4436 bytes graph/layout/testdata/sheet_isomap_golden.png | Bin 0 -> 23078 bytes .../layout/testdata/square_isomap_golden.png | Bin 0 -> 9639 bytes .../testdata/tetrahedron_isomap_golden.png | Bin 0 -> 20173 bytes graph/layout/testdata/tube_isomap_golden.png | Bin 0 -> 18087 bytes .../layout/testdata/wp_page_isomap_golden.png | Bin 0 -> 17517 bytes 8 files changed, 243 insertions(+) create mode 100644 graph/layout/isomap.go create mode 100644 graph/layout/isomap_test.go create mode 100644 graph/layout/testdata/line_isomap_golden.png create mode 100644 graph/layout/testdata/sheet_isomap_golden.png create mode 100644 graph/layout/testdata/square_isomap_golden.png create mode 100644 graph/layout/testdata/tetrahedron_isomap_golden.png create mode 100644 graph/layout/testdata/tube_isomap_golden.png create mode 100644 graph/layout/testdata/wp_page_isomap_golden.png diff --git a/graph/layout/isomap.go b/graph/layout/isomap.go new file mode 100644 index 00000000..c448010b --- /dev/null +++ b/graph/layout/isomap.go @@ -0,0 +1,63 @@ +// Copyright ©2019 The Gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package layout + +import ( + "gonum.org/v1/gonum/graph" + "gonum.org/v1/gonum/graph/path" + "gonum.org/v1/gonum/mat" + "gonum.org/v1/gonum/spatial/r2" + "gonum.org/v1/gonum/stat/mds" +) + +// IsomapR2 implements a graph layout algorithm based on the Isomap +// non-linear dimensionality reduction method. Coordinates of nodes +// are computed by finding a Torgerson multidimensional scaling of +// the shortest path distances between all pairs of node in the graph. +// The all pair shortest path distances are calculated using the +// Floyd-Warshall algorithm and so IsomapR2 will not scale to large +// graphs. Graphs with more than one connected component cannot be +// layed out by IsomapR2. +type IsomapR2 struct{} + +// Update is the IsomapR2 spatial graph update function. +func (IsomapR2) Update(g graph.Graph, layout LayoutR2) bool { + nodes := graph.NodesOf(g.Nodes()) + v := isomap(g, nodes, 2) + if v == nil { + return false + } + + // FIXME(kortschak): The Layout types do not have the capacity to + // be cleared in the current API. Is this a problem? I don't know + // at this stage. It might be if the layout is reused between graphs. + // Someone may do this. + + for i, n := range nodes { + layout.SetCoord2(n.ID(), r2.Vec{X: v.At(i, 0), Y: v.At(i, 1)}) + } + return false +} + +func isomap(g graph.Graph, nodes []graph.Node, dims int) *mat.Dense { + p, ok := path.FloydWarshall(g) + if !ok { + return nil + } + + dist := mat.NewSymDense(len(nodes), nil) + for i, u := range nodes { + for j, v := range nodes { + dist.SetSym(i, j, p.Weight(u.ID(), v.ID())) + } + } + + k, v, _ := mds.TorgersonScaling(nil, nil, dist) + if k < dims { + return nil + } + + return v +} diff --git a/graph/layout/isomap_test.go b/graph/layout/isomap_test.go new file mode 100644 index 00000000..20345be3 --- /dev/null +++ b/graph/layout/isomap_test.go @@ -0,0 +1,180 @@ +// Copyright ©2019 The Gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package layout + +import ( + "path/filepath" + "testing" + + "gonum.org/v1/gonum/graph" + "gonum.org/v1/gonum/graph/simple" + "gonum.org/v1/gonum/spatial/r2" + "gonum.org/v1/plot" + "gonum.org/v1/plot/vg" +) + +var isomapR2Tests = []struct { + name string + g graph.Graph +}{ + { + name: "line_isomap", + g: func() graph.Graph { + edges := []simple.Edge{ + {simple.Node(0), simple.Node(1)}, + } + g := simple.NewUndirectedGraph() + for _, e := range edges { + g.SetEdge(e) + } + return orderedGraph{g} + }(), + }, + { + name: "square_isomap", + g: func() graph.Graph { + edges := []simple.Edge{ + {simple.Node(0), simple.Node(1)}, + {simple.Node(0), simple.Node(2)}, + {simple.Node(1), simple.Node(3)}, + {simple.Node(2), simple.Node(3)}, + } + g := simple.NewUndirectedGraph() + for _, e := range edges { + g.SetEdge(e) + } + return orderedGraph{g} + }(), + }, + { + name: "tetrahedron_isomap", + g: func() graph.Graph { + edges := []simple.Edge{ + {simple.Node(0), simple.Node(1)}, + {simple.Node(0), simple.Node(2)}, + {simple.Node(0), simple.Node(3)}, + {simple.Node(1), simple.Node(2)}, + {simple.Node(1), simple.Node(3)}, + {simple.Node(2), simple.Node(3)}, + } + g := simple.NewUndirectedGraph() + for _, e := range edges { + g.SetEdge(e) + } + return orderedGraph{g} + }(), + }, + { + name: "sheet_isomap", + g: func() graph.Graph { + edges := []simple.Edge{ + {simple.Node(0), simple.Node(1)}, + {simple.Node(0), simple.Node(3)}, + {simple.Node(1), simple.Node(2)}, + {simple.Node(1), simple.Node(4)}, + {simple.Node(2), simple.Node(5)}, + {simple.Node(3), simple.Node(4)}, + {simple.Node(3), simple.Node(6)}, + {simple.Node(4), simple.Node(5)}, + {simple.Node(4), simple.Node(7)}, + {simple.Node(5), simple.Node(8)}, + {simple.Node(6), simple.Node(7)}, + {simple.Node(7), simple.Node(8)}, + } + g := simple.NewUndirectedGraph() + for _, e := range edges { + g.SetEdge(e) + } + return orderedGraph{g} + }(), + }, + { + name: "tube_isomap", + g: func() graph.Graph { + edges := []simple.Edge{ + {simple.Node(0), simple.Node(1)}, + {simple.Node(0), simple.Node(2)}, + {simple.Node(0), simple.Node(3)}, + {simple.Node(1), simple.Node(2)}, + {simple.Node(1), simple.Node(4)}, + {simple.Node(2), simple.Node(5)}, + {simple.Node(3), simple.Node(4)}, + {simple.Node(3), simple.Node(5)}, + {simple.Node(3), simple.Node(6)}, + {simple.Node(4), simple.Node(5)}, + {simple.Node(4), simple.Node(7)}, + {simple.Node(5), simple.Node(8)}, + {simple.Node(6), simple.Node(7)}, + {simple.Node(6), simple.Node(8)}, + {simple.Node(7), simple.Node(8)}, + } + g := simple.NewUndirectedGraph() + for _, e := range edges { + g.SetEdge(e) + } + return orderedGraph{g} + }(), + }, + { + name: "wp_page_isomap", // https://en.wikipedia.org/wiki/PageRank#/media/File:PageRanks-Example.jpg + g: func() graph.Graph { + edges := []simple.Edge{ + {simple.Node(0), simple.Node(3)}, + {simple.Node(1), simple.Node(2)}, + {simple.Node(1), simple.Node(3)}, + {simple.Node(1), simple.Node(4)}, + {simple.Node(1), simple.Node(5)}, + {simple.Node(1), simple.Node(6)}, + {simple.Node(1), simple.Node(7)}, + {simple.Node(1), simple.Node(8)}, + {simple.Node(3), simple.Node(4)}, + {simple.Node(4), simple.Node(5)}, + {simple.Node(4), simple.Node(6)}, + {simple.Node(4), simple.Node(7)}, + {simple.Node(4), simple.Node(8)}, + {simple.Node(4), simple.Node(9)}, + {simple.Node(4), simple.Node(10)}, + } + g := simple.NewUndirectedGraph() + for _, e := range edges { + g.SetEdge(e) + } + return orderedGraph{g} + }(), + }, +} + +func TestIsomapR2(t *testing.T) { + for _, test := range isomapR2Tests { + o := NewOptimizerR2(test.g, IsomapR2{}.Update) + var n int + for o.Update() { + n++ + } + p, err := plot.New() + if err != nil { + t.Errorf("unexpected error: %v", err) + continue + } + p.Add(render{o}) + p.HideAxes() + path := filepath.Join("testdata", test.name+".png") + err = p.Save(10*vg.Centimeter, 10*vg.Centimeter, path) + if err != nil { + t.Errorf("unexpected error: %v", err) + continue + } + ok := checkRenderedLayout(t, path) + if !ok { + got := make(map[int64]r2.Vec) + nodes := test.g.Nodes() + for nodes.Next() { + id := nodes.Node().ID() + got[id] = o.Coord2(id) + } + t.Logf("got node positions: %#v", got) + } + } +} diff --git a/graph/layout/testdata/line_isomap_golden.png b/graph/layout/testdata/line_isomap_golden.png new file mode 100644 index 0000000000000000000000000000000000000000..d39f8387296231d3f502f0afd561ab7165b9a7ca GIT binary patch literal 4436 zcmeHL`#;nBA76DUhl)<55G6-S$Z@~UC7fJCqhs#(HO5?GWGYU54+p2*nqf6^$z^IX z*CCxza*LUFNJib4)$77Gj9-q(q^LoGbdcB^P_vf$c_EtxQrGz06 z$kA)RUv+{&_Qiew3hf71p1k>~69PFdeeJ60joADJHX=lvzt^_PWO|w`o89w;*D1T^ zI@P%U`M^!`oK%_2V=;NBWXLa~ZyXTd- z!(X2rJem5ON~My?&Lqae2M=g8n&Pj&J})WB>j_M1=d>I=Am;npEkh29o#}rzk+`?> z=1&nVEv?1H#T4TDJR@v{(|+D6Jzp2?YiVg|ZJqMsmOgqwPv%&RFxdd z`zh(KnITOv%d+aeSHr_sa#Y|;6#OttTwMIfsVisI)mJxHxu~k53M8XivrZNC(d_}q`bUtak$=}eFa0`ma&raP+QCwX&dyG}ZHcmL zHH%+V7)kc)JO+b-y!*GKS!mE@4u|t^s$@LN5#s6S<|cLKOsF=#X-{@o#g*iFMkDaU z%47%f)~!a=@;RNu$7EJ`JRS;}pMJ(*xYU6Fx`;{ehe&~<{oC0I{kGBp=4bp&!?R~T z>oWr<6m4g=9+fq*Zops`78WWVjYCcI_1v+rR{CrdNVFw`cDVm&6WciQ%ZJI1hdNqX zUwyyXYUxp`kZ%Tt_ETYH_7&nBWA|fOCaV;AazPFna#_B>ZUcC6|(Ia(rbq6E<&~uyIS~Vp-Jq*}kRB*Uo zx~He7y}g~uWG>0xbaHx(!(pa79$A9?Q&UsPZdKKh8pz>FCOHTxhnjkyov^*Z1{w4O zHpQ-f0uVYcFW*aml2%vLsGCFpaL?vrho4Fluv>_mH*dn>_zm-0NTh4EdpToX!s6Y# zcW7ke`}fu`7;kOOoz=-48p&FJ4Hc(EtW>a&jb; zU4mtN+V3AMC@6>*EYa(scgMTly~9BhsXVNWit+XWd3LbW%F@!l(2$ulD;vwXhZrnL z;PvRJMmS%;{**BTG?af$RT?JwCjpALny5M#TK#{X^CT(Y5 z?Dq$L{`qH+^W#iKMa8Y{?WQg}45ncqcu3beAmBMsX>xKhCRFZ<_g$h=uA0}duDzMr zeWKFIR15Ad#E?6zR!;$}vbh;6*?7mLlYBTj#<(=s9>2O zK-Ve6AqE4p8^`qv9-T-~4#A3n(FN0rgcA+g>Q)C9rq z8{ryeh-$9(esk5)JvBx zxqqhl|CXJV6)Zz^AQ*#?E*1Pw|E79S_EtOPQixA_0@Jvl^4ga#+io+(Abn44O8`r= zqp=($3`!9^*!EK6ciK|#wZREA6YC`ZLKCFCK<3O zP@LdaF1frMG5O|CpfrJG43N)5Nj`mrMx&z8JDW8`B}p~UA*>K2qvhLLH;~XF>RyV3 za*2JxElsHd`}d1m{464(fwKi@s31{4Mr`)rbvimaC@A)vzK$Gr)5qVx7%nI^kVyv( z0PNkgO*44d@iKh!4M-v;V?XEgG~42#s9X+isavh}$dMzJBvQ;y`U-$?eSJM;JPz5D zr$sgHzND;dV{6L-0La&iykjH@DaC07%|+=?BX<+t2a?ldjr5I-zH^r#!DSU6Mm;Sd zLGSP9%&!@(zC9sov@WKWzh6N@LgHe|+MomUYaDT5VWF+9EhQyoNj41&M15prB&ZNW zE45+1M&{a=g7H}UPOz_o2jr95!@0Dh6LyXs9%p1_so0&kX=qdYYWMEWcC!5oWEJksGnI z#Rnpul_fqceGbxP5WDh}K$s}8!{1TgoTFEmo0&CI{hvQ%jfB*FgtV8H4s*IK|$5vtYNIOxnMk&do&Sf`?es4Jz|cMIc8;L)d@;wW^T?- z80*-%c{xYjk9O+FAyHM_ft5zkt%?_0Tl1v&sT4b~^5b(G(A3+DqtT3vxZX6L#t6C3 zxZ=g!7JnX?88-eo&_q$74L}R)Bc`mwX!|%82DcZ4goX3;A_LVD)qxLLzBA!&YTDic zrDx#{M1(~}<+N^P1(oUr1Oxz3z+n96xt^c4r8uo6_4T?yYBV+1lSGYIIE#5eSx7A# zZr870kBi%y>dy68;#z+H3osa+XptJF&n~`}N!{I=-`LoY6@AGJvC5G3s11GuYF3Zt z3X6!a^ME}{Pft&i)_IVe44hU7tKO08S|O?G9?Pe@0_h`r$T;1Kj z4Oq!7vKpLW^wS!F#igYeE?kgKqXE)7bm-9N;>Lpqhf@D_a&n4T7eUjbrJ@qL zIQsg##utWhpw(0=wmU~G?5Q)7f@9yodpo8kHa5JDFNLg*|5Q<_zxV&J9K~s0VKRi)Cefl&GheIF`ZoLYI zeRi(V(b2%WR##WIv>2T|dsbdvURzsRRn;EmVaVCvwx<>v8ag#K1$;7tWMv H-uM3t7WCjA literal 0 HcmV?d00001 diff --git a/graph/layout/testdata/sheet_isomap_golden.png b/graph/layout/testdata/sheet_isomap_golden.png new file mode 100644 index 0000000000000000000000000000000000000000..467a7b5e48d1908258be9863492c97c363e93399 GIT binary patch literal 23078 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 literal 0 HcmV?d00001 diff --git a/graph/layout/testdata/square_isomap_golden.png b/graph/layout/testdata/square_isomap_golden.png new file mode 100644 index 0000000000000000000000000000000000000000..130f3821f6f8dde369310c3fed873a15fc3b8a20 GIT binary patch literal 9639 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 GLjMmKT&v#z literal 0 HcmV?d00001 diff --git a/graph/layout/testdata/tetrahedron_isomap_golden.png b/graph/layout/testdata/tetrahedron_isomap_golden.png new file mode 100644 index 0000000000000000000000000000000000000000..cbbdda58fff56cf69dcd59c4c3fdf027b95ad3b0 GIT binary patch literal 20173 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 literal 0 HcmV?d00001 diff --git a/graph/layout/testdata/wp_page_isomap_golden.png b/graph/layout/testdata/wp_page_isomap_golden.png new file mode 100644 index 0000000000000000000000000000000000000000..7846140f96ef8f5b3a5967ead5850a16bdc660e1 GIT binary patch literal 17517 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 literal 0 HcmV?d00001