优化模型
优化模型
现在模型已经建立,下一步是优化它:
/*优化模型*/ 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的条目(即所有三个条目)