From 7554eedb7f0b5b3e41a480baf04edb47b25baf83 Mon Sep 17 00:00:00 2001 From: Sven Verdoolaege Date: Thu, 1 Mar 2007 16:28:01 +0100 Subject: [PATCH] bernstein_coefficients: optionally optimize during recursive computation --- barvinok/options.h | 6 ++++++ bernstein.cc | 10 ++++++++++ maximize.cc | 4 ++++ options.c | 2 ++ 4 files changed, 22 insertions(+) diff --git a/barvinok/options.h b/barvinok/options.h index 1b73b86..2570321 100644 --- a/barvinok/options.h +++ b/barvinok/options.h @@ -53,6 +53,12 @@ struct barvinok_options { #define BV_GBR_CDD 2 int gbr_lp_solver; + /* bernstein options */ + #define BV_BERNSTEIN_NONE 0 + #define BV_BERNSTEIN_MAX 1 + #define BV_BERNSTEIN_MIN 2 + int bernstein_optimize; + struct barvinok_stats *stats; }; diff --git a/bernstein.cc b/bernstein.cc index b3a23b1..7b768d1 100644 --- a/bernstein.cc +++ b/bernstein.cc @@ -412,6 +412,11 @@ static piecewise_lst *bernstein_coefficients_product(piecewise_lst *pl_all, Polyhedron_Free(P); Polyhedron_Free(PC); + if (options->bernstein_optimize == BV_BERNSTEIN_MIN) + pl->minimize(); + else if (options->bernstein_optimize == BV_BERNSTEIN_MAX) + pl->maximize(); + unsigned done = F->Dimension-nparam; for (F = F->next ; F; F = F->next) { exvector pl_vars; @@ -437,6 +442,11 @@ static piecewise_lst *bernstein_coefficients_product(piecewise_lst *pl_all, delete pl; pl = new_pl; + if (options->bernstein_optimize == BV_BERNSTEIN_MIN) + pl->minimize(); + else if (options->bernstein_optimize == BV_BERNSTEIN_MAX) + pl->maximize(); + Polyhedron_Free(U); done += F->Dimension-nparam; } diff --git a/maximize.cc b/maximize.cc index 2566e8a..d26b204 100644 --- a/maximize.cc +++ b/maximize.cc @@ -897,6 +897,10 @@ int main(int argc, char **argv) exvector params; params = constructParameterVector(all_vars+nvar, nparam); + if (options.minimize) + bv_options->bernstein_optimize = BV_BERNSTEIN_MIN; + else + bv_options->bernstein_optimize = BV_BERNSTEIN_MAX; pl = evalue_bernstein_coefficients(NULL, EP, U, params, bv_options); assert(pl); if (options.minimize) diff --git a/options.c b/options.c index 79a2cb9..6a41a81 100644 --- a/options.c +++ b/options.c @@ -78,6 +78,8 @@ struct barvinok_options *barvinok_options_new_with_defaults() options->gbr_lp_solver = BV_GBR_NONE; #endif + options->bernstein_optimize = BV_BERNSTEIN_NONE; + return options; } -- 2.11.4.GIT