分段函数

(类来自 pyomo.core.base.piecewise)

class pyomo.core.base.piecewise.Piecewise(*args, **kwds)[source]

基础类: Block

向Pyomo模型添加分段约束,用于形式为y = f(x)的函数。

示例

model.const = Piecewise(index_1,...,index_n,yvar,xvar,**Keywords)
model.const = Piecewise(yvar,xvar,**Keywords)
Parameters:
  • pw_pts (dict) – 一个列表的字典(键是索引集)或单个列表(用于非索引情况或当所有索引使用相同的断点集时),定义分段线性函数的域断点集。始终需要

  • pw_repn (str) –

    指示要使用的分段表示类型。这可能对求解器性能产生重大影响。选项:(默认‘SOS2’)

    • SOS2: +

      使用sos2约束的标准表示

    • BIGM_BIN:

      使用二进制变量的BigM约束。理论上最紧的M值会自动确定。

    • BIGM_SOS1:

      使用sos1变量的BigM约束。理论上最紧的M值会自动确定。

    • DCC: *+

      分解凸组合模型

    • DLOG: *+

      对数分解凸组合模型

    • CC: *+

      凸组合模型

    • LOG: *+

      对数分支凸组合

    • MC: *

      多选择模型

    • INC: *+

      增量(delta)方法

    注意

    +: 支持阶跃函数

    *: 来自“不可分离分段线性优化的混合整数模型:统一框架和扩展”(Vielma, Nemhauser 2008)

    另请参阅

    请参阅可选的‘force_pw’关键字。

  • pw_constr_type (str) –

    表示分段函数的约束类型。选项:

    • UB - y 变量由分段函数上界约束

    • LB - y 变量由分段函数下界约束

    • EQ - y 变量等于分段函数

  • f_rule (f(model,i,j,...,x), {}, [], ()) –

    一个返回数值的对象,该数值对应于每个分段域点的范围值。对于函数,第一个参数必须是Pyomo模型。最后一个参数是函数评估的域值(不是Pyomo变量)。中间参数是分段组件的相应索引(如果有)。否则,该对象可以是列表/元组的字典(键与索引集相同)或单个列表/元组(当不使用索引集或所有索引使用相同的分段函数时)。示例:

    # 一个随索引变化的函数
    def f(model,j,x):
        if (j == 2):
            return x**2 + 1.0
        else:
            return x**2 + 5.0
    
    # 一个非线性函数
    f = lambda model, x: return exp(x) + value(model.p)
    # (其中 model.p 是一个 Pyomo 参数)
    
    # 一个阶跃函数
    f = [0,0,1,1,2,2]
    

  • force_pw (bool) – 使用给定的函数规则和pw_pts,实现了对凸性/凹性的检查。如果(1)函数是凸的并且分段约束是下界,或者(2)函数是凹的并且分段约束是上界,那么分段约束将被线性约束替代。设置‘force_pw=True’将强制使用原始的分段约束,即使这两种情况之一适用。

  • warning_tol (float, default=1e-8) – 为了帮助调试,当连续的分段斜率彼此在 范围内时,会打印警告。

  • warn_domain_coverage (bool, default=True) – 当域变量的可行区域未被分段断点完全覆盖时,打印警告。

  • unbounded_domain_var (bool, default=False) –

    允许使用无界或部分有界的Pyomo Var作为域变量。

    注意

    这并不意味着会构建无界的分段。最外层的分段断点将在每个索引处限制域变量。然而,Var属性.lb和.ub不会被修改。

__init__(*args, **kwds)[source]

构造函数

方法

__init__(*args, **kwds)

构造函数

activate()

将活动属性设置为True

add(index[, _is_indexed])

clear()

清除此组件中的数据

clear_suffix_value(suffix_or_name[, expand])

清除此组件数据的后缀值

cname(*args, **kwds)

已弃用。

construct(*args, **kwds)

在数据加载后调用add的快速技巧。

deactivate()

将活动属性设置为False

dim()

返回索引的维度

display([文件名, 输出流, 前缀])

在块中显示值

get_suffix_value(suffix_or_name[, default])

获取此组件数据的后缀值

getname([fully_qualified, name_buffer, ...])

返回与此对象关联的组件名称。

id_index_map()

返回所有ComponentData实例的字典id->索引。

index_set()

返回索引集

is_component_type()

如果此类是Pyomo组件,则返回True

is_constructed()

如果这个类已经被构造,则返回True

is_expression_type([expression_system])

如果此数值是一个表达式,则返回 True

is_indexed()

如果此组件已索引,则返回true

is_logical_type()

如果此类是Pyomo布尔对象,则返回True。

is_named_expression_type()

如果此数值是一个命名表达式,则返回 True

is_numeric_type()

如果此类是Pyomo数值对象,则返回True

is_parameter_type()

除非此类是参数对象,否则返回 False

is_reference()

如果此组件是引用,则返回True,其中“引用”被解释为任何不拥有自己数据的组件。

is_variable_type()

除非此类是变量对象,否则返回 False

items([sort, ordered])

返回一个包含(index, data)组件数据元组的迭代器

iteritems()

已弃用。

iterkeys()

已弃用。

itervalues()

已弃用。

keys([sort, ordered])

返回组件数据键的迭代器

model()

返回与此对象关联的模型。

parent_block()

返回此对象的父对象。

parent_component()

返回与此对象关联的组件。

pprint([ostream, verbose, prefix])

打印组件信息

reconstruct([data])

已移除:reconstruct() 在 Pyomo 6.0 中被移除。

register_private_data_initializer(initializer)

root_block()

返回 self.model()

set_suffix_value(suffix_or_name, value[, expand])

