Figure 8.15: Linear placement problem
linewidth = 1;
markersize = 5;
fixed = [ 1 1 -1 -1 1 -1 -0.2 0.1;
1 -1 -1 1 -0.5 -0.2 -1 1]';
M = size(fixed,1);
N = 6;
A = [ 1 0 0 -1 0 0 0 0 0 0 0 0 0 0
1 0 -1 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 -1 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 -1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 -1 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 -1 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0 0 -1
0 1 -1 0 0 0 0 0 0 0 0 0 0 0
0 1 0 -1 0 0 0 0 0 0 0 0 0 0
0 1 0 0 0 -1 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 -1 0 0 0 0 0 0
0 1 0 0 0 0 0 0 -1 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0 0 0 -1 0
0 0 1 -1 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 -1 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 -1 0 0 0
0 0 0 1 -1 0 0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0 -1 0 0 0 0 0
0 0 0 1 0 0 0 0 0 -1 0 0 0 0
0 0 0 1 0 0 0 0 0 0 0 -1 0 0
0 0 0 1 0 -1 0 0 0 0 0 -1 0 0
0 0 0 0 1 -1 0 0 0 0 0 0 0 0
0 0 0 0 1 0 -1 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 -1 0 0 0 0
0 0 0 0 1 0 0 0 0 0 0 0 0 -1
0 0 0 0 0 1 0 0 -1 0 0 0 0 0
0 0 0 0 0 1 0 0 0 0 -1 0 0 0 ];
nolinks = size(A,1);
fprintf(1,'Computing the optimal locations of the 6 free points...');
cvx_begin
variable x(N+M,2)
minimize ( sum(norms( A*x,2,2 )))
x(N+[1:M],:) == fixed;
cvx_end
fprintf(1,'Done! \n');
free_sum = x(1:N,:);
figure(1);
dots = plot(free_sum(:,1), free_sum(:,2), 'or', fixed(:,1), fixed(:,2), 'bs');
set(dots(1),'MarkerFaceColor','red');
hold on
legend('Free points','Fixed points','Location','Best');
for i=1:nolinks
ind = find(A(i,:));
line2 = plot(x(ind,1), x(ind,2), ':k');
hold on
set(line2,'LineWidth',linewidth);
end
axis([-1.1 1.1 -1.1 1.1]) ;
axis equal;
title('Linear placement problem');
figure(2)
all = [free_sum; fixed];
bins = 0.05:0.1:1.95;
lengths = sqrt(sum((A*all).^2')');
[N2,hist2] = hist(lengths,bins);
bar(hist2,N2);
hold on;
xx = linspace(0,2,1000); yy = 2*xx;
plot(xx,yy,'--');
axis([0 2 0 4.5]);
hold on
plot([0 2], [0 0 ], 'k-');
title('Distribution of the 27 link lengths');
Computing the optimal locations of the 6 free points...
Calling SDPT3: 81 variables, 39 equality constraints
For improved efficiency, SDPT3 is solving the dual problem.
------------------------------------------------------------
num. of constraints = 39
dim. of socp var = 81, num. of socp blk = 27
*******************************************************************
SDPT3: Infeasible path-following algorithms
*******************************************************************
version predcorr gam expon scale_data
NT 1 0.000 1 0
it pstep dstep pinfeas dinfeas gap mean(obj) cputime
-------------------------------------------------------------------
0|0.000|0.000|6.1e-01|5.3e+00|3.0e+02| 0.000000e+00| 0:0:00| chol 1 1
1|1.000|1.000|1.6e-07|8.2e-02|2.8e+01|-1.918618e+01| 0:0:00| chol 1 1
2|0.888|0.836|7.3e-08|2.0e-02|4.6e+00|-2.157862e+01| 0:0:00| chol 1 1
3|0.873|0.916|1.3e-07|2.4e-03|5.6e-01|-2.182751e+01| 0:0:00| chol 1 1
4|0.843|0.941|2.9e-07|2.2e-04|1.2e-01|-2.188497e+01| 0:0:00| chol 1 1
5|0.957|0.979|2.3e-08|1.3e-05|1.3e-02|-2.190680e+01| 0:0:00| chol 1 1
6|0.899|1.000|8.7e-09|8.2e-07|1.3e-03|-2.190787e+01| 0:0:00| chol 1 1
7|0.909|0.949|2.6e-09|4.3e-08|1.1e-04|-2.190823e+01| 0:0:00| chol 1 1
8|0.950|1.000|4.4e-10|5.3e-10|7.2e-06|-2.190826e+01| 0:0:00| chol 2 2
9|0.922|1.000|9.7e-11|8.9e-11|8.2e-07|-2.190826e+01| 0:0:00| chol 2 2
10|0.962|1.000|3.7e-12|1.9e-11|5.9e-08|-2.190826e+01| 0:0:00|
stop: max(relative gap, infeasibilities) < 1.49e-08
-------------------------------------------------------------------
number of iterations = 10
primal objective value = -2.19082637e+01
dual objective value = -2.19082638e+01
gap := trace(XZ) = 5.93e-08
relative gap = 1.32e-09
actual relative gap = 1.31e-09
rel. primal infeas = 3.68e-12
rel. dual infeas = 1.94e-11
norm(X), norm(y), norm(Z) = 7.3e+00, 5.0e+00, 6.9e+00
norm(A), norm(b), norm(C) = 1.1e+01, 6.2e+00, 6.4e+00
Total CPU time (secs) = 0.1
CPU time per iteration = 0.0
termination code = 0
DIMACS: 1.1e-11 0.0e+00 6.2e-11 0.0e+00 1.3e-09 1.3e-09
-------------------------------------------------------------------
------------------------------------------------------------
Status: Solved
Optimal value (cvx_optval): +21.9083
Done!