Hi all,
I have been using GLPK as an API to solve a MIP problem coded in C++. The
model and glpk work well, but when the branch and cut tree is too large and
it exceeds the memory I allocated in the callback function, the program
halts. How can I change the call back function so that instead of halting
the program, it list the best solution it has found so far and continues
running.
I really appreciate your help,
Here are my two functions
// 1) Callback function:
void cb_func(glp_tree *tree, void *info)
{ if(glp_ios_reason(tree)==GLP_IBINGO)
{ if(glp_ios_mip_gap(tree)<=0.10)
glp_ios_terminate(tree);
}
return;
}
.
.
.
// 2) The function that solves the MIP Model and data:
int SolveGLPK(list<patient> & unit, list<room> & u5400, int& clktime){
glp_prob *mip;
glp_tran *tran;
glp_iocp parm;
int ret;
glp_mem_limit(1200);
mip = glp_create_prob();
tran = glp_mpl_alloc_wksp();
ret = glp_mpl_read_model(tran, "RGH_simulation.mod", 1);
if (ret != 0)
{
fprintf(stderr, "Error on translating model\n");
goto skip;
}
ret = glp_mpl_read_data(tran, "glpk_input.dat");
if (ret != 0)
{
fprintf(stderr, "Error on translating data\n");
goto skip;
}
ret = glp_mpl_generate(tran, NULL);
if (ret != 0)
{
fprintf(stderr, "Error on generating model\n");
goto skip;
}
glp_mpl_build_prob(tran, mip);
glp_simplex(mip, NULL);
glp_init_iocp(&parm); // for controling MIP_gap
parm.cb_func=cb_func; // for controling MIP_gap
glp_intopt(mip, &parm); // for controling MIP_gap
//glp_intopt(mip, NULL); // function used in original code instead of
the above
ret = glp_mpl_postsolve(tran, mip, GLP_MIP);
if (ret != 0)
fprintf(stderr, "Error on postsolving model\n");
skip: glp_mpl_free_wksp(tran);
glp_delete_prob(mip);
return 0;
}
_______________________________________________
Help-glpk mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/help-glpk