求和-积算法

partial_unroll(factors, eliminate=frozenset({}), plate_to_step={})[source]

对带板(plated)的因子图执行部分展开(unrolling),转换为标准因子图。仅支持 history={0, 1} 的板(plates)。

对于板(history=0),展开操作会将 _{i} 后缀附加到板中索引 i 的变量名上 (例如,对于 i=0,"x"->”x_0”)。对于马尔可夫维度(history=1),展开操作会将后缀 var_prev 重命名为 var_{i},并将 var_curr 重命名为 var_{i+1},对应于索引 i (例如,对于 i=0,"x_prev"->”x_0”,"x_curr"->”x_1”)。假设马尔可夫变量的名称遵循 var_suffix 格式,特别是对于初始因子使用 var_0 (例如,对于 history=1,("x_0", "x_prev", "x_curr"))。

参数
  • factors (tuple or list) – funsors 的集合。

  • eliminate (frozenset) – 要展开的自由变量集合,包括求和变量和乘积变量。

  • plate_to_step (dict) – 将马尔可夫维度映射到 step 集合的字典,这些集合包含有序的马尔可夫变量名序列 (例如,{"time": frozenset({("x_0", "x_prev", "x_curr")})})。板(plates)传递一个空的 step

返回值

部分展开的 Funsors 列表,部分展开的变量名的 frozenset,以及剩余板(plates)的 frozenset。

partial_sum_product(sum_op, prod_op, factors, eliminate=frozenset({}), plates=frozenset({}), pedantic=False, pow_op=None, plate_to_scale=None)[source]

对因子集合执行部分求和-积收缩(contraction)。

返回值

部分收缩的 Funsors 列表。

返回类型

list

dynamic_partial_sum_product(sum_op, prod_op, factors, eliminate=frozenset({}), plate_to_step={})[source]

是张量变量消除算法 funsor.sum_product.partial_sum_product() 的推广,它除了处理板(plate)维度外,还能处理高阶马尔可夫维度。转移因子中的马尔可夫维度可以使用 funsor.sum_product.sarkka_bilmes_product() 中的并行扫描算法高效地消除。然后将结果因子与初始因子结合,并消除最终状态。因此,当马尔可夫维度被消除时,factors 必须包含初始因子和转移因子。

参数
  • sum_op (AssociativeOp) – 半环求和操作。

  • prod_op (AssociativeOp) – 半环乘积操作。

  • factors (tuple or list) – funsors 的集合。

  • eliminate (frozenset) – 要消除的自由变量集合,包括求和变量和乘积变量。

  • plate_to_step (dict) – 将马尔可夫维度映射到 step 集合的字典,这些集合包含有序的马尔可夫变量名序列 (例如,{"time": frozenset({("x_0", "x_prev", "x_curr")})})。板(plates)传递一个空的 step

返回值

部分收缩的 Funsors 列表。

返回类型

list

modified_partial_sum_product(sum_op, prod_op, factors, eliminate=frozenset({}), plate_to_step={})[source]

是张量变量消除算法 funsor.sum_product.partial_sum_product() 的推广,它除了处理板(plate)维度外,还能处理马尔可夫维度。转移因子中的马尔可夫维度可以使用 funsor.sum_product.sequential_sum_product() 中的并行扫描算法高效地消除。然后将结果因子与初始因子结合,并消除最终状态。因此,当马尔可夫维度被消除时,factors 必须包含成对的初始因子和转移因子。

参数
  • sum_op (AssociativeOp) – 半环求和操作。

  • prod_op (AssociativeOp) – 半环乘积操作。

  • factors (tuple or list) – funsors 的集合。

  • eliminate (frozenset) – 要消除的自由变量集合,包括求和变量和乘积变量。

  • plate_to_step (dict) – 将马尔可夫维度映射到 step 集合的字典,这些集合包含有序的马尔可夫变量名序列 (例如,{"time": frozenset({("x_0", "x_prev", "x_curr")})})。板(plates)传递一个空的 step

返回值

部分收缩的 Funsors 列表。

返回类型

list

sum_product(sum_op, prod_op, factors, eliminate=frozenset({}), plates=frozenset({}), pedantic=False, pow_op=None, plate_to_scale=None)[source]

对因子集合执行求和-积收缩。

返回值

单个收缩后的 Funsor。

返回类型

Funsor

naive_sequential_sum_product(sum_op, prod_op, trans, time, step)[source]
sequential_sum_product(sum_op, prod_op, trans, time, step)[source]

对于具有维度 timeprevcurr 的 funsor trans,计算一个等价于以下形式的递归:

tail_time = 1 + arange("time", trans.inputs["time"].size - 1)
tail = sequential_sum_product(sum_op, prod_op,
                              trans(time=tail_time),
                              time, {"prev": "curr"})
return prod_op(trans(time=0)(curr="drop"), tail(prev="drop"))            .reduce(sum_op, "drop")

但通过并行方式高效计算,时间复杂度为 O(log(time))。

参数
  • sum_op (AssociativeOp) – 半环求和操作。

  • prod_op (AssociativeOp) – 半环乘积操作。

  • trans (Funsor) – 转移 funsor。

  • time (str or Variable) – 时间输入维度。

  • step (dict) – 将前一个变量映射到当前变量的字典。这可以包含多对 previous->current 变量名。

mixed_sequential_sum_product(sum_op, prod_op, trans, time, step, num_segments=None)[source]

对于具有维度 timeprevcurr 的 funsor trans,计算一个等价于以下形式的递归:

tail_time = 1 + arange("time", trans.inputs["time"].size - 1)
tail = sequential_sum_product(sum_op, prod_op,
                              trans(time=tail_time),
                              time, {"prev": "curr"})
return prod_op(trans(time=0)(curr="drop"), tail(prev="drop"))            .reduce(sum_op, "drop")

通过混合并行和串行扫描算法,处理 num_segments 个段。

参数
  • sum_op (AssociativeOp) – 半环求和操作。

  • prod_op (AssociativeOp) – 半环乘积操作。

  • trans (Funsor) – 转移 funsor。

  • time (str or Variable) – 时间输入维度。

  • step (dict) – 将前一个变量映射到当前变量的字典。这可以包含多对 previous->current 变量名。

  • num_segments (int) – 第一阶段的段数

naive_sarkka_bilmes_product(sum_op, prod_op, trans, time_var, global_vars=frozenset({}))[source]
sarkka_bilmes_product(sum_op, prod_op, trans, time_var, global_vars=frozenset({}), num_periods=1)[source]
class MarkovProductMeta(name, bases, dct)[source]

基类: FunsorMeta

step 转换为元组并填充默认 step_names 的包装器。

class MarkovProduct(sum_op, prod_op, trans, time, step, step_names=None)[source]

基类: Funsor

sequential_sum_product() 的惰性表示。

参数
  • sum_op (AssociativeOp) – 边缘化操作。

  • prod_op (AssociativeOp) – 贝叶斯融合操作。

  • trans (Funsor) – 一系列转移因子,通常沿 time 输入变化。

  • time (str or Variable) – 时间维度。

  • step (dict) – 将 trans 的“previous”输入映射到 trans 的“current”输入的字符串到字符串映射。

  • step_names (dict) – 可选,供 alpha 转换内部使用。

eager_subs(subs)[source]
eager_markov_product(sum_op, prod_op, trans, time, step, step_names)[source]