00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "ekk_c_api.h"
00021
00022
00023
00024
00025
00026
00027
00028 extern "C" int ekk_primalClp(EKKModel * model, int startup, int presolve);
00029
00030
00031
00032
00033
00034
00035 extern "C" int ekk_dualClp(EKKModel * model, int presolve);
00036
00037
00038
00039
00040
00041
00042
00043 extern "C" int ekk_preSolveClp(EKKModel * model, bool keepIntegers,
00044 int pass);
00045
00046 #include "ClpSimplex.hpp"
00047 #include <stdio.h>
00048 #include <stdarg.h>
00049
00050 int main (int argc, const char *argv[])
00051 {
00052 const char * name;
00053
00054
00055 bool primal=true,presolve=false;
00056 int useosl=0;
00057 bool freeFormat=false;
00058
00059 EKKModel * model;
00060 EKKContext * context;
00061
00062 if ( argc>1 ) {
00063 name=argv[1];
00064 } else {
00065 name="../../Mps/Sample/p0033.mps";
00066 }
00067
00068
00069 context=ekk_initializeContext();
00070 model=ekk_newModel(context,"");
00071
00072 int i;
00073 printf("*** Options ");
00074 for (i=2;i<argc;i++) {
00075 printf("%s ",argv[i]);
00076 }
00077 printf("\n");
00078
00079
00080
00081 for (i=2;i<argc;i++) {
00082 if (!strncmp(argv[i],"free",4)) {
00083 freeFormat=true;
00084 }
00085 }
00086
00087
00088
00089 if (!freeFormat) {
00090 ekk_importModel(model,name);
00091 } else {
00092 ekk_importModelFree(model,name);
00093 }
00094
00095
00096 for (i=2;i<argc;i++) {
00097 if (!strncmp(argv[i],"max",3)) {
00098 if (!strncmp(argv[i],"max2",4)) {
00099
00100 int i,n=ekk_getInumcols(model);
00101 double * objective=ekk_getObjective(model);
00102 for (i=0;i<n;i++) {
00103 objective[i]=-objective[i];
00104 }
00105 ekk_setObjective(model,objective);
00106 ekk_setMaximize(model);
00107 } else {
00108
00109 ekk_setMaximize(model);
00110 }
00111 }
00112 if (!strncmp(argv[i],"dual",4)) {
00113 primal=false;
00114 }
00115 if (!strncmp(argv[i],"presol",6)) {
00116 presolve=true;
00117 }
00118 if (!strncmp(argv[i],"osl",3)) {
00119 useosl=1;
00120 }
00121 if (!strncmp(argv[i],"both",4)) {
00122 useosl=2;
00123 }
00124 }
00125 if (useosl) {
00126
00127 if (presolve)
00128 ekk_preSolve(model,3,NULL);
00129 ekk_scale(model);
00130
00131 if (primal)
00132 ekk_primalSimplex(model,1);
00133 else
00134 ekk_dualSimplex(model);
00135 if (presolve) {
00136 ekk_postSolve(model,NULL);
00137 ekk_primalSimplex(model,3);
00138 }
00139 if (useosl==2)
00140 ekk_allSlackBasis(model);
00141 }
00142 if ((useosl&2)==0) {
00143
00144 if (presolve)
00145 ekk_preSolveClp(model,true,5);
00146
00147
00148 if (primal)
00149 ekk_primalClp(model,1,3);
00150 else
00151 ekk_dualClp(model,3);
00152 }
00153 return 0;
00154 }