替换策略#

class pygmo.r_policy(udrp=fair_replace())#

替换策略。

替换策略规定了在archipelago内的迁移过程中,一组移民如何替换现有population中的个体。换句话说,替换策略的任务是从原始个体集合和一组候选移民中生成新的个体集合。

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

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

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

replace() 方法接受以下参数:

  • 一组个体 inds,

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

    • 总维度 nx,

    • 积分维度 nix,

    • 目标数量 nobj,

    • 等式约束的数量 nec,

    • 不等式约束的数量 nic,

    • 问题的约束容差 tol,

  • 一组移民 mig,

它在输出中生成另一组个体,这些个体是通过用mig中的个体替换inds中的个体(遵循UDRP建立的某些逻辑)得到的。个体集indsmig,以及replace()方法的返回值表示为包含以下3个元素的元组:

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

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

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

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

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

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

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

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

Parameters

udrp – 用户定义的替换策略,可以是C++或Python

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

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

__init__()#
__repr__()#

返回 repr(self)。

extract(t)#

提取用户定义的替换策略。

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

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

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

  • 否则,None 将被返回。

Parameters

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

Returns

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

Raises

TypeError – 如果 t 不是一个 type

get_extra_info()#

替换策略的额外信息。

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

Returns

关于UDRP的额外信息

Return type

str

Raises

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

get_name()#

替换策略的名称。

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

Returns

替换策略的名称

Return type

str

is_(t)#

检查用户定义的替换策略的类型。

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

Parameters

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

Returns

UDRP 是否为 t 类型

Return type

bool

Raises

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

replace(inds, nx, nix, nobj, nec, nic, tol, mig)#

用来自另一个群体的移民替换群体中的个体。

此方法将调用UDRP的replace()方法。给定一组个体inds和一组迁移者mig,UDRP的replace()方法预计将用mig中的个体替换inds中的个体,并返回替换后产生的新个体集。此方法的其他参数描述了indsmig中个体所引用的problem的属性。

个体集合 indsmig,以及此方法的返回值表示为包含以下3个元素的元组:

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

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

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

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

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

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

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

  • nobj (int) – 问题目标的数量 indsmig 所指的是

  • nec (int) – 问题中涉及的等式约束的数量 indsmig 指的是

  • nic (int) – 问题的不等式约束数量 indsmig 所涉及的

  • tol (array-like object) – 问题约束容差的向量,indsmig 所引用的

  • mig (tuple) – 移民群体

Returns

一组新的个体,由将inds中的个体替换为mig中的个体而产生

Return type

tuple

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

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

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