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.

  • $\begingroup$ This problem is closely related to a statistical technique called multidimensional scaling. $\endgroup$
    – Szabolcs
    Jan 22, 2013 at 1:45
  • $\begingroup$ There's a pointer to a reference on the topic here: erikdemaine.org/papers/PlanarEmbedding_JGAA/paper.pdf $\endgroup$
    – Szabolcs
    Jan 22, 2013 at 2:02
  • $\begingroup$ 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. $\endgroup$ Jan 22, 2013 at 3:13
  • $\begingroup$ @DanielLichtblau Let's say tens of vertices, maybe 10x the number of edges as vertices. My guess is that sum-of-squares would choke? $\endgroup$ Jan 22, 2013 at 4:54
  • $\begingroup$ 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... $\endgroup$ Jan 22, 2013 at 5:00

1 Answer 1


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} *)

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

(* 0.0192805 *)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.