This is a C/MPI implementation of parallel dual ADMM for LASSO, as described in our paper. This is a straghtforward implementation, and its performance is not optimized.
Makefile is included in the zip file. You may need to edit Makefile to ensure that the variable GSLROOT is set correctly. To compile, type:
make
To run, type:
mpiexec -n 4 ./pdADMMLasso /Data/Gaussian/4
where the first “4” specifies the number of processes and the second “4” is thed subfold of the data that is partitioned into 4 blocks.
[0] reading /tmpData/Gaussian/4/A1.dat
[1] reading /tmpData/Gaussian/4/A2.dat
[2] reading /tmpData/Gaussian/4/A3.dat
[3] reading /tmpData/Gaussian/4/A4.dat
[0] reading /tmpData/Gaussian/4/xs1.dat
[1] reading /tmpData/Gaussian/4/xs2.dat
[2] reading /tmpData/Gaussian/4/xs3.dat
[3] reading /tmpData/Gaussian/4/xs4.dat
# relative error obj time per iteration
0 3.997781e+00 0.0000 0.0061
10 4.023784e+00 21.8682 0.0005
20 3.285749e+00 34.6092 0.0006
30 1.936631e+00 38.5678 0.0005
40 1.553579e+00 43.0700 0.0005
50 1.467939e+00 44.7644 0.0005
60 9.648671e-01 46.4064 0.0019
70 7.692594e-01 47.3950 0.0005
80 6.204961e-01 48.1141 0.0010
90 4.086103e-01 49.0352 0.0005
100 4.109950e-01 49.2753 0.0044
110 2.472655e-01 49.7335 0.0006
120 2.093176e-01 50.1388 0.0005
130 1.744880e-01 50.3059 0.0005
140 1.280639e-01 50.5043 0.0005
150 1.022511e-01 50.7243 0.0005
160 8.279362e-02 50.7940 0.0005
170 6.161102e-02 50.9054 0.0005
180 4.345790e-02 51.0060 0.0005
190 4.731435e-02 51.0395 0.0005
200 2.246592e-02 51.1023 0.0005
210 2.615915e-02 51.1438 0.0005