FICO Xpress Optimization Examples Repository
 FICO Optimization Community FICO Xpress Optimization Home

Switching to solving with Xpress Optimizer

Description
Passing from Mosel to solving with Xpress Solver (requires burglar4.mos, burglar.dat)

Source Files
By clicking on a file name, a preview is opened at the bottom of this page.

Data Files

ugxprs2.c

/*******************************************************
Mosel User Guide Example Problems
=================================

file ugxprs2.c

Passing from Mosel to solving with Xpress Optimizer.
Executing a model file.

(c) 2008 Fair Isaac Corporation
author: S. Heipcke, 2002, rev. Nov. 2010
********************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "xprm_mc.h"
#include "xprs.h"

#ifdef _WIN64
#else
#endif

int main()
{
XPRMmodel mod;
XPRMdsolib dso;
XPRMalltypes rvalue;
XPRSprob prob;
int result, ncol, len, i;
double *sol, val;
char *names, *onecol;

if(XPRMinit())                         /* Initialize Mosel */
return 1;

if(XPRMexecmod(NULL,"burglar4.mos",NULL,&result,&mod))
return 2;                             /* Execute a model file */

/* Retrieve the pointer to the problem loaded in the Xpress Optimizer */
if((dso=XPRMfinddso("mmxprs"))==NULL)
return 4;
if(XPRMgetdsoparam(mod, dso, "xprs_problem", &result, &rvalue))
return 5;

XPRSchgobjsense(prob, XPRS_OBJ_MAXIMIZE);  /* Set sense to maximization */
if(XPRSmipoptimize(prob, ""))              /* Solve the problem */
return 6;

if(XPRSgetintattrib(prob, XPRS_MIPSTATUS, &result))
return 7;                             /* Test whether a solution is found */

if((result==XPRS_MIP_SOLUTION) || (result==XPRS_MIP_OPTIMAL))
{
if(XPRSgetdblattrib(prob, XPRS_MIPOBJVAL, &val))
return 8;
printf("Objective value: %g\n", val); /* Print the objective function value */
if(XPRSgetintattrib(prob, XPRS_ORIGINALCOLS, &ncol))
return 9;
if((sol = (double *)malloc(ncol * sizeof(double)))==NULL)
return 10;
if(XPRSgetmipsol(prob, sol, NULL))
return 11;                           /* Get the primal solution values */
if(XPRSgetnamelist(prob, 2, NULL, 0, &len, 0, ncol-1))
return 11;                           /* Get the name array length */
if((names = (char *)malloc(len*sizeof(char)))==NULL)
return 12;
if(XPRSgetnamelist(prob, 2, names, len, NULL, 0, ncol-1))
return 13;                           /* Get the variable names */
onecol = names;
for(i=0; i<ncol; i++) {               /* Print out the solution */
printf("%s: %g\n", onecol, sol[i]);
onecol = onecol+strlen(onecol)+1;
}
free(names);
free(sol);
}

return 0;
}