The Multidimensional Scaling (MDS) is known as a non-linear optimization problem so that it is easy to be trapped in local optima if EM-like hill-climbing approach is used to solve it. In order to avoid the local optima, we have applied the Deterministic Annealing (DA) method to the MDS problem.

For the details of the proposed parallel DA-MDS algorithm (we call DA-SMACOF), please refer to our eScience 2010 paper.


Source code is available from here.

Building and Dependency

DA-SMACOF implementation is developed under .NET framework 3.5 and you can recompile or build through MS Visual Studio 2008 or higher version. Also, you need to configure MPI.NET appropriately to use DA-MDS.

User Guide

You can run the DA-SMACOF application by using command as follows:

[USAGE]: >mpiexec -n [pNum] MPI_DA_SMACOF_bMat.exe [distMatFile] [mappedFile(\"NoMappedFile\")] [labelFile(\"NoLabelFile\")] [outputFile] [threshold] [finalThresh] [targetDim] [#Points=N] [nRow] [nCol] [blockSize] [alpha] [TminMul] [reduce-flag] [random-flag] [print-flag] [cooling-flag] [coolingStep]

The following is the parameter list which should be included to run DA-SMACOF:

   args[0]: distMatrixFile - original distance matrix data.
   args[1]: mappedFile - initial mapping file (or 'NoMappedFile').
   args[2]: labelFile - label file (or 'NoLabelFile').
   args[3]: outputFile - output file name.
   args[4]: threshold - threshold value for the stop condition.
   args[5]: finalThresh - threshold value for SMACOF running with T == 0.
   args[6]: targetDim - target dimension.
   args[7]: N - the total number of points.
   args[8]: nRow - The number of block-rows.
   args[9]: nCol - The number of block-columns.
   args[10]: blockSize - the block size of block matrix multiplication.
   args[11]: alpha - temperature decrease ratio. between 0 and 1.
   args[12]: TminMul - The constant for deciding the Tmin w.r.t. the Tmax.
   args[13]: reduce-flag - 1: reduced original distance, 0: no change
   args[14]: random-flag - 1: random initialization, 0: fixed seed
   args[15]: print-flag - 1: print mapping for each T, 0: no print
   args[16]: coolingFlag - 1: linear, 0: exponential
   args[17]: coolingStep - the step number of the linear cooling scheme.