To see a broader comparison of Gurobi vs. open-source solvers, please visit our open-source solvers page. To see some more information on switching to Gurobi from other commercial solvers, please visit our switching to Gurobi page.
- Overview
- CBC
- CPLEX
- GLPK
- LP_Solve
- SCIP
Exporting MPS files from open-source and commercial solvers
Exporting MPS files is easier than you may think. We are also happy to assist you both in exporting your models and, if you wish, both benchmarking your models using Gurobi and recommending specific parameter settings for Gurobi that will give you the best performance. Click on any of the above tabs to see solver-specific instructions for exporting MPS files. Once you have exported your model, simply email us at help@gurobi.com and we will enable your account for uploads so you can conveniently and confidentially send it to us for benchmarking. If you have any questions, please also feel free to contact us at help@gurobi.com.
Please note that the MPS format has not been standardized, and each solver may have its own set of conventions and extensions. If you encounter read errors or notice a discrepancy in the solution found by Gurobi, please contact us at
help@gurobi.com, and we will be happy to help you figure out how to modify the file so it conforms to the official
Gurobi MPS format specification.
Please refer to the following common issues we encounter and their corresponding workarounds.
CBC
Command Line, C / C++ and Python
Exporting MPS files using the CBC Command Line API
Overview: |
If you are using COIN from the command line you could use the export parameter to export your model to an MPS file. |
Instructions: |
To enter the command line mode, use:
#> ∼/Cbc-2.8.12/build/bin/cbc –
You should get the prompt “Coin:”. After building the model interactively, issuing the following command:
export model.mps
will export the model to an MPS file. |
Exporting MPS files using the CBC C / C++ API
Instructions: |
Insert
solver.writeMps(“model”,”mps”,0.0);
after you have built your model and right before the call of the optimization routine. Note: Change the third argument 0.0 to -1.0 if you want to maximize, to 1.0 if you want to minimize or 0.0 if the solver should decide. |
Example: |
OsiClpSolverInterface solver; CbcModel model(solver); // the model is built here solver.writeMps(“model”,”mps”,0.0); model.branchAndBound();
Note: While you modify your model with methods from the class CbcModel, the writeMps method is a function of the OsiClpSolverInterface class. After saving the file, compiling your code and executing it, the MPS file with the chosen name will be located in your current directory. It is automatically compressed and is now named i.e. “model.mps.gz”. |
Exporting MPS files using the CBC Python API (CyLP Binding)
Instructions: |
Insert
s.writeMps(“model.mps”,0,2,0)
after you have built your model and right before the call of the optimization routine. |
Example: |
s = CyClpSimplex() // the model is built here s.writeMps(“model.mps”,0,2,1.0) s.primal()
Note: Choose 1.0 for minimization or -1.0 for maximization as fourth argument. After saving the file and calling the python interpreter, the MPS file with the chosen name will be located in your current directory. |
CPLEX
Command Line, C / C++, Python, Java and MATLAB
Exporting MPS/REW files using the CPLEX Command Line API
Instructions: |
After you have build your model write:
write model.mps
Note: If your MPS file is too large to be sent easily, CPLEX can compress it directly if you append .gz after the filename, i.e. “model.mps.gz”. If you want to anonymize the variable and constraint names append the file ending .rew instead of .mps. |
Exporting MPS/REW files using the CPLEX C API
Instructions: |
Insert
status = CPXwriteprob(env, lp, “model.mps”, NULL);
after you have built your model and right before the call of the optimization routine. |
Example: |
lp = CPXcreateprob(env, &status, probname); // the model is built here status = CPXwriteprob(env, lp, “model.mps”, NULL); status = CPXmipopt(env, lp);
Note: If your MPS file is too large to be sent easily, CPLEX can compress it directly if you append .gz after the filename, i.e. “model.mps.gz”. If you want to anonymize the variable and constraint names append the file ending .rew instead of .mps. After saving the file, compiling your code and executing it, the MPS file with the chosen name will be located in your current directory. |
Exporting MPS/REW files using the CPLEX C++ API
Instructions: |
Insert
cplex.exportModel(“model.mps”);
after you have built your model and right before the call of the optimization routine. |
Example: |
IloCplex cplex(env); // the model is built here cplex.exportModel(“model.mps”); IloCplex cplex(env);
Note: If your MPS file is too large to be sent easily, CPLEX can compress it directly if you append .gz after the filename, i.e. “model.mps.gz”. If you want to anonymize the variable and constraint names append the file ending .rew instead of .mps. After saving the file, compiling your code and executing it, the MPS file with the chosen name will be located in your current directory. |
Exporting MPS/REW files using the CPLEX Python API
Instructions: |
Insert
cpx.write(“model.mps”)
after you have built your model and right before the call of the optimization routine. |
Example: |
import cplex cpx = cplex.Cplex() // the model is built here cpx.write(“model.mps”); cpx.solve()
Note: If your MPS file is too large to be sent easily, CPLEX can compress it directly if you append .gz after the filename, i.e. “model.mps.gz”. If you want to anonymize the variable and constraint names append the file ending .rew instead of .mps. After saving the file and calling the python interpreter, the MPS file with the chosen name will be located in your current directory. |
Exporting MPS/REW files using the CPLEX JAVA API
Instructions: |
Insert
cplex.exportModel(“model.mps”);
after you have built your model and right before the call of the optimization routine. |
Example: |
IloCplex cplex = new IloCplex(); // the model is built here cplex.exportModel(“model.mps”); cplex.solve()
Note: If your MPS file is too large to be sent easily, CPLEX can compress it directly if you append .gz after the filename, i.e. “model.mps.gz”. If you want to anonymize the variable and constraint names append the file ending .rew instead of .mps. After saving the file, compiling your code and executing it, the MPS file with the chosen name will be located in your current directory. |
Exporting MPS/REW files using the CPLEX MATLAB API
Instructions: |
Insert
cplex.writeModel(‘model.mps’);
after you have built your model and right before the call of the optimization routine. |
Example: |
cplex = Cplex(); // the model is built here cplex.writeModel(‘model.mps’); cplex.solve();
Note: If your MPS file is too large to be sent easily, CPLEX can compress it directly if you append .gz after the filename, i.e. “model.mps.gz”. If you want to anonymize the variable and constraint names append the file ending .rew instead of .mps. After saving the file and calling the Matlab interpreter, the MPS file with the chosen name will be located in your current directory. |
LP_Solve
Command Line, C / C++, Python, Java and MATLAB Note on lp_solve: In MPS files, lp_solve may write binary variables as unbounded general integers. Thus, before writing an MPS file from lp_solve, explicitly set an upper bound of 1 for all binary variables.
Exporting MPS files using the LP_Solve Command Line API
Instructions: |
If you are using lp_solve through the command line you could either send us directly your lp-file or in case you use a program to output your model and pipe it into lp_solve you could use the –wmps parameter of lp_solve:
generate_model_program | lpsolve -wmps model.mps
|
Exporting MPS files using the LP_Solve C / C++ API
Instructions: |
Insert
write_mps(lp, “model.mps”);
after you have built your model and right before the call of the optimization routine. |
Example: |
set_obj_fn(lp, row) write_mps(lp, “model.mps”); solve(lp);
After saving the file, compiling your code and executing it, the MPS file with the chosen name will be located in your current directory. |
Exporting MPS files using the LP_Solve Python API
Instructions: |
Insert
lpsolve(‘write_mps’, lp, ‘model.mps’)
after you have built your model and right before the call of the optimization routine. |
Example: |
lpsolve(‘add_constraint’, lp, [12.68, 0, 0.08, 0.9], GE, 4) lpsolve(‘write_mps’, lp, ‘model.mps’) lpsolve(‘solve’, lp)
After saving the file and calling the python interpreter, the MPS file with the chosen name will be located in your current directory. |
Exporting MPS files using the LP_Solve JAVA API
Instructions: |
Insert
problem.writeMps(“model.mps”);
after you have built your model and right before the call of the optimization routine. |
Example: |
problem.strAddConstraint(“1 2 1 4”, LpSolve.EQ, 8); problem.writeMps(“model.mps”); problem.solve();
After saving the file, compiling your code and executing it, the MPS file with the chosen name will be located in your current directory. |
Exporting MPS files using the LP_Solve MATLB API
Instructions: |
Insert
mxlpsolve(‘write_mps’, lp, ‘model.mps’);
after you have built your model and right before the call of the optimization routine. |
Example: |
mxlpsolve(‘add_constraint’, lp, [12.68, 0, 0.08, 0.9], 2, 4); mxlpsolve(‘write_mps’, lp, ‘model.mps’); mxlpsolve(‘solve’, lp)
After saving the file and calling the Matlab interpreter, the MPS file with the chosen name will be located in your current directory. |
GLPK
Command Line and C / C++
Exporting MPS files using the GLPK Command Line API
Overview: |
Creating MPS file from a GNU MathProg file (*.mod file) with the command line tool of GLPK (glpsol) |
Instructions: |
Open the command line and change to the directory, where the *.mod file is located. Execute the following command (you need to replace problem.mod with the name of your file)
glpsol –model “problem.mod” –wmps “model.mps”
Replacing “model.mps” with “model.mps.gz” will again result in a compressed file. After the execution of the command the (compressed) MPS file with the chosen name is located in your current directory. |
Exporting MPS files using the GLPK C / C++ API
Instructions: |
Insert
glp_write_mps(lp, GLP_MPS_DECK, NULL, “model.mps”);
after you have built your model and right before the call of the optimization routine. |
Example: |
glp_load_matrix(lp, 9, ia, ja, ar); glp_write_mps(lp, GLP_MPS_DECK, NULL, “model.mps”); glp_simplex(lp, NULL);
Note: If your MPS file is too large to be sent easily, glpk can compress it directly if you append .gz after the filename, i.e. “model.mps.gz”. After saving the file, compiling your code and executing it, the (compressed) MPS file with the chosen name will be located in your current directory. |
SCIP
Command Line and C
Exporting MPS files using the SCIP Command Line API
Instructions: |
After you have built your model write:
write problem model.mps
To anonymize a model, use the following code instead:
write genproblem model.mps
|
Exporting MPS files using the SCIP C API
Instructions: |
Insert:
SCIPwriteOrigProblem(scip, “model.mps”, NULL, 0);
after you have built your model and right before the call of the optimization routine. If you want to anonymize the variable and constraint names, pass a “1” as last parameter to SCIPwriteOrigProblem() instead. |