param m;	# number of nodes (original plus steiner)
param m1;	# number of steiner nodes

param a{m1+1..m, 1..2};	# coords of original nodes

set NODES := {1..m};

set ARCS within NODES cross NODES;

var x {NODES, 1..2};

minimize dist: 
    sum {(i,j) in ARCS} sqrt( sum {k in 1..2} (x[i,k]-x[j,k])^2);

data;

param m := 18;
param m1 := 8;
param a: 1  2 :=
  9  2.309469 9.208211
 10  0.577367 6.480938
 11  0.808314 3.519062
 12  1.685912 1.231672
 13  4.110855 0.821114
 14  7.598152 0.615836
 15  8.568129 3.079179
 16  4.757506 3.753666
 17  3.926097 7.008798
 18  7.436490 7.683284
 ;

set ARCS := 
  9  7
 10  1
 11  2
 12  3
 13  4
 14  5
 15  5
 16  6
 17  8
 18  8
  5  6
  6  4
  4  3
  3  2
  2  1
  1  7
  7  8
 ;

fix {j in m1+1..m, k in 1..2} x[j,k] := a[j,k];
let {j in 1..m1, k in 1..2} x[j,k] := Uniform01();

solve;

display x;
