void writeBnbStatus(EnvPtr env, BranchAndBound *bab, double obj_sense) { const std::string me("qg: "); int err = 0; if (bab) { env->getLogger()->msgStream(LogInfo) << me << std::fixed << std::setprecision(4) << "best solution value = " << obj_sense*bab->getUb() << std::endl << me << std::fixed << std::setprecision(4) << "best bound estimate from remaining nodes = " << obj_sense*bab->getLb() << std::endl << me << "gap = " << std::max(0.0,bab->getUb() - bab->getLb()) << std::endl << me << "gap percentage = " << bab->getPerGap() << std::endl << me << "time used (s) = " << std::fixed << std::setprecision(2) << env->getTime(err) << std::endl << me << "status of branch-and-bound: " << getSolveStatusString(bab->getStatus()) << std::endl; env->stopTimer(err); assert(0==err); } else { env->getLogger()->msgStream(LogInfo) << me << std::fixed << std::setprecision(4) << "best solution value = " << INFINITY << std::endl << me << std::fixed << std::setprecision(4) << "best bound estimate from remaining nodes = " << INFINITY << std::endl << me << "gap = " << INFINITY << std::endl << me << "gap percentage = " << INFINITY << std::endl << me << "time used (s) = " << std::fixed << std::setprecision(2) << env->getTime(err) << std::endl << me << "status of branch-and-bound: " << getSolveStatusString(NotStarted) << std::endl; env->stopTimer(err); assert(0==err); } }