summarylogtreecommitdiffstats
path: root/glpk_new_api.patch
diff options
context:
space:
mode:
Diffstat (limited to 'glpk_new_api.patch')
-rw-r--r--glpk_new_api.patch375
1 files changed, 0 insertions, 375 deletions
diff --git a/glpk_new_api.patch b/glpk_new_api.patch
deleted file mode 100644
index e9d483ab37f3..000000000000
--- a/glpk_new_api.patch
+++ /dev/null
@@ -1,375 +0,0 @@
-From 1192e00b23670c71a436f065c58f5524e80142b9 Mon Sep 17 00:00:00 2001
-From: Thomas Kahle <thomas.kahle@ovgu.de>
-Date: Fri, 25 Apr 2014 22:07:30 +0200
-Subject: [PATCH] Update the glpk calls to the new glp_ API
-
-Newer versions of GLPK no longer support the original lpx_ API.
-Since the use of GLPK is optional, there is little point in supporting
-two APIs. Switch to the new API and check that it is available.
-
-Signed-off-by: Thomas Kahle <thomas.kahle@ovgu.de>
-Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
----
- basis_reduction_glpk.c | 82 ++++++++++++++++++++++++++------------------------
- configure.ac | 2 +-
- polysign_glpk.c | 72 +++++++++++++++++++++++---------------------
- 3 files changed, 80 insertions(+), 76 deletions(-)
-
-diff --git a/basis_reduction_glpk.c b/basis_reduction_glpk.c
-index 136bfde..5806dbe 100644
---- a/basis_reduction_glpk.c
-+++ b/basis_reduction_glpk.c
-@@ -3,15 +3,15 @@
- #include <glpk.h>
- #include <barvinok/basis_reduction.h>
-
--static LPX *init_lp(Polyhedron *P);
--static void set_lp_obj(LPX *lp, Value *row, int dim);
--static int solve_lp(LPX *lp);
--static void get_obj_val(LPX* lp, double *F);
--static int add_lp_row(LPX *lp, Value *row, int dim);
--static void get_alpha(LPX* lp, int row, double *alpha);
--static void del_lp_row(LPX *lp);
-+static glp_prob *init_lp(Polyhedron *P);
-+static void set_lp_obj(glp_prob *lp, Value *row, int dim);
-+static int solve_lp(glp_prob *lp);
-+static void get_obj_val(glp_prob* lp, double *F);
-+static int add_lp_row(glp_prob *lp, Value *row, int dim);
-+static void get_alpha(glp_prob* lp, int row, double *alpha);
-+static void del_lp_row(glp_prob *lp);
-
--#define GBR_LP LPX
-+#define GBR_LP glp_prob
- #define GBR_type double
- #define GBR_init(v) do { } while(0)
- #define GBR_clear(v) do { } while(0)
-@@ -25,30 +25,30 @@ static void del_lp_row(LPX *lp);
- #define GBR_lp_set_obj(lp, obj, dim) set_lp_obj(lp, obj, dim)
- #define GBR_lp_solve(lp) solve_lp(lp)
- #define GBR_lp_get_obj_val(lp, F) get_obj_val(lp, F)
--#define GBR_lp_delete(lp) lpx_delete_prob(lp)
--#define GBR_lp_next_row(lp) lpx_get_num_rows(lp)+1
-+#define GBR_lp_delete(lp) glp_delete_prob(lp)
-+#define GBR_lp_next_row(lp) glp_get_num_rows(lp)+1
- #define GBR_lp_add_row(lp, row, dim) add_lp_row(lp, row, dim)
- #define GBR_lp_get_alpha(lp, row, alpha) get_alpha(lp, row, alpha)
- #define GBR_lp_del_row(lp) del_lp_row(lp);
- #define Polyhedron_Reduced_Basis glpk_Polyhedron_Reduced_Basis
- #include "basis_reduction_templ.c"
-
--static LPX *init_lp(Polyhedron *P)
-+static glp_prob *init_lp(Polyhedron *P)
- {
-- LPX *lp;
-+ glp_prob *lp;
- int *ind;
- double *val;
- int i, j, k, l;
-
- ind = ALLOCN(int, 1+P->Dimension);
- val = ALLOCN(double, 1+P->Dimension);
-- lp = lpx_create_prob();
-- lpx_set_obj_dir(lp, LPX_MAX);
-- lpx_add_rows(lp, 2*P->NbConstraints);
-- lpx_add_cols(lp, 2*P->Dimension);
-+ lp = glp_create_prob();
-+ glp_set_obj_dir(lp, GLP_MAX);
-+ glp_add_rows(lp, 2*P->NbConstraints);
-+ glp_add_cols(lp, 2*P->Dimension);
- for (i = 0; i < 2; ++i) {
- for (j = 0; j < P->NbConstraints; ++j) {
-- int type = j < P->NbEq ? LPX_FX : LPX_LO;
-+ int type = j < P->NbEq ? GLP_FX : GLP_LO;
- for (k = 0, l = 0; k < P->Dimension; ++k) {
- if (value_zero_p(P->Constraint[j][1+k]))
- continue;
-@@ -56,49 +56,51 @@ static LPX *init_lp(Polyhedron *P)
- val[1+l] = VALUE_TO_DOUBLE(P->Constraint[j][1+k]);
- ++l;
- }
-- lpx_set_mat_row(lp, 1+i*P->NbConstraints+j, l, ind, val);
-- lpx_set_row_bnds(lp, 1+i*P->NbConstraints+j, type,
-+ glp_set_mat_row(lp, 1+i*P->NbConstraints+j, l, ind, val);
-+ glp_set_row_bnds(lp, 1+i*P->NbConstraints+j, type,
- -VALUE_TO_DOUBLE(P->Constraint[j][1+P->Dimension]), 0);
- }
- for (k = 0, l = 0; k < P->Dimension; ++k) {
-- lpx_set_col_bnds(lp, 1+i*P->Dimension+k, LPX_FR, 0, 0);
-+ glp_set_col_bnds(lp, 1+i*P->Dimension+k, GLP_FR, 0, 0);
- }
- }
- free(ind);
- free(val);
-- lpx_set_int_parm(lp, LPX_K_MSGLEV, 0);
- return lp;
- }
-
--static void set_lp_obj(LPX *lp, Value *row, int dim)
-+static void set_lp_obj(glp_prob *lp, Value *row, int dim)
- {
- int j;
- for (j = 0; j < dim; ++j) {
-- lpx_set_obj_coef(lp, 1+j, VALUE_TO_DOUBLE(row[j]));
-- lpx_set_obj_coef(lp, 1+dim+j, -VALUE_TO_DOUBLE(row[j]));
-+ glp_set_obj_coef(lp, 1+j, VALUE_TO_DOUBLE(row[j]));
-+ glp_set_obj_coef(lp, 1+dim+j, -VALUE_TO_DOUBLE(row[j]));
- }
- }
-
--static int solve_lp(LPX *lp)
-+static int solve_lp(glp_prob *lp)
- {
-- lpx_adv_basis(lp);
-- lpx_simplex(lp);
-- return lpx_get_status(lp) == LPX_UNBND;
-+ glp_smcp parm;
-+ glp_adv_basis(lp, 0);
-+ glp_init_smcp(&parm);
-+ parm.msg_lev = GLP_MSG_OFF;
-+ glp_simplex(lp, &parm);
-+ return glp_get_status(lp) == GLP_UNBND;
- }
-
--static void get_obj_val(LPX* lp, double *F)
-+static void get_obj_val(glp_prob* lp, double *F)
- {
-- assert(lpx_get_status(lp) == LPX_OPT);
-- *F = lpx_get_obj_val(lp);
-+ assert(glp_get_status(lp) == GLP_OPT);
-+ *F = glp_get_obj_val(lp);
- assert(*F > -1e-10);
- if (*F < 0)
- *F = 0;
- }
-
--static int add_lp_row(LPX *lp, Value *row, int dim)
-+static int add_lp_row(glp_prob *lp, Value *row, int dim)
- {
- int j, l;
-- int nr = lpx_add_rows(lp, 1);
-+ int nr = glp_add_rows(lp, 1);
- int *ind;
- double *val;
-
-@@ -113,23 +115,23 @@ static int add_lp_row(LPX *lp, Value *row, int dim)
- val[1+l+1] = -VALUE_TO_DOUBLE(row[j]);
- l += 2;
- }
-- lpx_set_mat_row(lp, nr, l, ind, val);
-- lpx_set_row_bnds(lp, nr, LPX_FX, 0, 0);
-+ glp_set_mat_row(lp, nr, l, ind, val);
-+ glp_set_row_bnds(lp, nr, GLP_FX, 0, 0);
- free(ind);
- free(val);
-
- return nr;
- }
-
--static void get_alpha(LPX* lp, int row, double *alpha)
-+static void get_alpha(glp_prob* lp, int row, double *alpha)
- {
-- *alpha = -lpx_get_row_dual(lp, row);
-+ *alpha = -glp_get_row_dual(lp, row);
- }
-
--static void del_lp_row(LPX *lp)
-+static void del_lp_row(glp_prob *lp)
- {
- int rows[2];
-- rows[1] = lpx_get_num_rows(lp);
-- lpx_del_rows(lp, 1, rows);
-+ rows[1] = glp_get_num_rows(lp);
-+ glp_del_rows(lp, 1, rows);
- }
-
-diff --git a/configure.ac b/configure.ac
-index 76a299f..b917f32 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -403,7 +403,7 @@ if test "$glpk_package" != "no"; then
- fi
- AC_CHECK_HEADERS([glpk.h],[
- have_glpk=true
-- AC_CHECK_LIB(glpk, main,[],[have_glpk=false])
-+ AC_CHECK_LIB(glpk, [glp_simplex],[],[have_glpk=false])
- ])
- fi
- AM_CONDITIONAL(HAVE_GLPK, test x$have_glpk = xtrue)
-diff --git a/polysign_glpk.c b/polysign_glpk.c
-index e6b6126..734cca2 100644
---- a/polysign_glpk.c
-+++ b/polysign_glpk.c
-@@ -9,9 +9,10 @@
-
- #define EMPTY_DOMAIN -2
-
--static LPX *solve_lp(int dir, Matrix *C, Value *f, Value denom)
-+static glp_prob *solve_lp(int dir, Matrix *C, Value *f, Value denom)
- {
-- LPX *lp;
-+ glp_prob *lp;
-+ glp_smcp parm;
- int *ind;
- double *val;
- int j, k, l;
-@@ -19,13 +20,13 @@ static LPX *solve_lp(int dir, Matrix *C, Value *f, Value denom)
-
- ind = ALLOCN(int, 1+dim);
- val = ALLOCN(double, 1+dim);
-- lp = lpx_create_prob();
-- lpx_set_obj_dir(lp, dir);
-- lpx_add_rows(lp, C->NbRows);
-- lpx_add_cols(lp, dim);
-+ lp = glp_create_prob();
-+ glp_set_obj_dir(lp, dir);
-+ glp_add_rows(lp, C->NbRows);
-+ glp_add_cols(lp, dim);
-
- for (j = 0; j < C->NbRows; ++j) {
-- int type = value_zero_p(C->p[j][0]) ? LPX_FX : LPX_LO;
-+ int type = value_zero_p(C->p[j][0]) ? GLP_FX : GLP_LO;
- for (k = 0, l = 0; k < dim; ++k) {
- if (value_zero_p(C->p[j][1+k]))
- continue;
-@@ -33,26 +34,27 @@ static LPX *solve_lp(int dir, Matrix *C, Value *f, Value denom)
- val[1+l] = VALUE_TO_DOUBLE(C->p[j][1+k]);
- ++l;
- }
-- lpx_set_mat_row(lp, 1+j, l, ind, val);
-- lpx_set_row_bnds(lp, 1+j, type,
-+ glp_set_mat_row(lp, 1+j, l, ind, val);
-+ glp_set_row_bnds(lp, 1+j, type,
- -VALUE_TO_DOUBLE(C->p[j][1+dim]), 0);
- }
- for (k = 0, l = 0; k < dim; ++k) {
-- lpx_set_col_bnds(lp, 1+k, LPX_FR, 0, 0);
-+ glp_set_col_bnds(lp, 1+k, GLP_FR, 0, 0);
- }
- free(ind);
- free(val);
-- lpx_set_int_parm(lp, LPX_K_MSGLEV, 0);
-
- /* objective function */
- for (j = 0; j < dim; ++j)
-- lpx_set_obj_coef(lp, 1+j, VALUE_TO_DOUBLE(f[j]) /
-+ glp_set_obj_coef(lp, 1+j, VALUE_TO_DOUBLE(f[j]) /
- VALUE_TO_DOUBLE(denom));
-- lpx_set_obj_coef(lp, 0, VALUE_TO_DOUBLE(f[dim]) /
-+ glp_set_obj_coef(lp, 0, VALUE_TO_DOUBLE(f[dim]) /
- VALUE_TO_DOUBLE(denom));
-
-- lpx_adv_basis(lp);
-- lpx_simplex(lp);
-+ glp_adv_basis(lp, 0);
-+ glp_init_smcp(&parm);
-+ parm.msg_lev = GLP_MSG_OFF;
-+ glp_simplex(lp, &parm);
-
- return lp;
- }
-@@ -61,32 +63,32 @@ static enum lp_result constraints_affine_minmax(int dir, Matrix *C,
- Value *f, Value denom, Value *opt)
- {
- enum lp_result res = lp_ok;
-- LPX *lp = solve_lp(dir, C, f, denom);
-+ glp_prob *lp = solve_lp(dir, C, f, denom);
-
-- switch (lpx_get_status(lp)) {
-- case LPX_OPT:
-- if (dir == LPX_MIN)
-- value_set_si(*opt, (int)ceil(lpx_get_obj_val(lp)-1e-10));
-+ switch (glp_get_status(lp)) {
-+ case GLP_OPT:
-+ if (dir == GLP_MIN)
-+ value_set_si(*opt, (int)ceil(glp_get_obj_val(lp)-1e-10));
- else
-- value_set_si(*opt, (int)floor(lpx_get_obj_val(lp)+1e-10));
-+ value_set_si(*opt, (int)floor(glp_get_obj_val(lp)+1e-10));
- break;
-- case LPX_UNBND:
-+ case GLP_UNBND:
- res = lp_unbounded;
- break;
-- case LPX_NOFEAS:
-+ case GLP_NOFEAS:
- res = lp_empty;
- break;
- default:
- assert(0);
- }
-- lpx_delete_prob(lp);
-+ glp_delete_prob(lp);
- return res;
- }
-
- static int constraints_affine_minmax_sign(int dir, Matrix *C, Matrix *T,
- int rational)
- {
-- LPX *lp;
-+ glp_prob *lp;
- int sign;
- double opt;
- unsigned dim = C->NbColumns-2;
-@@ -94,9 +96,9 @@ static int constraints_affine_minmax_sign(int dir, Matrix *C, Matrix *T,
- assert(T->NbRows == 2);
-
- lp = solve_lp(dir, C, T->p[0], T->p[1][dim]);
-- switch (lpx_get_status(lp)) {
-- case LPX_OPT:
-- opt = lpx_get_obj_val(lp);
-+ switch (glp_get_status(lp)) {
-+ case GLP_OPT:
-+ opt = glp_get_obj_val(lp);
- if (rational) {
- sign = opt < 0 ? -1 : opt > 0 ? 1 : 0;
- } else {
-@@ -108,19 +110,19 @@ static int constraints_affine_minmax_sign(int dir, Matrix *C, Matrix *T,
- sign = 0;
- }
- break;
-- case LPX_UNBND:
-- if (dir == LPX_MIN)
-+ case GLP_UNBND:
-+ if (dir == GLP_MIN)
- sign = -1;
- else
- sign = 1;
- break;
-- case LPX_NOFEAS:
-+ case GLP_NOFEAS:
- sign = EMPTY_DOMAIN;
- break;
- default:
- assert(0);
- }
-- lpx_delete_prob(lp);
-+ glp_delete_prob(lp);
- return sign;
- }
-
-@@ -152,12 +154,12 @@ enum order_sign glpk_polyhedron_affine_sign(Polyhedron *D, Matrix *T,
- return glpk_polyhedron_affine_sign_0D(D, T);
-
- Polyhedron_Matrix_View(D, &M, D->NbConstraints);
-- int min = constraints_affine_minmax_sign(LPX_MIN, &M, T, rational);
-+ int min = constraints_affine_minmax_sign(GLP_MIN, &M, T, rational);
- if (min == EMPTY_DOMAIN)
- return order_undefined;
- if (min > 0)
- return order_gt;
-- int max = constraints_affine_minmax_sign(LPX_MAX, &M, T, rational);
-+ int max = constraints_affine_minmax_sign(GLP_MAX, &M, T, rational);
- assert(max != EMPTY_DOMAIN);
- if (max < 0)
- return order_lt;
-@@ -173,6 +175,6 @@ enum order_sign glpk_polyhedron_affine_sign(Polyhedron *D, Matrix *T,
- enum lp_result glpk_constraints_opt(Matrix *C, Value *obj, Value denom,
- enum lp_dir dir, Value *opt)
- {
-- int glpk_dir = dir == lp_min ? LPX_MIN : LPX_MAX;
-+ int glpk_dir = dir == lp_min ? GLP_MIN : GLP_MAX;
- return constraints_affine_minmax(glpk_dir, C, obj, denom, opt);
- }
---
-2.3.3.GIT
-