选择策略#

class pygmo.s_policy(udsp=select_best())#

选择策略。

选择策略规定了在archipelago内迁移期间,如何从island中选择候选迁移者。

遵循与问题algorithm等相同的模式,s_policy提供了一个通用接口,用于用户定义的选择策略(简称UDSP)。UDSP是提供一组特定方法的类,这些方法实现了选择策略的逻辑。一旦定义并实例化,UDSP就可以用来构造这个类的实例,s_policy,它为选择策略提供了一个通用接口,供island使用。

每个UDSP必须至少实现以下方法:

def select(self, inds, nx, nix, nobj, nec, nic, tol):
  ...

select() 方法接受以下参数作为输入:

  • 一组个体 inds,

  • 一组描述problem个体所涉及属性的参数:

    • 总维度 nx,

    • 积分维度 nix,

    • 目标数量 nobj,

    • 等式约束的数量 nec,

    • 不等式约束的数量 nic,

    • 问题的约束容差 tol,

它在输出中生成另一组个体,这些个体是通过在inds中选择个体(遵循UDSP建立的某些逻辑)而产生的。inds的个体集和select()方法的返回值表示为包含以下3个元素的元组:

  • 一个一维的NumPy数组,包含个体ID(表示为64位无符号整数),

  • 一个二维的NumPy数组,包含决策向量(即每个个体的决策向量,按行优先顺序存储),

  • 一个二维NumPy数组的适应度向量(即每个个体的适应度向量,按行优先顺序存储)。

可以在UDSP中实现其他可选方法:

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

有关如何使用UDSP中的可选方法的详细信息,请参阅此类中相应方法的文档,这些方法由s_policy使用。

选择策略用于涉及群岛迁移的异步操作中,因此它们需要提供一定程度的线程安全性。具体来说,UDSP的select()方法可能会与UDSP接口的任何其他方法同时调用。用户定义的选择策略的作者需要确保满足这一安全要求。

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

Parameters

udsp – 用户定义的选择策略,可以是C++或Python

Raises
  • NotImplementedError – 如果 udsp 没有实现上述的强制方法

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

__init__()#
__repr__()#

返回 repr(self)。

extract(t)#

提取用户定义的选择策略。

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

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

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

  • 否则,None 将被返回。

Parameters

t (type) – 要提取的用户定义选择策略的类型

Returns

对内部用户定义的选择策略的引用,如果提取失败则为None

Raises

TypeError – 如果 t 不是一个 type

get_extra_info()#

选择策略的额外信息。

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

Returns

关于UDSP的额外信息

Return type

str

Raises

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

get_name()#

选择策略的名称。

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

Returns

选择策略的名称

Return type

str

is_(t)#

检查用户定义的选择策略的类型。

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

Parameters

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

Returns

UDSP 是否为 t 类型

Return type

bool

Raises

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

select(inds, nx, nix, nobj, nec, nic, tol)#

从一组中选择个体。

此方法将调用UDSP的select()方法。 给定一组个体inds,UDSP的select()方法 预计将返回从inds中选择的一组新个体。 此方法的其他参数描述了inds中个体所引用的problem的属性。

个体集合 inds 和该方法的返回值表示为包含以下内容的3元素元组:

  • 一个一维的NumPy数组,包含个体ID(表示为64位无符号整数),

  • 一个二维的NumPy数组,包含决策向量(即每个个体的决策向量,按行优先顺序存储),

  • 一个二维NumPy数组的适应度向量(即每个个体的适应度向量,按行优先顺序存储)。

除了调用UDSP的select()方法外,此函数还将对输入参数和UDSP产生的输出执行各种健全性检查。

Parameters
  • inds (tuple) – 原始个体组

  • nx (int) – 问题的维度 inds 所指的

  • nix (int) – 问题inds所涉及的整数维度

  • nobj (int) – 问题inds所涉及的目标数量

  • nec (int) – 问题中inds所涉及的等式约束的数量

  • nic (int) – 问题的不等式约束数量 inds 指的是

  • tol (数组类对象) – 问题约束容差的向量,inds 所指的是

Returns

一组新的个体,由选择inds中的个体产生。

Return type

tuple

Raises
  • RuntimeError – 如果由pythonic UDSP返回的对象不可迭代,或者它是一个元素数量不恰好为3的可迭代对象,或者如果UDSP的select()方法的调用引发异常

  • ValueError – 如果 inds 或返回值与问题属性不一致, 或者 inds 或返回值中的ID、决策和适应度向量大小不一致, 或者问题属性无效(例如,nobj 为零,nix > nx,等等)

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