grbmodel.feasrelax()
grbmodel.feasrelax()
修改了grbmodel.
对象创建可行性放松。请注意,您需要打电话优化结果计算实际的放松解决方案。
可行性放松是一个模型,当解决时,最小化解决方案违反原始模型的线性约束的量。此方法提供了许多用于指定放松的选项。
如果您指定Lookobjtype = 0.
,可行性放松的目的是最小化绑定和约束违规的加权量子的总和。这lbpen.
那Ubpen.
, 和Rhspen.
参数分别在下限,上限和线性约束中指定每单位违规的成本。
如果您指定Lookobjtype = 1
,可行性放松的目的是最小化绑定和约束违规的平方的加权之和。这lbpen.
那Ubpen.
, 和Rhspen.
参数分别指定了下限,上限和线性约束违规的正方形的系数。
如果您指定Lookobjtype = 2
,可行性放松的目的是最大限度地减少绑定和约束违规的加权计数。这lbpen.
那Ubpen.
, 和Rhspen.
参数分别指定违反下限,上限和线性约束的成本。
举个例子,如果是约束Rhspen.
价值P.
被违反2.0,它会贡献2 * P.
对可行性放松目标Lookobjtype = 0.
这将是贡献2 * 2 * p
为了Lookobjtype = 1
这将是贡献P.
为了Lookobjtype = 2
。
这minrelax.
参数是一个布尔值,可控制创建的可行性放松类型。如果minrelax = false.
,优化返回的模型提供了一种最大限度地减少违规成本的解决方案。如果minrelax =真实
,优化返回的模型找到一个最小化原始目标的解决方案,但只能从最小化违规成本的解决方案中。注意feasrelax.
必须解决优化问题,以找到最低可能的放松minrelax =真实
,这可能是非常昂贵的。
此方法有两个签名。更复杂的一个是一个变量和约束列表,以及与放松相应的下限,上限和约束相关联的惩罚。如果其中一个列表中未包含在这些列表中的一个变量或约束,则可能不会违反相关的界限或约束。更简单的签名需要一对布尔参数,vrelax.
和CRELAX.
,表示可以违反可变界限和/或约束。如果vrelax.
/CRELAX.
是真的
,然后允许每个绑定/约束分别违反,并且相关成本为1.0。
请注意,这是一种破坏性方法:它修改了调用它的模型。如果您不想修改原始模型,请使用grbmodel构造函数在调用此方法之前创建副本。
双倍的 | feasrelax.( | ㈡ | 松弛jtype, |
布尔 | minrelax, | ||
grbvar [] | vars, | ||
双倍的[] | lbpen, | ||
双倍的[] | Ubpen, | ||
grbconstr [] | 约束, | ||
双倍的[] | RHSPEN) |
-
创建一个可行性放松模型。
论点:
松弛jtype.:在找到最低成本放松时使用的成本函数。
minrelax.:执行可行性放松的类型。
vars.:允许违反其范围的变量。
lbpen.:违反可变下限的惩罚。参数中每个变量的一个条目vars.。
Ubpen.:违反可变上限的惩罚。参数中每个变量的一个条目vars.。
建议:允许侵犯的线性约束。
Rhspen.:违反线性约束的罚款。参数中每个约束的一个条目建议。
论点:
返回值:
零minrelax.是假的。如果minrelax.是真的,返回值是放松所执行的客观值。如果值小于0,则表示该方法未能创建可行性放松。
双倍的 | feasrelax.( | ㈡ | 松弛jtype, |
布尔 | minrelax, | ||
布尔 | vrelax, | ||
布尔 | CRELAX) |
-
制造可行性放松模型的简化方法。
论点:
松弛jtype.:在找到最低成本放松时使用的成本函数。
minrelax.:执行可行性放松的类型。
vrelax.:表示是否可以放宽可变界限(任何违规行为的成本为1.0。
CRELAX.:表示是否可以放宽线性约束(任何违规行为的成本为1.0。
返回值:
零minrelax.是假的。如果minrelax.是真的,返回值是放松所执行的客观值。如果值小于0,则表示该方法未能创建可行性放松。