优化模型

优化模型

现在模型已经建立,下一步是对其进行优化:


/*优化模型*/错误= grboptimization(模型);if (error) goto QUIT;

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


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

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

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


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

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

一旦我们知道模型已经解出,我们就可以提取X属性,它包含计算出的解决方案中每个变量的值:


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

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