11

I was wondering if it was possible to ask Mathematica to draw a graph provided some set of vertices: $(v_1, ..., v_N) \in V$ connected by $M$ edges $(e_1, ..., e_M) \in E$, where the length of each edge, $(l_1, ..., l_M) \in L$, is explicitly specified? Obviously I don't expect Mathematica to have a built-in semidefinite convex optimization package to find approximate solutions to the graph realization problem. Rather, I'm wondering if its possible to utilize the "ball and spring" approach Mathematica already uses for displaying arbitrary fixed edge length graphs?

Update (in response to comments) - There's a lot of theory in the literature on solving this "Graph Realization Problem" for graphs with various topologies, some of the most recent focusing on semidefinite convex optimization methods. However, I'm trying to focus my question on specifically getting Mathematica to try a ball and spring minimization process to "realize" a graph provided a specified topology and set of edge lengths. Certainly if anyone knows of an SDP solver for graph realization implemented in Mathematica, I'd love to hear about it. However, I somehow doubt such an implementation exists.

Roger Harris
  • 1,497
  • 1
  • 12
  • 20
  • This problem is closely related to a statistical technique called multidimensional scaling. – Szabolcs Jan 22 '13 at 01:45
  • There's a pointer to a reference on the topic here: http://erikdemaine.org/papers/PlanarEmbedding_JGAA/paper.pdf – Szabolcs Jan 22 '13 at 02:02
  • For a basic approach, is it out of the question to do a sum-of-squares minimization? I guess what I am asking is really about the anticipated sizes of the inputs. – Daniel Lichtblau Jan 22 '13 at 03:13
  • @DanielLichtblau Let's say tens of vertices, maybe 10x the number of edges as vertices. My guess is that sum-of-squares would choke? – Roger Harris Jan 22 '13 at 04:54
  • The special property of the graphs I'm considering is that they are mostly complete, i.e. every pair of distinct vertices share an edge. However, the edge lengths themselves are only known within something like a 10% to 20% error. This makes me pessimistic about a sum-of-squares minimization approach... – Roger Harris Jan 22 '13 at 05:00
  • Might be able to formulate with "penalties" that involve sums of squares but don't ramp up until you cross that 20% error threshold. You won't be able to use Levenberg-Marquardt because the objective will no longer be a SoS, but you might still get a good result. Especially if a graph can actually be realized with the (approximate) edge lengths provided. – Daniel Lichtblau Jan 22 '13 at 15:45

1 Answers1

16

In the recent version of Mathematica (version 9), an "approximate" solution to the graph realization problem can be obtained by tuning the repulsive/attractive force in the SpringElectricalEmbedding via EdgeWeight:

elength = {2, 4, 2, 4, 3, 4};
g = CompleteGraph[4, EdgeWeight -> elength, 
  EdgeLabels -> "EdgeWeight", 
  GraphLayout -> {"VertexLayout" -> {"SpringElectricalEmbedding", 
    "EdgeWeighted" -> True}}]

enter image description here

Compare the resulting edge lengths with the given distances:

coords = GraphEmbedding[g];
edges = Table[coords[[List @@ e]], {e, EdgeList[IndexGraph[g]]}];

dist = EuclideanDistance @@@ edges
(* {0.574522, 1.3316, 0.576753, 1.14065, 0.980596, 1.14082} *)

dist/elength
(* {0.287261, 0.3329, 0.288377, 0.285163, 0.326865, 0.285204} *)

MeanDeviation[%]
(* 0.0192805 *)
halmir
  • 15,082
  • 37
  • 53