gurobi ()

gurobi ()

gurobi (模型)
gurobi (model, params)
gurobi (model, params, env)

这个函数优化给定的模型。用于优化的算法取决于模型类型(连续模型的单纯形或障碍;分支和切割的MIP模型)。成功完成后,它将返回一个结构体包含解决方案信息的变量。

请咨询本节讨论与使用有限精度浮点运算求解精确定义的数学模型有关的一些实际问题。

参数:

模型:模型结构体必须包含有效的Gurobi模型。看到模型参数部分获取更多信息。

参数个数:参数结构体,当提供时,包含修改后的Gurobi参数列表。看到参数个数参数部分获取更多信息。

env: env结构体,当提供,允许您使用Gurobi计算服务器或Gurobi即时云。看到env参数部分获取更多信息。

使用示例:

结果= gurobi(模型,参数);如果比较字符串(结果。状态,“最优”); fprintf('Optimal objective: %e\n', result.objval); disp(result.x) else fprintf('Optimization returned status: %s\n', result.status); end
返回值:

优化的结果

gurobi函数返回一个结构体,将各种优化结果存储在其字段中。可用的具体结果取决于所求解的模型类型、所使用的参数和优化状态。下面是可能在返回的结果中可用的字段列表。在提交清单后,我们将讨论每种情况下的可用性。

模型字段:

状态
优化的状态,作为字符串返回。期望的结果是“最优”,表明找到了模型的最优解。其他状态是可能的,例如,如果模型没有可行的解决方案,或者如果您设置了Gurobi参数,导致求解器提前终止。手机万博登录看到状态码部分以获得关于古罗比状态代码的进一步信息。

objval
计算出的解的客观值。注意,对于多目标模型result.objval会是一个向量,在哪里result.objval(我)model.multiobj(我)

objbound
解的最佳可行界(最小化的下界,最大化的上界)。

objboundc
最优目标上的最佳非圆界。相比objbound,此属性不利用客观完整性信息舍入更紧密的约束。例如,如果目标已知取一个整数值,而当前的最佳界是1.5,ObjBound将返回2.0ObjBoundC将返回1.5。

mipgap
电流相对MIP最优间隙;计算为 < span > < /美元跨度> \绿色ObjBound-ObjVal \绿色/ \绿色ObjVal \绿色< span > < / span >美元(< span > < /美元跨度> ObjBound < span > < / span >美元< span > < /美元跨度> ObjVal < span > < / span >美元分别为MIP目标界和任然解目标)。返回GRB_INFINITY当任职者解决方案尚未找到时,当没有目标界限时,或当当前任职者目标为0时。这只适用于混合整数问题。

运行时
用于优化的墙壁时钟流逝时间(以秒为单位)。

itercount
执行的单纯形迭代次数。

baritercount
执行的屏障迭代数。

nodecount
探索的分枝和切割节点数。

farkasproof
法卡斯不可行性证明中不可行性违规的幅度。只有在模型被发现不可行时才可用。请参考FarkasProof获取详细信息。

变量字段:

x
计算的解决方案。的每一列都包含一个元素一个

钢筋混凝土
计算出的解决方案的可变降低成本。的每一列都包含一个元素一个

vbasis
计算的最优基的可变基状态值。您通常不应该关心这个向量的内容。如果您希望以后使用高级启动,您只需复制vbasiscbasis将字段转换为下一个模型的相应字段。的每一列都包含一个元素一个

unbdray
无限的射线。提供一个矢量,当将其添加到任何可行的解决方案时,将产生一个同样可行但提高目标的新解决方案。只有当模型被发现是无界时才可用。的每一列都包含一个元素一个

线性约束字段:

松弛
计算解的约束松弛。的每一行都包含一个元素一个

π
计算解的对偶值(也称为影子价格).的每一行都包含一个元素一个

cbasis
所计算的最优基的约束基状态值。的每一行都包含一个元素一个

farkasdual
法卡斯不可行性的证明。只有在模型被发现不可行时才可用。请参考FarkasDual获取详细信息。

二次约束的字段:

qcslack
当前解的二次约束松弛。对于每个二次约束,这个向量包含一个条目。

qcpi
与二次约束相关的对偶值。对于每个二次约束,这个向量包含一个条目。

解决方案池字段:

当在优化调用期间发现多个解决方案时,这些解决方案将在该字段中返回。一个结构体数组。当存在时,每个结构体都有以下字段:
objval
对象的客观值< span > < /美元跨度>我< span > < / span >美元th解决方案result.pool .objval(我).请注意,当模型是一个多目标模型时,而不是一个单一的值,
result.pool (i) .objval (j)的值< span > < / span > j < span >美元< / span >的目标函数< span > < /美元跨度>我< span > < / span >美元th的解决方案。

xn
存储< span > < /美元跨度>我< span > < / span >美元th解决方案result.pool .xn(我).的每一列都包含一个元素一个
注意,要查询存储的解决方案数量,可以查询的长度result.pool

poolobjbound
对于单目标MIP优化问题,该值给出了一个未发现解决方案的最佳可能目标的边界。这个值和的差objbound前者为未发现的解给出一个目标界,而后者为任何解给出一个目标界。

什么是可用的

状态字段将在所有情况下存在。它表明Gurobi是否能够找到一个已证明的模型的最优解。如果找到了模型的最优或其他解,则objvalx字段将会出现。

对于线性和二次规划,如果有解,则π钢筋混凝土字段也会出现。对于具有二次约束的模型,如果参数qcpdual设置为1,字段qcpi将礼物。如果最终解是a基本解(由单纯形计算),那么vbasiscbasis将礼物。如果模型是无界线性规划,则InfUnbdInfo参数设置为1,字段unbdray将礼物。最后,如果模型是一个不可行的线性规划,则InfUnbdInfo参数设置为1,字段farkasdualfarkasproof将被设置。

对于混合整数问题,没有双重信息(即。π松弛钢筋混凝土vbasiscbasisqcslackqcpiubdrayfarkasdual)随时可用。当有多个解时,则poolobjbound字段将会出现。根据状态字段值,字段nodecountobjboundobjbundcmipgap可用。

对于连续和混合整数模型,在正常执行下,字段运行时itercountbaritercount可用。