批量适应度评估器#

class pygmo.bfe(udbfe=default_bfe())#

批量适应度评估器。

该类实现了批量模式下决策向量的评估。也就是说,虽然pygmo.problem提供了通过pygmo.problem.fitness()方法评估单个决策向量的手段,但bfe批量适应度评估器的缩写)使得problem能够评估一组(或批量)决策向量的适应度,可能以并行/向量化的方式进行。

pygmo.problem.batch_fitness()方法一起, bfe是pagmo提供的一种机制, 用于在比archipelagoisland类更细的级别上实现并行性。 然而,虽然pygmo.problem.batch_fitness()方法必须在每个UDP基础上实现, bfe为任何问题提供了通用的批量适应度评估能力, 因此它也可以用于未实现pygmo.problem.batch_fitness()方法的UDP。

问题algorithm以及许多其他pagmo类一样,bfe是一个通用容器,它在内部存储了一个用户定义的批量适应度评估器(简称UDBFE),该评估器实际上以批量模式实现适应度评估。用户可以自由选择使用pagmo提供的评估器之一,或者编写自己的UDBFE。

每个UDBFE必须是一个可调用的(即一个函数或一个带有调用运算符的类),其签名等同于

def __call__(self, prob, dvs):
  ...

UDBFEs 接收一个problem和一批存储在类似数组对象中的决策向量作为输入,并返回一个包含与输入决策向量批次对应的适应度向量的NumPy数组(由输入问题评估并连续存储)。

UDBFEs 还可以实现以下(可选的)方法:

def get_name(self):
  ...
def get_extra_info(self):
  ...

有关UDBFE中可选方法如何被bfe使用的详细信息,请参阅本类中相应方法的文档。

这个类是C++类pagmo::bfe的Python对应类。

Parameters

udbfe – 用户定义的批量适应度评估器,可以是C++或Python

Raises
  • NotImplementedError – 如果 udbfe 没有实现上述详细说明的强制方法

  • 未指定 – 在构造过程中调用的UDBFE方法抛出的任何异常,UDBFE的深拷贝,底层C++类的构造函数,或C++和Python之间的交互失败(例如,类型转换错误,函数签名不匹配等)

__call__(prob, dvs)#

调用操作符。

调用操作符将调用内部的UDBFE实例,以批处理模式使用输入的problem或UDP prob来评估存储在dvs中的决策向量,并返回相应的适应度向量。

输入决策向量必须连续存储在dvs中:对于维度为\(n\)的问题,dvs中的第一个决策向量占据索引范围\(\left[0, n\right)\),第二个决策向量占据范围\(\left[n, 2n\right)\),依此类推。同样,输出适应度向量必须在返回值中连续布局:对于适应度维度为\(f\)的问题,第一个适应度向量将占据索引范围\(\left[0, f\right)\),第二个适应度向量将占据范围\(\left[f, 2f\right)\),依此类推。

此函数将对dvs和返回值执行各种健全性检查。

Parameters
  • prob (problem 或 UDP) – 输入问题

  • dvs (数组类对象) – 将在批处理模式下评估的输入决策向量

Returns

对应于dvs中输入决策向量的适应度向量

Return type

一维NumPy浮点数数组

Raises
  • ValueError – 如果 dvs 或 UDBFE 生成的返回值与输入问题 prob 不兼容

  • 未指定 – 由UDBFE调用引发的任何异常,或由C++和Python之间的交互失败引发的异常(例如,类型转换错误、函数签名不匹配等)

__init__()#
__repr__()#

返回 repr(self)。

extract(t)#

提取用户定义的批量适应度评估器(bfe)。

此方法允许提取存储在此bfe实例中的用户定义的bfe(UDBFE)的引用。此函数的行为取决于t的值(必须是一个type)以及内部UDBFE的类型:

  • 如果UDBFE的类型是t,那么将返回对UDBFE的引用 (这反映了相应的C++方法的行为 pagmo::bfe::extract()),

  • 如果 tobject 并且 UDBFE 是一个 Python 对象(而不是一个 暴露的C++ bfe),那么将返回对 UDBFE 的引用(这允许在不了解其类型的情况下提取 Python UDBFE),

  • 否则,None 将被返回。

Parameters

t (type) – 要提取的用户定义的bfe的类型

Returns

对内部用户定义的bfe的引用,如果提取失败则为None

Raises

TypeError – 如果 t 不是一个 type

示例

>>> import pygmo as pg
>>> a1 = pg.bfe(pg.thread_bfe())
>>> a1.extract(pg.thread_bfe) 
<pygmo.core.thread_bfe at 0x7f8e4792b670>
>>> a1.extract(pg.member_bfe) is None
True
>>> def custom_bfe(p, dvs): pass
>>> a2 = pg.bfe(custom_bfe)
>>> a2.extract(object) 
<__main__.custom_bfe at 0x7f8e478c04e0>
>>> a2.extract(custom_bfe) 
<__main__.custom_bfe at 0x7f8e478c04e0>
>>> a2.extract(pg.thread_bfe) is None
True
get_extra_info()#

Bfe的额外信息。

如果UDBFE提供了一个get_extra_info()方法,那么这个方法将返回其get_extra_info()方法的输出。否则,将返回一个空字符串。

Returns

关于UDBFE的额外信息

Return type

str

Raises

未指定 – 由UDBFE的get_extra_info()方法抛出的任何异常

get_name()#

Bfe的名称。

如果UDBFE提供了get_name()方法,那么此方法将返回其get_name()方法的输出。 否则,将返回基于UDBFE类型的实现定义的名称。

Returns

bfe的名称

Return type

str

get_thread_safety()#

Bfe的线程安全级别。

此方法将返回一个枚举值 pygmo.thread_safety,该值指示 UDBFE 的线程安全级别。与 C++ 不同,在 Python 中无法在 UDBFE 中重新实现此方法。也就是说,对于 C++ 的 UDBFE,返回值将是 UDBFE 的 get_thread_safety() 方法返回的值。对于 Python 的 UDBFE,返回值将无条件为 none

Returns

UDBFE的线程安全级别

Return type

一个值为 pygmo.thread_safety

is_(t)#

检查用户定义的批量适应度评估器的类型。

如果extract(t)返回None,则此方法返回False,否则返回True

Parameters

t (type) – 将与UDBFE的类型进行比较的类型

Returns

UDBFE 是否为 t 类型

Return type

bool

Raises

未指定 – 由extract()抛出的任何异常