コード例 #1
0
ファイル: match.c プロジェクト: chexenia/whisk
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;
}
コード例 #3
0
ファイル: assignmentoptimal2.cpp プロジェクト: HanaLeeHn/fgm
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);	
}