In [1] I looked at MIP models for the Minimum Spanning Tree problem. A related, but much more difficult problem is the Euclidean Steiner Tree Problem. Here we are allowed to add points to make the tree shorter. Here are two obvious examples [2]:
Here A, B, C, and D are the original or given points (also known as terminals), and S, S1, S2 are the additional Steiner points. There are a few things we know about these points:
- Steiner points have a degree (connections to other points) of 3.
- The angles of the links from a Steiner are equal (and thus 120 degrees).
- The maximum number of Steiner points is \(\color{darkblue}n-2\) (\(\color{darkblue}n\) is the number of given points).
- Steiner points are located inside the convex hull of the given points.
- A point in an optimal Minimum Spanning Tree has a degree of 1, 2 or 3.
- If we add \(\color{darkblue}n-2\) Steiner points, the total number of nodes becomes \(2n-2\) and the total number of edges is \(2n-3\). Furthermore, we have that the degree of each terminal is 1 (and the connection is to a Steiner point).
In [3,4] a non-convex MINLP model is proposed. We order the \(\color{darkblue}n\) given points and \(\color{darkblue}n-2\) Steiner points as follows: \[\begin{align}&\color{darkblue}P = \{1,\dots,\color{darkblue}n\}\\ & \color{darkblue}S=\{\color{darkblue}n+1,\dots,2\color{darkblue}n-2\}\end{align}\] and all points are \[\color{darkblue}I =\{1,\dots,2\color{darkblue}n-2\}\] Finally we have a set of edges \(\color{darkblue}E\). Only edges \((i,j)\) with \(i\lt j\) exist. Now introduce a continuous variable \(\color{darkred}x_{i,c} \in [\color{darkblue}L_c,\color{darkblue}U_c]\) where \(\color{darkblue}L_c\) is smallest \(x\) or \(y\) coordinate of the given points and \(\color{darkblue}U_c\) is the largest one. In addition we have \[\color{darkred}y_{i,j} = \begin{cases} 1 & \text{if edge $(i,j)$ is part of the tree} \\ 0 & \text{otherwise}\end{cases}\]With this we can write:
| Non-convex MINLP Model |
|---|
| \[\begin{align} \min & \sum_{(i,j)\in\color{darkblue}E} ||\color{darkred}x_i-\color{darkred}x_j|| \cdot \color{darkred}y_{i,j} && &&(1) \\& \color{darkred}x_{p,c} = \color{darkblue}x^0_{p,c} && \forall p,c && (2)\\& \color{darkred}x_{s,c} \in [\color{darkblue}L_c,\color{darkblue}U_c] && \forall s,c && (3) \\ & \sum_s \color{darkred}y_{p,s} = 1 &&\forall p&& (4)\\ & \sum_{(p,s)\in\color{darkblue}E}\color{darkred}x_{p,s} + \sum_{(s',s)\in\color{darkblue}E}\color{darkred}x_{s',s} + \sum_{(s,s')\in\color{darkblue}E}\color{darkred}x_{s,s'} = 3 && \forall s && (5)\\ & \sum_{(s',s)\in\color{darkblue}E}\color{darkred}y_{s',s}=1 && \forall s \ne 1 && (6) \\ & \color{darkred}y_{i,j} \in \{0,1\} \end{align}\] |
- The notation \(||x||\) indicates the 2-norm, i.e. \(||x||=\sqrt{\sum_k x_k}\). This is a non-linear objective. We may want to use the expression \(\sqrt{\sum_k x_k+\epsilon}\) to make sure we can evaluate the gradient.
- The \(\color{darkred}x\) variables for the given points are fixed.
- The \(\color{darkred}x\) variables for the Steiner points are inside a box formed by the smallest and largest given points (for each coordinate \(\{x,y\}\)).
- Each terminal or given point \(p\) is connected to exactly one Steiner point \(s\). This is related to each terminal having degree 1.
- This constraint says: the degree of each Steiner point is 3.
- The purpose of this constraint is to prevent cycles.
![]() |
| MINLP results |
Ideas for improvement
- Instead of a non-convex MINLP that requires a global solver, we can reformulate this as a convex Mixed-Integer Conic (MISOCP) model. That will allow us to use different solvers, potentially getting better performance.
- Reduce some symmetry. We can renumber the Steiner points: that will give the same solution. To prevent this symmetry we can order the Steiner points by say \(x\)-coordinate.
- Exploit that the given points can be handled linearly.
| Convex MISOCP Model |
|---|
| \[\begin{align} \min & \sum_{(i,j)\in\color{darkblue}E} \color{darkred}d_{i,j} \\ & \color{darkred}\delta_{i,j,c} = \color{darkred}x_{i,c}-\color{darkred}x_{j,c}&& \forall (i,j)\in \color{darkblue}E, \forall c \\ & \color{darkred}\Delta^2_{i,j} \ge \sum_c \color{darkred}\delta^2_{i,j,c} && \forall (i,j)\in \color{darkblue}E \\ & \color{darkred}d_{i,j} \ge \color{darkred}\Delta_{i,j} - \color{darkblue}M\cdot (1-\color{darkred}y_{i,j}) && \forall (i,j)\in \color{darkblue}E \\& \color{darkred}x_{p,c} = \color{darkblue}x^0_{p,c} && \forall p,c\\& \color{darkred}x_{s,c} \in [\color{darkblue}L_c,\color{darkblue}U_c] && \forall s,c \\ & \sum_s \color{darkred}y_{p,s} = 1 &&\forall p\\ & \sum_{(p,s)\in\color{darkblue}E}\color{darkred}x_{p,s} + \sum_{(s',s)\in\color{darkblue}E}\color{darkred}x_{s',s} + \sum_{(s,s')\in\color{darkblue}E}\color{darkred}x_{s,s'} = 3 && \forall s \\ & \sum_{(s',s)\in\color{darkblue}E}\color{darkred}y_{s',s}=1 && \forall s \ne 1 \\ & \color{darkred}y_{i,j} \in \{0,1\} \\ & \color{darkred}d_{i,j} \ge 0, \color{darkred} \Delta_{i,j} \ge 0\end{align}\] |
Conclusion
References
- Minimum spanning trees in Math Programming models, https://yetanothermathprogrammingconsultant.blogspot.com/2021/03/minimum-spanning-trees-in-math.html.
- Steiner tree problem, https://en.wikipedia.org/wiki/Steiner_tree_problem.
- Nelson Maculan, Philippe Michelon and Adilson E. Xavier, The Euclidean Steiner tree problem in \(R^n\): A mathematical programming formulation, Annals of Operations Research 96 (2000) 209–220
- Marcia Fampa, Jon Lee and Nelson Maculana, An overview of exact algorithms for the Euclidean Steiner tree problem in \(n\)-space, Intl. Trans. in Op. Res. 23 (2016) 861–874
- http://www.geosteiner.com/
Appendix: GAMS model
$ontext |



