gurobi_feasrelax ()
gurobi_feasrelax ()
gurobi_feasrelax | (模型,弛缓对象类型,minrelax,惩罚) |
gurobi_feasrelax | (模型,弛缓对象类型,minrelax,惩罚,params) |
gurobi_feasrelax | (model, relaxobjtype, minrelax,点球,params, env) |
这个函数计算输入的可行性松弛模型论点。可行性松弛是一种模型,当求解时,使解违反原模型的边界和线性约束的量最小化。您必须提供一个惩罚来关联放松每个单独的约束或约束(通过处罚参数)。这些惩罚有不同的解释方式,取决于价值relaxobjtype论点。
参数:
模型:模型结构体必须包含有效的Gurobi模型。看到模型参数部分获取更多信息。
relaxobjtype:对违法行为施加惩罚的方法。
如果您指定relaxobjtype = 0,可行性松弛的目标是最小化有界违反和约束违反的加权值之和。
如果您指定relaxobjtype = 1,可行性松弛的目标是最小化有界和违反约束平方和的加权和。
如果您指定relaxobjtype = 2,可行性松弛的目标是最小化边界和约束违反的加权计数。
在所有情况下,重量是从penalties.lb,penalties.ub和penalties.rhs.您可以提供特殊的罚金值正表示相应的界限或约束不能被放松。
minrelax:minrelax参数是一个布尔值,它控制所创建的可行性松弛的类型。如果minrelax = False,优化返回的模型提供了一个解决方案,可以将违规的代价降至最低。如果minrelax = True,优化返回的模型可以找到一个最小化原始目标的解决方案,但只能从那些最小化违反成本的解决方案中找到。请注意,gurobi_feasrelax必须解决一个优化问题才能找到最小可能松弛的时候minrelax = True,这可能相当昂贵。
处罚:处罚参数是一个结构数组,具有以下可选字段(默认为all)正):
磅违反每个下界的惩罚。
乌兰巴托违反每个上限的惩罚。
园艺学会违反每个约束的惩罚。
举个例子,如果一个约束与penalties.rhs价值p被2.0违反了,它会做出贡献吗2 * p对可行性放宽的目的relaxobjtype = 0,2 * 2 * p为relaxobjtype = 1,p为relaxobjtype = 2.
env: env结构体,允许您使用Gurobi计算服务器或Gurobi即时云。看到env参数部分获取更多信息。
返回值:
一个结构体包含两个字段:
result.model,一个结构变量,如模型论证部分。
result.feasobj一个标量。如果minrelax = = true这是松弛问题的客观值,否则为0.0。
使用示例:
模型= gurobi_read(“stein9.mps”);
penalties.lb= ones(length(model.lb),1);
penalties.ub= ones(length(model.ub),1);
penalties.rhs= ones(length(model.rhs),1);
Feasrelaxresult = gurobi_feasrelax(模型,0,假,惩罚);