PD-ADMM: parallel dual alternating direction method of multipliers

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.

Source code

Compile and run

  • 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.

Example output

[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

« Back