Store optimal integral solution upon finding it

master
Alinson S. Xavier 11 years ago
parent 4a97719b18
commit d4905b7f94

@ -22,6 +22,9 @@ int BNC_init(struct BNC *bnc)
bnc->problem_init_lp = 0;
bnc->problem_add_cutting_planes = 0;
bnc->best_x = 0;
bnc->best_obj_val = 0;
bnc->lp = (struct LP *) malloc(sizeof(struct LP));
ABORT_IF(!bnc->lp, "could not allocate bnc->lp\n");
@ -68,7 +71,7 @@ int BNC_solve(struct BNC *bnc)
static int BNC_solve_node(struct BNC *bnc, int depth)
{
struct LP *lp = bnc->lp;
double *best_val = &bnc->best_val;
double *best_val = &bnc->best_obj_val;
int rval = 0;
double *x = (double *) NULL;
@ -110,7 +113,7 @@ static int BNC_solve_node(struct BNC *bnc, int depth)
if (bnc->problem_add_cutting_planes)
{
rval = bnc->problem_add_cutting_planes(lp, bnc->problem_data);
ABORT_IF(rval, "TSP_add_cutting_planes failed\n");
ABORT_IF(rval, "problem_add_cutting_planes failed\n");
}
rval = LP_optimize(lp, &is_infeasible);
@ -129,6 +132,9 @@ static int BNC_solve_node(struct BNC *bnc, int depth)
if (objval < *best_val)
{
*best_val = objval;
bnc->best_x = x;
x = 0;
time_printf("Found a better integral solution:\n");
time_printf(" objval = %.2lf **\n", objval);
}

@ -6,7 +6,10 @@
struct BNC
{
struct LP *lp;
double best_val;
double *best_x;
double best_obj_val;
int *problem_data;
int (*problem_init_lp)(struct LP *, void *);