SHARED_EXPORT Assignment match( double* distMatrixIn, int nOfRows, int nOfColumns ) { Assignment result; result.n = nOfRows; result.assignment = (double*) malloc( sizeof(double)*nOfRows ); assignmentoptimal( result.assignment, &result.cost, distMatrixIn, nOfRows, nOfColumns ); return result; }
// -------------------------------------------------------------------------- // Function Name : Solve // Auther : chen chen // Data : 2016-02-15 // -------------------------------------------------------------------------- double AssignmentProblemSolver::Solve(vector<vector<double> >& DistMatrix, vector<int>& Assignment, TMethod Method) { int N = DistMatrix.size(); // number of columns (tracks) int M=DistMatrix[0].size(); // number of rows (measurements) int *assignment = new int[N]; double *distIn = new double[N*M]; double cost; // Fill matrix with random numbers for(int i = 0; i < N; i++) { for(int j = 0; j < M; j++) { distIn[i+N*j] = DistMatrix[i][j]; } } switch(Method) { case optimal: assignmentoptimal(assignment, &cost, distIn, N, M); break; case many_forbidden_assignments: assignmentoptimal(assignment, &cost, distIn, N, M); break; case without_forbidden_assignments: assignmentoptimal(assignment, &cost, distIn, N, M); break; } // form result Assignment.clear(); for(int x = 0; x < N; x++) { Assignment.push_back(assignment[x]); } delete[] assignment; delete[] distIn; return cost; }
void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ) { double *assignment, *cost, *distMatrix; int nOfRows, nOfColumns; /* Input arguments */ nOfRows = mxGetM(prhs[0]); nOfColumns = mxGetN(prhs[0]); distMatrix = mxGetPr(prhs[0]); /* Output arguments */ plhs[0] = mxCreateDoubleMatrix(nOfRows, 1, mxREAL); plhs[1] = mxCreateDoubleScalar(0); assignment = mxGetPr(plhs[0]); cost = mxGetPr(plhs[1]); /* Call C-function */ assignmentoptimal(assignment, cost, distMatrix, nOfRows, nOfColumns); }