优化模型

优化模型

既然模型已经建立,下一步就是优化它:


/*优化模型*/ error = GRBoptimize(模型);if (error) goto QUIT;

这个例程执行优化并填充几个内部模型属性,包括优化的状态、解决方案等。一旦函数返回,我们就可以查询这些属性的值。具体来说,我们可以通过检索的值来查询优化过程的状态状态属性……


/*获取解决方案信息*/ error = GRBgetintattr(model, GRB_INT_ATTR_STATUS, &optimstatus);if (error) goto QUIT;

优化状态有许多可能的值。可能已经找到了模型的最优解,或者模型已被确定为不可行的或无界的,或者求解过程已被中断。可能的状态列表可以在Gurobi参考手册.对于我们的示例,我们知道模型是可行的,并且我们没有修改任何可能导致优化提前停止的参数(例如,时间限制),因此状态将是GRB_OPTIMAL

另一个重要的模型属性是计算解的目标函数的值。这可以通过下面的调用来访问:


错误= GRBgetdblattr(model, GRB_DBL_ATTR_OBJVAL, &objval);if (error) goto QUIT;

注意,如果这个模型没有找到解决方案,这个调用将返回一个非零的错误结果。

一旦我们知道模型被解决了,我们就可以提取X属性,包含计算解中每个变量的值:


error = GRBgetdblattrarray(model, GRB_DBL_ATTR_X, 0,3, sol);if (error) goto QUIT;

这个例程检索数组值属性的值。第三和第四个参数分别指示要检索的第一个数组元素的索引和要检索的元素数量。在本例中,我们检索条目0到2(即,全部三个)