Blob Blame History Raw
--- ./glpk_ml_wrapper/src/camlglpk.c.orig	2008-07-08 22:38:04.000000000 -0600
+++ ./glpk_ml_wrapper/src/camlglpk.c	2013-07-31 15:57:11.000000000 -0600
@@ -60,14 +60,14 @@ void to_std_out()
 value lp_create(value unit)
 {
     CAMLparam1(unit);
-    LPX* lp = lpx_create_prob();
+    glp_prob* lp = glp_create_prob();
     CAMLreturn ((value)lp);
 }
 
 value lp_delete(value lp)
 {
     CAMLparam1(lp);
-    lpx_delete_prob((LPX*)lp);   
+    glp_delete_prob((glp_prob*)lp);   
     CAMLreturn (Val_unit);
 }
 
@@ -75,105 +75,105 @@ value lp_delete(value lp)
 value lp_set_maximize(value lp)
 {
     CAMLparam1(lp);
-    lpx_set_obj_dir((LPX*)lp, LPX_MAX);
+    glp_set_obj_dir((glp_prob*)lp, GLP_MAX);
     CAMLreturn (Val_unit);
 }
 
 value lp_set_minimize(value lp)
 {
     CAMLparam1(lp);
-    lpx_set_obj_dir((LPX*)lp, LPX_MIN);
+    glp_set_obj_dir((glp_prob*)lp, GLP_MIN);
     CAMLreturn (Val_unit);
 }
 
 value lp_add_row(value lp, value i)
 {
     CAMLparam2(lp,i);
-    lpx_add_rows((LPX*)lp, Int_val(i));
+    glp_add_rows((glp_prob*)lp, Int_val(i));
     CAMLreturn (Val_unit);
 }
 
 value lp_add_col(value lp, value i)
 {
     CAMLparam2(lp,i);
-    lpx_add_cols((LPX*)lp, Int_val(i));
+    glp_add_cols((glp_prob*)lp, Int_val(i));
     CAMLreturn (Val_unit);
 }
 
 value lp_set_row_bnd_free(value lp, value i)
 {
     CAMLparam2(lp,i);
-    lpx_set_row_bnds((LPX*)lp, Int_val(i) + 1, LPX_FR, 0.0, 0.0 );
+    glp_set_row_bnds((glp_prob*)lp, Int_val(i) + 1, GLP_FR, 0.0, 0.0 );
     CAMLreturn (Val_unit);
 }
 
 value lp_set_row_bnd_lower(value lp, value i, value lo)
 {
     CAMLparam3(lp,i,lo);
-    lpx_set_row_bnds((LPX*)lp, Int_val(i) + 1, LPX_LO, Double_val(lo), 0.0 );
+    glp_set_row_bnds((glp_prob*)lp, Int_val(i) + 1, GLP_LO, Double_val(lo), 0.0 );
     CAMLreturn (Val_unit);
 }
 
 value lp_set_row_bnd_upper(value lp, value i, value up)
 {
     CAMLparam3(lp,i,up);
-    lpx_set_row_bnds((LPX*)lp, Int_val(i) + 1, LPX_UP, 0.0, Double_val(up) );
+    glp_set_row_bnds((glp_prob*)lp, Int_val(i) + 1, GLP_UP, 0.0, Double_val(up) );
     CAMLreturn (Val_unit);
 }
 
 value lp_set_row_bnd_double(value lp, value i, value lo, value up)
 {
     CAMLparam4(lp,i,lo,up);
-    lpx_set_row_bnds((LPX*)lp, Int_val(i) + 1, LPX_DB, Double_val(lo), Double_val(up) );
+    glp_set_row_bnds((glp_prob*)lp, Int_val(i) + 1, GLP_DB, Double_val(lo), Double_val(up) );
     CAMLreturn (Val_unit);
 }
 
 value lp_set_row_bnd_fixed(value lp, value i, value x)
 {
     CAMLparam3(lp,i,x);
-    lpx_set_row_bnds((LPX*)lp, Int_val(i) + 1, LPX_FX, Double_val(x), Double_val(x) );
+    glp_set_row_bnds((glp_prob*)lp, Int_val(i) + 1, GLP_FX, Double_val(x), Double_val(x) );
     CAMLreturn (Val_unit);
 }
 
 value lp_set_col_bnd_free(value lp, value i)
 {
     CAMLparam2(lp,i);
-    lpx_set_col_bnds((LPX*)lp, Int_val(i) + 1, LPX_FR, 0.0, 0.0 );
+    glp_set_col_bnds((glp_prob*)lp, Int_val(i) + 1, GLP_FR, 0.0, 0.0 );
     CAMLreturn (Val_unit);
 }
 
 value lp_set_col_bnd_lower(value lp, value i, value lo)
 {
     CAMLparam3(lp,i,lo);
-    lpx_set_col_bnds((LPX*)lp, Int_val(i) + 1, LPX_LO, Double_val(lo), 0.0 );
+    glp_set_col_bnds((glp_prob*)lp, Int_val(i) + 1, GLP_LO, Double_val(lo), 0.0 );
     CAMLreturn (Val_unit);
 }
 
 value lp_set_col_bnd_upper(value lp, value i, value up)
 {
     CAMLparam3(lp,i,up);
-    lpx_set_col_bnds((LPX*)lp, Int_val(i) + 1, LPX_UP, 0.0, Double_val(up) );
+    glp_set_col_bnds((glp_prob*)lp, Int_val(i) + 1, GLP_UP, 0.0, Double_val(up) );
     CAMLreturn (Val_unit);
 }
 
 value lp_set_col_bnd_double(value lp, value i, value lo, value up)
 {
     CAMLparam4(lp,i,lo,up);
-    lpx_set_col_bnds((LPX*)lp, Int_val(i) + 1, LPX_DB, Double_val(lo), Double_val(up) );
+    glp_set_col_bnds((glp_prob*)lp, Int_val(i) + 1, GLP_DB, Double_val(lo), Double_val(up) );
     CAMLreturn (Val_unit);
 }
 
 value lp_set_col_bnd_fixed(value lp, value i, value x)
 {
     CAMLparam3(lp,i,x);
-    lpx_set_col_bnds((LPX*)lp, Int_val(i) + 1, LPX_FX, Double_val(x), Double_val(x) );
+    glp_set_col_bnds((glp_prob*)lp, Int_val(i) + 1, GLP_FX, Double_val(x), Double_val(x) );
     CAMLreturn (Val_unit);
 }
 
 value lp_set_obj_coef(value lp, value i, value coeff)
 {
     CAMLparam3(lp,i,coeff);
-    lpx_set_obj_coef((LPX*)lp, Int_val(i) + 1, Double_val(coeff));
+    glp_set_obj_coef((glp_prob*)lp, Int_val(i) + 1, Double_val(coeff));
     CAMLreturn (Val_unit);
 }
 
