BigM_转换
(类来自 pyomo.gdp.plugins.bigm)
- class pyomo.gdp.plugins.bigm.BigM_Transformation[source]
基础类:
GDP_to_MIP_Transformation,_BigM_MixIn使用大M项放松析取模型。
通过向所有析取约束添加Big-M项,将析取模型松弛为代数模型。
- This transformation accepts the following keyword arguments:
bigM: 用户指定的M值(或字典)用于使用(见下文) targets: 要转换的目标 [默认值: 实例]
- M values are determined as follows:
如果约束出现在bigM参数字典中
如果约束 parent_component 出现在 bigM 参数字典中
如果任何作为约束的祖先的块出现在bigM参数字典中
如果 'None' 在 bigM 参数字典中
如果约束或约束的父组件出现在附加到任何父块的BigM后缀中,从约束的父块开始并向上移动到根模型。
如果在约束和根模型之间的任何 parent_block() 上附加的 BigM 后缀中出现 None。
如果约束是线性的,使用变量边界估计M
M 值可以是单个值,也可以是一个 2 元组,用于指定约束体下界和上界的 M。
指定“bigM=N”会自动映射到“bigM={None: N}”。
转换将创建一个新的Block,其名称以“_pyomo_gdp_bigm_reformulation”开头。该Block将包含一个名为“relaxedDisjuncts”的索引Block,用于存放松弛的析取项。此Block由一个整数索引,表示析取项被松弛的顺序。所有转换后的析取项将有一个指向其转换约束所在Block的指针,所有转换后的析取关系将有一个指向相应的‘Or’或‘ExactlyOne’约束的指针。
方法
__init__()初始化转换对象。
apply(model, **kwds)已弃用。
apply_to(model, **kwds)将转换应用于给定的模型。
create_using(model, **kwds)使用此转换创建一个新模型
get_M_value(constraint)返回用于转换约束的M值。
get_M_value_src(constraint)返回一个元组,指示用于转换约束的M值是如何指定的。
返回一个字典,将每个约束映射到一个元组:(lower_M_value, upper_M_value),如果约束没有下限或上限(分别对应),则可以为None。
get_largest_M_value(model)返回模型中任何约束的最大M值。
get_m_value_src(constraint)已弃用。
返回其转换后的对应项为transformedConstraint的原始Constraint
返回其转换后的组件位于transBlock上的Disjunct对象。
返回与xor_constraint对应的Disjunction
返回srcConstraint的转换版本
属性
CONFIGtransformation_name成员文档
- apply(model, **kwds)
已弃用。
自版本4.3.11323起已弃用:Transformation.apply() 已被弃用。请使用 Transformation.apply_to() 进行原地转换,或使用 Transformation.create_using() 创建新的独立转换模型实例。
- apply_to(model, **kwds)
将转换应用于给定的模型。
- create_using(model, **kwds)
使用此转换创建一个新模型
- get_M_value(constraint)[source]
返回用于转换约束的M值。返回值是一个元组: (lower_M_value, upper_M_value)。如果约束没有下限或上限,则任一值可以为None。
- Parameters:
约束 (Constraint, 必须在转换后的子树中的一个) – 分离条件
- get_M_value_src(constraint)[source]
返回一个元组,指示用于转换约束的M值是如何指定的。(特别是,这可以用于验证哪些BigM后缀实际上对转换是必要的。)
- Return is of the form: ((lower_M_val, lower_M_source, lower_M_key),
(upper_M_val, upper_M_source, upper_M_key))
如果约束没有下限(或上限), 第一个(第二个)元素将是(None, None, None)。请注意,如果 约束的形式是 a <= expr <= b 或是一个等式约束, 并不一定意味着 lower_M 和 upper_M 的来源 是相同的。
如果M值来自一个参数,源是字典本身,键是那个字典中给我们M值的键。
如果M值来自后缀,source是使用的BigM后缀,key是该后缀中的键。
如果转换计算了值,那么源和键都是 None。
- Parameters:
约束 (Constraint, 必须在转换后的子树中的一个) – 分离条件
- get_all_M_values_by_constraint(model)[source]
返回一个字典,将每个约束映射到一个元组: (lower_M_value, upper_M_value),如果约束没有下限或上限(分别),则其中任何一个都可以为None。
- Parameters:
model (一个经过BigM转换的GDP模型)
- get_m_value_src(constraint)[source]
已弃用。
自版本5.7.1起已弃用:get_m_value_src函数已被弃用。如果您需要源信息,请使用get_M_value_src函数;如果您只需要值,请使用get_M_value函数。
- get_src_constraint()
返回其转换后的对应项为transformedConstraint的原始Constraint
- Parameters:
transformedConstraint (Constraint, 必须是其中一个组件)
的 (在relaxedDisjuncts块中的BlockDatas)
block (一种转换)
- get_src_disjunct()
返回转换后的组件位于transBlock上的Disjunct对象。
- Parameters:
transBlock (BlockData 位于 relaxedDisjuncts IndexedBlock 中) – 在转换块上。
- get_src_disjunction()
返回与xor_constraint对应的Disjunction
- Parameters:
xor_constraint (Constraint, 必须是逻辑约束) – (位于转换块上)的某个 Disjunction
- get_transformed_constraints()
返回srcConstraint的转换版本
- Parameters:
srcConstraint (ScalarConstraint 或 ConstraintData, 必须是其中的)
分离 (转换后的子树)