设置此组件数据的后缀值

set_value(value)

设置标量组件的值。

to_dense_data()

待办事项

type()

已弃用。

valid_model_component()

如果这可以用作模型组件,则返回True。

values([sort, ordered])

返回组件数据对象的迭代器

属性

active

返回活动属性

ctype

返回此组件的类类型

local_name

仅在直接父容器的上下文中获取组件名称。

name

获取完全限定的组件名称。

成员文档

activate()

将活动属性设置为True

clear()

清除此组件中的数据

clear_suffix_value(suffix_or_name, expand=True)

清除此组件数据的后缀值

cname(*args, **kwds)

已弃用。

自版本5.0起已弃用:cname() 方法已重命名为 getname()。 获取组件名称的首选方法是使用 .name 属性,该属性返回完全限定的组件名称。 .local_name 属性将仅在直接父容器的上下文中返回组件名称。

construct(*args, **kwds)[source]

在数据加载后调用add的快速技巧。

deactivate()

将活动属性设置为False

dim()

返回索引的维度

display(filename=None, ostream=None, prefix='')

在块中显示值

get_suffix_value(suffix_or_name, default=None)

获取此组件数据的后缀值

getname(fully_qualified=False, name_buffer=None, relative_to=None)

返回与此对象关联的组件名称。

Parameters:
  • fully_qualified (bool) – 从嵌套的块名称生成全名

  • relative_to (Block) – 生成相对于指定块的完全限定名称。

id_index_map()

返回所有ComponentData实例的字典id->索引。

index_set()

返回索引集

is_component_type()

如果此类是Pyomo组件,则返回True

is_constructed()

如果这个类已经被构造,则返回True

is_expression_type(expression_system=None)

如果此数值是一个表达式,则返回 True

is_indexed()

如果此组件已索引,则返回true

is_logical_type()

如果此类是Pyomo布尔对象,则返回True。

布尔对象包括常量、变量或逻辑表达式。

is_named_expression_type()

如果此数值是一个命名表达式,则返回 True

is_numeric_type()

如果此类是Pyomo数值对象,则返回True

is_parameter_type()

除非此类是参数对象,否则返回 False

is_reference()

如果此组件是引用,则返回True,其中“引用”被解释为不拥有自己数据的任何组件。

is_variable_type()

除非此类是变量对象,否则返回 False

items(sort=<SortComponents.UNSORTED: 0>, ordered=NOTSET)

返回一个包含(index, data)组件数据元组的迭代器

Parameters:
  • sort (boolSortComponents) – 以指定的排序顺序迭代声明的组件项。有关有效选项和描述,请参见 SortComponents

  • ordered (bool) – 已弃用:请使用 sort=SortComponents.ORDERED_INDICES。 如果为 True,则项目将以确定性顺序返回 (使用底层集合的 ordered_iter()

iteritems()

已弃用。

从字典返回一个包含(索引,数据)元组的列表

自版本6.0起已弃用:iteritems方法已被弃用。请使用dict.items()。

iterkeys()

已弃用。

返回字典中的键列表

自版本6.0起已弃用:iterkeys方法已被弃用。请使用dict.keys()。

itervalues()

已弃用。

返回字典中组件数据对象的列表

自版本6.0起已弃用:itervalues方法已被弃用。请使用dict.values()。

keys(sort=<SortComponents.UNSORTED: 0>, ordered=NOTSET)

返回组件数据键的迭代器

此方法设置此IndexedComponent容器内组件数据对象的顺序。为了保持一致性,__init__()values()items()都利用此方法以确保一致的顺序。

Parameters:
  • sort (boolSortComponents) – 以指定的排序顺序迭代声明的组件键。有关有效选项和描述,请参见 SortComponents

  • ordered (bool) – 已弃用:请使用 sort=SortComponents.ORDERED_INDICES。 如果为 True,则键将以确定性顺序返回 (使用底层集合的 ordered_iter())。

model()

返回与此对象关联的模型。

parent_block()

返回此对象的父对象。

parent_component()

返回与此对象关联的组件。

pprint(ostream=None, verbose=False, prefix='')

打印组件信息

reconstruct(data=None)

已移除:reconstruct() 在 Pyomo 6.0 中被移除。

重新构建模型组件是脆弱的,并且不能正确更新在其他组件或上下文中使用的组件实例(这对于Var、Param和Set尤其成问题)。希望重现reconstruct()旧行为的用户,如果愿意操作非公开接口,并且愿意花时间验证他们的模型是否正确执行,可以通过以下方式近似实现reconstruct的旧行为:

component.clear() component._constructed = False component.construct()

root_block()

返回 self.model()

set_suffix_value(suffix_or_name, value, expand=True)

设置此组件数据的后缀值

set_value(value)

设置标量组件的值。

to_dense_data()

待办事项

type()

已弃用。

返回此组件的类类型

自版本5.7起已弃用:Component.type() 方法已被 .ctype 属性取代。

valid_model_component()

如果这可以用作模型组件,则返回True。

values(sort=<SortComponents.UNSORTED: 0>, ordered=NOTSET)

返回组件数据对象的迭代器

Parameters:
  • sort (boolSortComponents) – 以指定的排序顺序迭代声明的组件值。有关有效选项和描述,请参见 SortComponents

  • ordered (bool) – 已弃用:请使用 sort=SortComponents.ORDERED_INDICES。 如果为 True,则值将以确定性顺序返回 (使用底层集合的 ordered_iter()

property active

返回活动属性

property ctype

返回此组件的类类型

property local_name

仅在直接父容器的上下文中获取组件名称。

property name

获取完全限定的组件名称。