我正在用C++程序调用Gurobi求解一个MILP问题,我想得到生成的节点数和LP松弛的目标函数值。
对于节点计数,我使用了以下类:
class NodeCounter : public GRBCallback {
public:
int nodecnt;
void callback() {
if (where == GRB_CB_MIPNODE) {
nodecnt = getDoubleInfo(GRB_CB_MIPNODE_NODCNT);
}
}
};
然后在model.optimize()
之前调用函数,如下所示:
// Create an instance of callback class
NodeCounter callback;
// Set the callback function
model.setCallback(&callback);
但是我得到的节点数不正确!
对于LP松弛,我调用Model.relax()
来创建MILP的松弛,然后再次求解,我的问题是:如何使用callback
得到LP而不需要再次求解LP?
1条答案
按热度按时间km0tfn4u1#
我想与大家分享我目前为止找到的计算生成节点数的解决方案。
我注意到,在这个例子中,返回的节点数小于日志文件中声明的节点数1,但是,如果日志文件中声明的节点数是0或1,那么类在这两种情况下都返回0,有没有办法区分后两种情况?