@@ -194,7 +194,7 @@ value lp_set_mat_row(value lp, value i,
         }
     }
     if(non_zero > 0){
-        lpx_set_mat_row((LPX*)lp, Int_val(i) + 1, non_zero, indexes, val);
+        glp_set_mat_row((glp_prob*)lp, Int_val(i) + 1, non_zero, indexes, val);
     }
     free(indexes);
     free(val);
@@ -218,7 +218,7 @@ value lp_set_mat_col(value lp, value i,
         }
     }
     if(non_zero > 0){
-        lpx_set_mat_col((LPX*)lp, Int_val(i) + 1, non_zero, indexes, val);
+        glp_set_mat_col((glp_prob*)lp, Int_val(i) + 1, non_zero, indexes, val);
     }
     free(indexes);
     free(val);
@@ -229,32 +229,30 @@ value lp_set_mat_col(value lp, value i,
 value lp_simplex(value lp, value presolve)
 {
     CAMLparam2(lp,presolve);
-    if(Bool_val(presolve)){
-        lpx_set_int_parm((LPX*)lp, LPX_K_PRESOL, 1);
-    }else{
-        lpx_set_int_parm((LPX*)lp, LPX_K_PRESOL, 0);
-    }
+    glp_smcp params;
+    glp_init_smcp(&params);
+    params.presolve = (Bool_val(presolve)) ? GLP_ON : GLP_OFF;
     to_dev_null();
-    int status = lpx_simplex((LPX*)lp);
+    int status = glp_simplex((glp_prob*)lp, &params);
     to_std_out();
     value val = Val_false;
-    if(status == LPX_E_OK){
+    if(status == 0){
         val = Val_true;
-    }else if (status == LPX_E_FAULT){
+    }else if (status == GLP_EBADB || status == GLP_ECOND || status == GLP_EBOUND){
         //fprintf(stderr, "solving failed \n");
-    }else if (status == LPX_E_OBJLL){
+    }else if (status == GLP_EOBJLL){
         //fprintf(stderr, "unbounded (lower)\n");
-    }else if (status == LPX_E_OBJUL){
+    }else if (status == GLP_EOBJUL){
         //fprintf(stderr, "unbounded (upper)\n");
-    }else if (status == LPX_E_ITLIM){
+    }else if (status == GLP_EITLIM){
         //fprintf(stderr, "iteration limit reached\n");
-    }else if (status == LPX_E_TMLIM){
+    }else if (status == GLP_ETMLIM){
         //fprintf(stderr, "time limit reached\n");
-    }else if (status == LPX_E_SING){
+    }else if (status == GLP_ESING){
         fprintf(stderr, "singular or ill-conditionned matrix\n");
-    }else if (status == LPX_E_NOPFS){
+    }else if (status == GLP_ENOPFS){
         //fprintf(stderr, "no primal solution\n");
-    }else if (status == LPX_E_NODFS){
+    }else if (status == GLP_ENODFS){
         //fprintf(stderr, "no dual solution\n");
     }else{
         fprintf(stderr, "unknown status: %d\n", status);
@@ -265,28 +263,30 @@ value lp_simplex(value lp, value presolv
 value lp_simplex_exact(value lp)
 {
     CAMLparam1(lp);
+    glp_smcp params;
+    glp_init_smcp(&params);
     to_dev_null();
-    lpx_simplex((LPX*)lp);
-    int status = lpx_exact((LPX*)lp);
+    glp_simplex((glp_prob*)lp, &params);
+    int status = glp_exact((glp_prob*)lp, &params);
     to_std_out();
     value val = Val_false;
-    if(status == LPX_E_OK){
+    if(status == 0){
         val = Val_true;
-    }else if (status == LPX_E_FAULT){
+    }else if (status == GLP_EBADB || status == GLP_ECOND || status == GLP_EBOUND){
         //fprintf(stderr, "solving failed \n");
-    }else if (status == LPX_E_OBJLL){
+    }else if (status == GLP_EOBJLL){
         //fprintf(stderr, "unbounded (lower)\n");
-    }else if (status == LPX_E_OBJUL){
+    }else if (status == GLP_EOBJUL){
         //fprintf(stderr, "unbounded (upper)\n");
-    }else if (status == LPX_E_ITLIM){
+    }else if (status == GLP_EITLIM){
         //fprintf(stderr, "iteration limit reached\n");
-    }else if (status == LPX_E_TMLIM){
+    }else if (status == GLP_ETMLIM){
         //fprintf(stderr, "time limit reached\n");
-    }else if (status == LPX_E_SING){
+    }else if (status == GLP_ESING){
         fprintf(stderr, "singular or ill-conditionned matrix\n");
-    }else if (status == LPX_E_NOPFS){
+    }else if (status == GLP_ENOPFS){
         //fprintf(stderr, "no primal solution\n");
-    }else if (status == LPX_E_NODFS){
+    }else if (status == GLP_ENODFS){
         //fprintf(stderr, "no dual solution\n");
     }else{
         fprintf(stderr, "unknown status: %d\n", status);
@@ -296,7 +296,7 @@ value lp_simplex_exact(value lp)
 value lp_get_stat(value lp)
 {
     CAMLparam1(lp);
-    int status = lpx_get_status((LPX*)lp);
+    int status = glp_get_status((glp_prob*)lp);
     CAMLreturn (Val_int(status));
 }
 
@@ -304,21 +304,21 @@ value lp_get_stat(value lp)
 value lp_get_obj_val(value lp)
 {
     CAMLparam1(lp);
-    double status = lpx_get_obj_val((LPX*)lp);
+    double status = glp_get_obj_val((glp_prob*)lp);
     CAMLreturn (caml_copy_double(status));
 }
 
 value lp_get_row_stat(value lp, value i)
 {
     CAMLparam2(lp,i);
-    int status = lpx_get_row_stat((LPX*)lp, Int_val(i) + 1);
+    int status = glp_get_row_stat((glp_prob*)lp, Int_val(i) + 1);
     CAMLreturn (Val_int(status));
 }
 
 value lp_get_row_primal(value lp, value i)
 {
     CAMLparam2(lp,i);
-    double val = lpx_get_row_prim((LPX*)lp, Int_val(i) + 1);
+    double val = glp_get_row_prim((glp_prob*)lp, Int_val(i) + 1);
     CAMLreturn (caml_copy_double(val));
 }
 
@@ -327,7 +327,7 @@ value lp_get_rows_primal(value lp, value
     CAMLparam3(lp,length,array);
     int i;
     for(i = 0; i < Int_val(length); ++i){
-        double val = lpx_get_row_prim((LPX*)lp, i + 1);
+        double val = glp_get_row_prim((glp_prob*)lp, i + 1);
         Store_double_field(array, i, val);
     }
     CAMLreturn (Val_unit);
@@ -337,7 +337,7 @@ value lp_get_rows_primal(value lp, value
 value lp_get_row_dual(value lp, value i)
 {
     CAMLparam2(lp,i);
-    double val = lpx_get_row_dual((LPX*)lp, Int_val(i) + 1);
+    double val = glp_get_row_dual((glp_prob*)lp, Int_val(i) + 1);
     CAMLreturn (caml_copy_double(val));
 }
 
@@ -346,7 +346,7 @@ value lp_get_rows_dual(value lp, value l
     CAMLparam3(lp,length,array);
     int i;
     for(i = 0; i < Int_val(length); ++i){
-        double val = lpx_get_row_dual((LPX*)lp, i + 1);
+        double val = glp_get_row_dual((glp_prob*)lp, i + 1);
         Store_double_field(array, i, val);
     }
     CAMLreturn (Val_unit);
@@ -355,14 +355,14 @@ value lp_get_rows_dual(value lp, value l
 value lp_get_col_stat(value lp, value i)
 {
     CAMLparam2(lp,i);
-    int status = lpx_get_col_stat((LPX*)lp, Int_val(i) + 1);
+    int status = glp_get_col_stat((glp_prob*)lp, Int_val(i) + 1);
     CAMLreturn (Val_int(status));
 }
 
 value lp_get_col_primal(value lp, value i)
 {
     CAMLparam2(lp,i);
-    double val = lpx_get_col_prim((LPX*)lp, Int_val(i) + 1);
+    double val = glp_get_col_prim((glp_prob*)lp, Int_val(i) + 1);
     CAMLreturn (caml_copy_double(val));
 }
 
@@ -371,7 +371,7 @@ value lp_get_cols_primal(value lp, value
     CAMLparam3(lp,length,array);
     int i;
     for(i = 0; i < Int_val(length); ++i){
-        double val = lpx_get_col_prim((LPX*)lp, i + 1);
+        double val = glp_get_col_prim((glp_prob*)lp, i + 1);
         Store_double_field(array, i, val);
     }
     CAMLreturn (Val_unit);
@@ -380,7 +380,7 @@ value lp_get_cols_primal(value lp, value
 value lp_get_col_dual(value lp, value i)
 {
     CAMLparam2(lp,i);
-    double val = lpx_get_col_dual((LPX*)lp, Int_val(i) + 1);
+    double val = glp_get_col_dual((glp_prob*)lp, Int_val(i) + 1);
     CAMLreturn (caml_copy_double(val));
 }
 
@@ -389,7 +389,7 @@ value lp_get_cols_dual(value lp, value l
     CAMLparam3(lp,length,array);
     int i;
     for(i = 0; i < Int_val(length); ++i){
-        double val = lpx_get_col_dual((LPX*)lp, i + 1);
+        double val = glp_get_col_dual((glp_prob*)lp, i + 1);
         Store_double_field(array, i, val);
     }
     CAMLreturn (Val_unit);
@@ -399,20 +399,20 @@ value lp_interior(value lp)
 {
     CAMLparam1(lp);
     to_dev_null();
-    int status = lpx_interior((LPX*)lp);
+    int status = glp_interior((glp_prob*)lp, NULL);
     to_std_out();
     value val = Val_false;
-    if(status == LPX_E_OK){
+    if(status == 0){
         val = Val_true;
-    }else if (status == LPX_E_FAULT){
+    }else if (status == GLP_EFAIL){
         //fprintf(stderr, "solving failed \n");
-    }else if (status == LPX_E_NOFEAS){
+    }else if (status == GLP_ENOFEAS){
         //fprintf(stderr, "unfeasible system\n");
-    }else if (status == LPX_E_NOCONV){
+    }else if (status == GLP_ENOCVG){
         fprintf(stderr, "slow convergence (or diverge)\n");
-    }else if (status == LPX_E_ITLIM){
+    }else if (status == GLP_EITLIM){
         fprintf(stderr, "iteration limit reached\n");
-    }else if (status == LPX_E_INSTAB){
+    }else if (status == GLP_EINSTAB){
         fprintf(stderr, "numerical instability\n");
     }else{
         fprintf(stderr, "unknown status: %d\n", status);
@@ -423,14 +423,14 @@ value lp_interior(value lp)
 value lp_ipt_obj_val(value lp)
 {
     CAMLparam1(lp);
-    double status = lpx_ipt_obj_val((LPX*)lp);
+    double status = glp_ipt_obj_val((glp_prob*)lp);
     CAMLreturn (caml_copy_double(status));
 }
 
 value lp_ipt_row_primal(value lp, value i)
 {
     CAMLparam2(lp,i);
-    double val = lpx_ipt_row_prim((LPX*)lp, Int_val(i) + 1);
+    double val = glp_ipt_row_prim((glp_prob*)lp, Int_val(i) + 1);
     CAMLreturn (caml_copy_double(val));
 }
 
@@ -439,7 +439,7 @@ value lp_ipt_rows_primal(value lp, value
     CAMLparam3(lp,length,array);
     int i;
     for(i = 0; i < Int_val(length); ++i){
-        double val = lpx_ipt_row_prim((LPX*)lp, i + 1);
+        double val = glp_ipt_row_prim((glp_prob*)lp, i + 1);
         Store_double_field(array, i, val);
     }
     CAMLreturn (Val_unit);
@@ -448,7 +448,7 @@ value lp_ipt_rows_primal(value lp, value
 value lp_ipt_row_dual(value lp, value i)
 {
     CAMLparam2(lp,i);
-    double val = lpx_ipt_row_dual((LPX*)lp, Int_val(i) + 1);
+    double val = glp_ipt_row_dual((glp_prob*)lp, Int_val(i) + 1);
     CAMLreturn (caml_copy_double(val));
 }
 
@@ -457,7 +457,7 @@ value lp_ipt_rows_dual(value lp, value l
     CAMLparam3(lp,length,array);
     int i;
     for(i = 0; i < Int_val(length); ++i){
-        double val = lpx_ipt_row_dual((LPX*)lp, i + 1);
+        double val = glp_ipt_row_dual((glp_prob*)lp, i + 1);
         Store_double_field(array, i, val);
     }
     CAMLreturn (Val_unit);
@@ -466,7 +466,7 @@ value lp_ipt_rows_dual(value lp, value l
 value lp_ipt_col_primal(value lp, value i)
 {
     CAMLparam2(lp,i);
-    double val = lpx_ipt_col_prim((LPX*)lp, Int_val(i) + 1);
+    double val = glp_ipt_col_prim((glp_prob*)lp, Int_val(i) + 1);
     CAMLreturn (caml_copy_double(val));
 }
 
@@ -475,7 +475,7 @@ value lp_ipt_cols_primal(value lp, value
     CAMLparam3(lp,length,array);
     int i;
     for(i = 0; i < Int_val(length); ++i){
-        double val = lpx_ipt_col_prim((LPX*)lp, i + 1);
+        double val = glp_ipt_col_prim((glp_prob*)lp, i + 1);
         Store_double_field(array, i, val);
     }
     CAMLreturn (Val_unit);
@@ -484,7 +484,7 @@ value lp_ipt_cols_primal(value lp, value
 value lp_ipt_col_dual(value lp, value i)
 {
     CAMLparam2(lp,i);
-    double val = lpx_ipt_col_dual((LPX*)lp, Int_val(i) + 1);
+    double val = glp_ipt_col_dual((glp_prob*)lp, Int_val(i) + 1);
     CAMLreturn (caml_copy_double(val));
 }
 
@@ -493,7 +493,7 @@ value lp_ipt_cols_dual(value lp, value l
     CAMLparam3(lp,length,array);
     int i;
     for(i = 0; i < Int_val(length); ++i){
-        double val = lpx_ipt_col_dual((LPX*)lp, i + 1);
+        double val = glp_ipt_col_dual((glp_prob*)lp, i + 1);
         Store_double_field(array, i, val);
     }
     CAMLreturn (Val_unit);
@@ -502,7 +502,7 @@ value lp_ipt_cols_dual(value lp, value l
 value lp_dump_problem(value lp)
 {
     CAMLparam1(lp);
-    lpx_print_prob((LPX*)lp, "lp_error.debug");
-    lpx_write_cpxlp((LPX*)lp, "cpxlp_error.debug");
+    glp_write_lp((glp_prob*)lp, NULL, "lp_error.debug");
+    glp_write_lp((glp_prob*)lp, NULL, "cpxlp_error.debug");
     CAMLreturn (Val_unit);
 }