35void mexFunction(
int nlhs, mxArray *plhs[],
int nrhs,
const mxArray *prhs[] ) {
57 mexPrintf(
"BEGIN PROCESSING DATA\n");
59 mexErrMsgTxt(
"Fifteen input arguments are required.");
65 matlabModel->
numVar = (int) mxGetScalar( prhs[ 0]) ;
67 matlabModel->
numCon = (int) mxGetScalar( prhs[ 1]);
71 if (!(mxIsDouble(prhs[2 ]))){
72 mexErrMsgTxt(
"Constraint matrix A must be of type double.");
75 if ( (mxGetN(prhs[ 2]) != matlabModel->
numVar) || (mxGetM(prhs[2]) != matlabModel->
numCon) ){
76 mexErrMsgTxt(
" Constraint matrix A must have number of rows equal to number of constraints and columns equal number of variables \n");
83 if( !mxIsEmpty( prhs[ 3]) ){
84 if (mxGetN(prhs[3]) != matlabModel->
numCon ){
85 mexErrMsgTxt(
" Vector BL size must equal the number of rows\n");
87 matlabModel->
bl = mxGetPr( prhs[ 3]);
89 for(i = 0; i < matlabModel->
numCon; i++){
90 if( mxIsInf( -(matlabModel->
bl[i]) ) ) matlabModel->
bl[ i] = -
OSDBL_MAX;
95 if( !mxIsEmpty( prhs[ 4]) ){
96 if (mxGetN(prhs[4]) != matlabModel->
numCon ){
97 mexErrMsgTxt(
" Vector BU size must equal the number of rows\n");
99 matlabModel->
bu = mxGetPr( prhs[ 4]);
101 for(i = 0; i < matlabModel->
numCon; i++){
102 if( mxIsInf( matlabModel->
bu[i]) ) matlabModel->
bu[ i] =
OSDBL_MAX;
107 if (mxGetN(prhs[5]) != matlabModel->
numVar ){
108 mexErrMsgTxt(
" Vector OBJ size must equal the number of variables\n");
110 matlabModel->
obj = mxGetPr( prhs[ 5]);
113 if( !mxIsEmpty( prhs[ 6]) ){
114 if (mxGetN(prhs[6]) != matlabModel->
numVar ){
115 mexErrMsgTxt(
" Vector VL size must equal the number of variables\n");
117 matlabModel->
vl = mxGetPr( prhs[ 6]);
119 for(i = 0; i < matlabModel->
numVar; i++){
121 if( mxIsInf( -(matlabModel->
vl[i]) ) ) matlabModel->
vl[ i] = -
OSDBL_MAX;
126 if( !mxIsEmpty( prhs[ 7]) ){
127 if (mxGetN(prhs[7]) != matlabModel->
numVar ){
128 mexErrMsgTxt(
" Vector VU size must equal the number of variables\n");
130 matlabModel->
vu = mxGetPr( prhs[ 7]);
132 for(i = 0; i < matlabModel->
numVar; i++){
134 if( mxIsInf( matlabModel->
vu[i]) ) matlabModel->
vu[ i] =
OSDBL_MAX;
139 if ( (mxGetScalar( prhs[ 8]) != 0) && (mxGetScalar( prhs[ 8]) != 1)){
140 mexErrMsgTxt(
" The objective type must be either 1 (max) or 0 (min)\n");
142 mxGetScalar( prhs[ 8]) > 0 ? matlabModel->
objType = 1 : matlabModel->
objType = 0;
146 if(!mxIsChar( prhs[ 9])){
147 mexErrMsgTxt(
" Vector VarType must be a character array\n");
149 if (mxGetN(prhs[ 9]) != matlabModel->
numVar ){
150 mexErrMsgTxt(
" Vector VarType size must equal the number of variables\n");
152 buf = mxArrayToString( prhs[ 9]);
160 if( !mxIsEmpty( prhs[ 10]) ){
161 if( mxGetM( prhs[ 10]) != 4) mexErrMsgTxt(
" Vector Q Must have 4 rows\n");
162 int numQTerms = mxGetN( prhs[ 10]);
165 matlabModel->
qRows =
new int[ numQTerms];
166 matlabModel->
qIndex1 =
new int[ numQTerms];
167 matlabModel->
qIndex2 =
new int[ numQTerms];
168 matlabModel->
qVal =
new double[ numQTerms];
169 pr= mxGetPr( prhs[ 10]);
170 for(i = 0; i < numQTerms; i++){
171 for(j = 0; j <= 3; j++){
175 matlabModel->
qRows[ i] = (int) pr[ k];
178 matlabModel->
qIndex1[ i] = (int) pr[ k];
181 matlabModel->
qIndex2[ i] = (int) pr[ k];
184 matlabModel->
qVal[ i] = pr[ k];
191 if( !mxIsEmpty( prhs[ 11]) ){
192 matlabModel->
instanceName = mxArrayToString( prhs[ 11]);
195 buf = mxArrayToString( prhs[ 12]);
200 matlabModel->
sSolverName = mxArrayToString( prhs[ 13]);
201 printf(
"WE ARE USING SOLVER %s\n", &matlabModel->
sSolverName[0]);
205 printf(
"WE ARE USING AGENT %s\n", &matlabModel->
sAgentAddress[0]);
208 mexPrintf(
"CREATE THE INSTANCE \n");
211 mexPrintf(
"CALL THE REMOTE SERVER \n");
212 sTest = matlabModel->
solve();
213 std::string osil = matlabModel->
osil;
215 printf(
"HERE IS THE INSTANCE %s\n", ch);
216 mexPrintf(
"DONE WITH THE REMOTE CALL \n");
217 mexPrintf(
"HERE IS THE SOLUTION \n");
218 mexPrintf(&sTest[0] );
225 str[ 0] = &sTest[0] ;
226 plhs[0]= mxCreateCharMatrixFromStrings( 1, (
const char **)str);