优化模型

优化模型

现在模型已经建立,下一步是优化它:


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

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


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

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

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


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

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

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


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

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