FLATTEN_CROSS_PRODUCT
(数据来自 pyomo.core.base.set)
- pyomo.core.base.set.FLATTEN_CROSS_PRODUCT = True
设置对象
Pyomo Set 对象设计为与 Python set 对象“API兼容”。然而,并非所有 Set 对象都实现了完整的 set API(例如,只有有限离散的 Set 支持 add())。
所有集合都实现了以下API之一:
class SetData(ComponentData) (所有AML集合的基类)
class _FiniteSetMixin(object) (纯虚拟接口,增加了对离散/可迭代集合的支持)
class _OrderedSetMixin(object) (纯虚接口,增加了对有序集合的支持)
这与Python的集合对象有些不同。首先,最低级别(非抽象)的Data对象支持无限集合;也就是说,包含无限数量值的集合(这包括有界连续范围以及无界离散范围)。由于有无限数量的值,因此不支持迭代。基类还实现了所有Python集合操作。请注意,SetData不实现len(),因为Python要求len()返回一个正整数。
有限集合增加了迭代功能并支持len()。此外,它们支持通过三种方法访问成员:data()将成员作为元组返回(按照内部存储顺序),可能不是确定性的。ordered_data()返回成员,并保证以确定性顺序返回(对于插入顺序集合,取决于填充集合的脚本的确定性)。最后,sorted_data()以排序顺序返回成员(保证确定性,取决于<和==的实现)。
..TODO: 这三个成员是否都应该返回生成器?这将进一步改变data()的实现,但可能会让使用者以更高效的方式访问这些成员。
有序集合增加了对ord()和__getitem__的支持,以及用于遍历集合成员的first、last、next和prev方法。
请注意,基础API都是通过Mixin类声明(并在可能的情况下实现)的。