分区分离_转换

(类来自 pyomo.gdp.plugins.partition_disjuncts)

class pyomo.gdp.plugins.partition_disjuncts.PartitionDisjuncts_Transformation[源代码]

基础类:Transformation

通过采用Kronqvist等人2021年提出的“P-split”公式[KMT21],将析取模型转换为等效的析取模型(可能具有更紧密的壳松弛)。在每个析取中,凸和可加性可分离的约束通过引入辅助变量来分割成单独的约束,这些辅助变量上界由分割创建的子表达式。增加分区数量可以导致更紧密的壳松弛,但代价是模型尺寸的增大。

转换将创建一个以“_pyomo_gdp_partition_disjuncts_reformulation”开头的唯一名称的新Block。 该Block将包含新的Disjunct对象,每个对象对应于正在转换的一个Disjunct。这些对象将具有转换后的约束,并且位于新的Disjunctions中,每个Disjunction对应于原始的一个。此外,辅助变量和分区约束将在此Block上声明,以及将原始indicator_vars与转换后的Disjuncts的indicator_vars链接的LogicalConstraints。所有被转换的原始GDP组件将被停用。

参考文献

参见 [KMT21]

Keyword Arguments:
  • targets (target_list, optional) –

    指定要放松的目标或目标列表,可以是单个组件或组件列表。

    如果为None(默认值),则整个模型将被转换。请注意,如果转换是在外部进行的,则目标列表应在克隆模型之前附加到模型上,并且该列表将指定克隆实例上的目标。

  • variable_partitions (_to_dict, optional) –

    指定的变量分区,可以是全局的或每个Disjunction的。

    期望是一组不相交的ComponentSets,其并集是所有Disjunctions中出现的所有变量,或者是从每个活动的Disjunction到一组不相交的ComponentSets的映射,其并集是该Disjunction中出现的变量集。在任何情况下,如果Disjunction中的任何约束仅是部分可加性可分离的,这些集合必须是一个有效的分区,以便这些约束相对于此分区是可加性可分离的。要为未在映射中作为键出现的Disjunctions指定默认分区,请将分区映射到‘None’。

    最后,请注意,在包含部分可加性可分离函数的约束的情况下,要求用户指定变量分区。

  • num_partitions (_to_dict, optional) –

    可以是一个单一的值,这样所有的Disjunctions将变量划分为P个集合,或者是一个Disjunctions到每个活动Disjunction的P值的映射。将None映射到P值将指定如果未明确指定给定Disjunction的值,则使用P的默认值。

    请注意,如果任何约束包含部分可加性可分离函数,则必须在variable_partitions参数中指定具有这些约束的Disjunctions的分区。

  • variable_partitioning_method (_to_dict, default=) –

    一个函数,它接受一个Disjunction对象和一个数字P,并返回一个有效的变量分区,这些变量出现在Disjunction中,分为P个分区。

    请注意,如果您使用此方法来计算分区,则必须为‘P’提供一个值。

    请注意,如果任何约束包含部分可加性可分离函数,则无法自动计算Disjunctions的分区。请在variable_partitions参数中为具有这些约束的Disjunctions指定分区。

  • assume_fixed_vars_permanent (bool, default=False) –

    如果为True,即使固定变量后来被解除固定,转换也会创建一个正确的模型。也就是说,边界将基于固定变量的边界计算,而不是它们的值。然而,如果固定变量永远不会被解除固定,可能会得到一个更紧密的模型,并且固定变量不需要有边界。

    请注意,这对固定的BooleanVars没有影响,包括Disjuncts的指示变量。无论这些变量是否保持固定,转换始终是正确的。

  • compute_bounds_method (default=) –

    用于计算表达式边界的回调函数,以便限制由转换创建的辅助变量的边界。

    一些预实现的选项包括

    • compute_fbbt_bounds(默认值),以及

    • compute_optimal_bounds

    或者你可以编写自己的回调函数,该函数接受一个Expression对象、一个包含原始实例的变量和全局约束的模型,以及一个配置好的求解器,并返回一个元组(LB, UB),其中如果找不到有效的边界,则任一元素可以为None。

  • compute_bounds_solver (可选) –

    配置的求解器对象,用于compute_bounds_method。

    特别是,如果compute_bounds_method是‘compute_optimal_bounds’, 这将用于解决子问题,因此如果任何Disjunctions包含非线性约束,则需要处理非凸问题。

__init__()[源代码]

方法

__init__()

apply(model, **kwds)

已弃用。

apply_to(model, **kwds)

将转换应用于给定的模型。

create_using(model, **kwds)

使用此转换创建一个新模型

属性

CONFIG

成员文档

apply(model, **kwds)

已弃用。

自版本4.3.11323起已弃用:Transformation.apply() 已被弃用。请使用 Transformation.apply_to() 进行原地转换,或使用 Transformation.create_using() 创建新的独立转换模型实例。

apply_to(model, **kwds)

将转换应用于给定的模型。

create_using(model, **kwds)

使用此转换创建一个新模型