[PPL-devel] [GIT] ppl/ppl(ppl-0_11-branch): Do destroy the MIP object before returning from solve_with_simplex.
Enea Zaffanella
zaffanella at cs.unipr.it
Fri Sep 17 18:51:11 CEST 2010
Module: ppl/ppl
Branch: ppl-0_11-branch
Commit: b7a6904cda9dbf8e84379fc39b5beddbdc41dfa5
URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=b7a6904cda9dbf8e84379fc39b5beddbdc41dfa5
Author: Enea Zaffanella <zaffanella at cs.unipr.it>
Date: Fri Sep 17 18:50:38 2010 +0200
Do destroy the MIP object before returning from solve_with_simplex.
Do destroy the Polyhedron object before returning from solve_with_generators.
---
demos/ppl_lpsol/ppl_lpsol.c | 45 ++++++++++++++++++++++--------------------
1 files changed, 24 insertions(+), 21 deletions(-)
diff --git a/demos/ppl_lpsol/ppl_lpsol.c b/demos/ppl_lpsol/ppl_lpsol.c
index abf9fbd..20157cd 100644
--- a/demos/ppl_lpsol/ppl_lpsol.c
+++ b/demos/ppl_lpsol/ppl_lpsol.c
@@ -773,10 +773,10 @@ solve_with_generators(ppl_Constraint_System_t ppl_cs,
ppl_Coefficient_t optimum_d,
ppl_Generator_t point) {
ppl_Polyhedron_t ppl_ph;
+ int optimum_found = 0;
int empty;
int unbounded;
int included;
- int ok;
/* Create the polyhedron (recycling the data structures of ppl_cs). */
ppl_new_C_Polyhedron_recycle_Constraint_System(&ppl_ph, ppl_cs);
@@ -809,7 +809,7 @@ solve_with_generators(ppl_Constraint_System_t ppl_cs,
if (verbosity >= 1)
fprintf(output_file, "Unfeasible problem.\n");
maybe_check_results(PPL_MIP_PROBLEM_STATUS_UNFEASIBLE, 0.0);
- return 0;
+ goto exit;
}
if (!empty && no_optimization) {
@@ -818,7 +818,7 @@ solve_with_generators(ppl_Constraint_System_t ppl_cs,
/* Kludge: let's pass PPL_MIP_PROBLEM_STATUS_OPTIMIZED,
to let work `maybe_check_results'. */
maybe_check_results(PPL_MIP_PROBLEM_STATUS_OPTIMIZED, 0.0);
- return 0;
+ goto exit;
}
/* Check whether the problem is unbounded. */
@@ -841,21 +841,16 @@ solve_with_generators(ppl_Constraint_System_t ppl_cs,
if (verbosity >= 1)
fprintf(output_file, "Unbounded problem.\n");
maybe_check_results(PPL_MIP_PROBLEM_STATUS_UNBOUNDED, 0.0);
- return 0;
+ goto exit;
}
- ok = maximize
+ optimum_found = maximize
? ppl_Polyhedron_maximize_with_point(ppl_ph, ppl_objective_le,
- optimum_n, optimum_d, &included,
- point)
+ optimum_n, optimum_d, &included,
+ point)
: ppl_Polyhedron_minimize_with_point(ppl_ph, ppl_objective_le,
- optimum_n, optimum_d, &included,
- point);
-
- if (!ok)
- fatal("internal error");
-
- ppl_delete_Polyhedron(ppl_ph);
+ optimum_n, optimum_d, &included,
+ point);
#ifdef PPL_LPSOL_SUPPORTS_TIMINGS
@@ -868,10 +863,15 @@ solve_with_generators(ppl_Constraint_System_t ppl_cs,
#endif /* defined(PPL_LPSOL_SUPPORTS_TIMINGS) */
+ if (!optimum_found)
+ fatal("internal error");
+
if (!included)
fatal("internal error");
- return 1;
+ exit:
+ ppl_delete_Polyhedron(ppl_ph);
+ return optimum_found;
}
static int
@@ -881,6 +881,7 @@ solve_with_simplex(ppl_const_Constraint_System_t cs,
ppl_Coefficient_t optimum_d,
ppl_Generator_t point) {
ppl_MIP_Problem_t ppl_mip;
+ int optimum_found = 0;
int pricing = 0;
int status = 0;
int satisfiable = 0;
@@ -967,7 +968,7 @@ solve_with_simplex(ppl_const_Constraint_System_t cs,
if (verbosity >= 1)
fprintf(output_file, "Unfeasible problem.\n");
maybe_check_results(status, 0.0);
- return 0;
+ goto exit;
}
else if (no_optimization && satisfiable) {
if (verbosity >= 1)
@@ -975,25 +976,27 @@ solve_with_simplex(ppl_const_Constraint_System_t cs,
/* Kludge: let's pass PPL_MIP_PROBLEM_STATUS_OPTIMIZED,
to let work `maybe_check_results'. */
maybe_check_results(PPL_MIP_PROBLEM_STATUS_OPTIMIZED, 0.0);
- return 0;
+ goto exit;
}
else if (status == PPL_MIP_PROBLEM_STATUS_UNBOUNDED) {
if (verbosity >= 1)
fprintf(output_file, "Unbounded problem.\n");
maybe_check_results(status, 0.0);
- return 0;
+ goto exit;
}
else if (status == PPL_MIP_PROBLEM_STATUS_OPTIMIZED) {
ppl_MIP_Problem_optimal_value(ppl_mip, optimum_n, optimum_d);
ppl_MIP_Problem_optimizing_point(ppl_mip, &g);
ppl_assign_Generator_from_Generator(point, g);
- return 1;
+ optimum_found = 1;
+ goto exit;
}
else
fatal("internal error");
- /* This is just to avoid a compiler warning. */
- return 0;
+ exit:
+ ppl_delete_MIP_Problem(ppl_mip);
+ return optimum_found;
}
static void
More information about the PPL-devel
mailing list