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,则表示该方法未能创建可行性放松。