Python回调函数

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

class pyomo.core.base.external.PythonCallbackFunction(*args, **kwargs)[source]

基础类:ExternalFunction

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

构造对外部函数的引用。

有两种基本接口由 ExternalFunction支持:Python回调函数和AMPL外部函数。

Python回调函数 (PythonCallbackFunction 接口)

Python回调函数可以通过以下两种方式指定:

  1. FGH 接口:

一个与签名匹配的单个外部函数调用 evaluate_fgh() 方法。

  1. 独立函数:

一到三个可以评估函数值、函数相对于其输入的梯度[偏导数]以及函数的Hessian[偏二阶导数]的函数。function接口期望一个符合原型的函数:

def function(*args): float

gradienthessian 接口期望函数符合以下原型:

def gradient_or_hessian(args, fixed=None): List[float]

其中 args 是函数参数的元组,而 fixed 要么是 None,要么是一个与 args 长度相等的值列表,指示哪些参数当前是固定的(True)或可变的(False)。

ASL 函数库 (AMPLExternalFunction 接口)

Pyomo 还可以调用作为 AMPL 外部函数库一部分编译的函数(参见 用户定义函数 部分 在 将求解器连接到 AMPL 报告中)。这些函数的链接通过创建一个 ExternalFunction 并将编译的库名称(或路径)传递给 library 关键字,将函数名称传递给 function 关键字来声明。

方法

__init__(*args, **kwargs)

构造对外部函数的引用。

clear_suffix_value(suffix_or_name[, expand])

清除此组件数据的后缀值

cname(*args, **kwds)

已弃用。

construct([data])

用于构建组件的API定义

display([ostream, verbose, prefix])

evaluate(args)

返回给定指定参数的函数值

evaluate_fgh(args[, fixed, fgh])

评估给定指定参数的函数和梯度

get_arg_units()

返回此ExternalFunctions参数的单元

get_suffix_value(suffix_or_name[, default])

获取此组件数据的后缀值

get_units()

返回此ExternalFunction的单位

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

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

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

model()

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

parent_block()

返回此对象的父对象。

parent_component()

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

pprint([ostream, verbose, prefix])

打印组件信息

reconstruct([data])

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

register_instance(instance)

root_block()

返回 self.model()

set_suffix_value(suffix_or_name, value[, expand])

设置此组件数据的后缀值

type()

已弃用。

valid_model_component()

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

属性

active

返回活动属性

ctype

返回此组件的类类型

global_id_to_fid

global_registry

local_name

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

name

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

成员文档

clear_suffix_value(suffix_or_name, expand=True)

清除此组件数据的后缀值

cname(*args, **kwds)

已弃用。

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

construct(data=None)

用于构建组件的API定义

evaluate(args)

返回给定指定参数的函数值

Parameters:

args (Iterable) – 包含传递给外部函数的参数的可迭代对象。非原生类型的元素将使用value()函数转换为原生值。

Returns:

函数在args处求值的返回值

Return type:

float

evaluate_fgh(args, fixed=None, fgh=2)

评估给定指定参数的函数和梯度

这将根据指定的参数评估函数,返回一个三元组(函数值 [f],一阶偏导数列表 [g],以及Hessian矩阵的上三角部分 [h])。

Parameters:
  • args (Iterable) – 包含要传递给外部函数的参数的可迭代对象。非原生类型的元素将使用value()函数转换为原生值。

  • fixed (可选[列表[bool]]) – 指示相应参数值是否固定的值列表。任何固定的索引保证返回0作为一阶和二阶导数,无论外部函数计算的是什么。

  • fgh ({0, 1, 2}) –

    返回哪些评估结果:

    • 0: 仅返回函数评估

    • 1: 返回函数和一阶导数

    • 2: 返回函数、一阶导数和海森矩阵

    未请求的返回值将为 None

Returns:

  • f (float) – 函数在 args 处求值的返回值

  • g (List[float] or None) – 一阶偏导数的列表

  • h (List[float] or None) – Hessian 矩阵(二阶偏导数)的上三角部分,按列存储。元素 \(H_{i,j}\)(其中 \(0 <= i <= j < N\))使用 \(h[i + j*(j + 1)/2] == H_{i,j}\) 进行映射。

get_arg_units()

返回此ExternalFunctions参数的单元

get_suffix_value(suffix_or_name, default=None)

获取此组件数据的后缀值

get_units()

返回此ExternalFunction的单位

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

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

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

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

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

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)

设置此组件数据的后缀值

type()

已弃用。

返回此组件的类类型

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

valid_model_component()

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

property active

返回活动属性

property ctype

返回此组件的类类型

property local_name

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

property name

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