替换策略#
- 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建立的某些逻辑)得到的。个体集inds和mig,以及
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()),如果 t 是
object并且 UDRP 是一个 Python 对象(而不是一个 暴露的 C++ 替换策略),那么将返回对 UDRP 的引用(这允许在不了解其类型的情况下提取 Python UDRP),否则,
None将被返回。
- get_extra_info()#
替换策略的额外信息。
如果UDRP提供了一个
get_extra_info()方法,那么这个方法将返回其get_extra_info()方法的输出。否则,将返回一个空字符串。- Returns
关于UDRP的额外信息
- Return type
- Raises
未指定 – 由UDRP的
get_extra_info()方法抛出的任何异常
- get_name()#
替换策略的名称。
如果UDRP提供了
get_name()方法,那么此方法将返回其get_name()方法的输出。 否则,将返回基于UDRP类型的实现定义的名称。- Returns
替换策略的名称
- Return type
- is_(t)#
检查用户定义的替换策略的类型。
如果
extract(t)返回None,则此方法返回False,否则返回True。
- replace(inds, nx, nix, nobj, nec, nic, tol, mig)#
用来自另一个群体的移民替换群体中的个体。
此方法将调用UDRP的
replace()方法。给定一组个体inds和一组迁移者mig,UDRP的replace()方法预计将用mig中的个体替换inds中的个体,并返回替换后产生的新个体集。此方法的其他参数描述了inds和mig中个体所引用的problem的属性。个体集合 inds 和 mig,以及此方法的返回值表示为包含以下3个元素的元组:
一个一维的NumPy数组,包含个体ID(表示为64位无符号整数),
一个二维的NumPy数组,包含决策向量(即每个个体的决策向量,按行优先顺序存储),
一个二维NumPy数组的适应度向量(即每个个体的适应度向量,按行优先顺序存储)。
除了调用UDRP的
replace()方法外,此方法还将对输入参数和UDRP产生的输出执行各种健全性检查。- Parameters
- Returns
一组新的个体,由将inds中的个体替换为mig中的个体而产生
- Return type
- Raises
RuntimeError – 如果由pythonic UDRP返回的对象不可迭代,或者它是一个元素数量不正好为3的可迭代对象,或者如果UDRP的
replace()方法的调用引发异常ValueError – 如果 inds、mig 或返回值与问题属性不一致, 或者 inds、mig 或返回值中的 ID、决策和适应度向量大小不一致, 或者问题属性无效(例如,nobj 为零,nix > nx 等)
未指定 – 任何由C++和Python之间的交互失败引发的异常(例如,类型转换错误、函数签名不匹配等)