算法类#

- class pygmo.algorithm(uda=null_algorithm())#
算法类。
这个类代表了一种优化算法。一个算法可以是随机的、确定性的、基于种群的、无导数的、使用海森矩阵的、使用梯度的、元启发式的、进化的等等。通过这个类,pygmo提供了一个通用接口,适用于所有类型的算法,这些算法可以应用于寻找由
problem
类表示的通用数学规划问题的解决方案。为了在pygmo中定义一个优化算法,用户首先需要定义一个类,其方法描述算法的属性并实现其逻辑。在pygmo中,我们将这样的类称为用户定义算法,简称UDA。一旦定义并实例化,UDA就可以用来构造这个类的实例,
algorithm
,它提供了优化算法的通用接口。每个UDA必须至少实现以下方法:
def evolve(self, pop): ...
evolve()
方法接受一个population
作为输入,并期望返回由原始种群的进化(或优化)生成的新种群。可以在UDA中实现其他可选方法:
def has_set_seed(self): ... def set_seed(self, s): ... def has_set_verbosity(self): ... def set_verbosity(self, l): ... def get_name(self): ... def get_extra_info(self): ...
有关如何实现UDA中的可选方法以及
algorithm
如何使用它们的详细信息,请参阅此类中相应方法的文档。请注意,暴露的C++算法也可以用作UDA,即使它们没有暴露上面列出的任何强制或可选方法(有关已在pygmo中编码的UDA的完整列表,请参见这里)。这个类是C++类
pagmo::algorithm
的Python对应类。- Parameters
uda – 用户定义的算法,可以是C++或Python
- Raises
NotImplementedError – 如果 uda 没有实现上述的强制方法
未指定 – 在构造过程中调用的UDA方法抛出的任何异常,UDA的深拷贝,底层C++类的构造函数,或C++和Python之间的接口失败(例如,类型转换错误,函数签名不匹配等)
- evolve(pop)#
此方法将调用UDA的
evolve()
方法。这是优化(进化)的核心所在。- Parameters
pop (
population
) – 初始人口- Returns
进化后的种群
- Return type
- Raises
未指定 – 由UDA的
evolve()
方法抛出的任何异常,或由C++和Python之间的交互失败引起的异常(例如,类型转换错误、函数签名不匹配等)。
- extract(t)#
提取用户定义的算法。
此方法允许提取存储在此
algorithm
实例中的用户定义算法(UDA)的引用。此函数的行为取决于t的值(必须是一个type
)以及内部UDA的类型:如果UDA的类型是t,那么将返回对UDA的引用 (这反映了相应的C++方法的行为
pagmo::algorithm::extract()
),如果 t 是
object
并且 UDA 是一个 Python 对象(而不是一个 暴露的 C++ 算法),那么将返回对 UDA 的引用(这允许在不了解其类型的情况下提取 Python UDA),否则,
None
将被返回。
示例
>>> import pygmo as pg >>> a1 = pg.algorithm(pg.compass_search()) >>> a1.extract(pg.compass_search) <pygmo.core.compass_search at 0x7f8e4792b670> >>> a1.extract(pg.de) is None True >>> class algo: ... def evolve(self, pop): ... return pop >>> a2 = pg.algorithm(algo()) >>> a2.extract(object) <__main__.algo at 0x7f8e478c04e0> >>> a2.extract(algo) <__main__.algo at 0x7f8e478c04e0> >>> a2.extract(pg.de) is None True
- get_extra_info()#
算法的额外信息。
如果UDA提供了一个
get_extra_info()
方法,那么这个方法将返回其get_extra_info()
方法的输出。否则,将返回一个空字符串。- Returns
关于UDA的额外信息
- Return type
- Raises
未指定 – 由UDA的
get_extra_info()
方法抛出的任何异常
- get_name()#
算法的名称。
如果UDA提供了
get_name()
方法,那么此方法将返回其get_name()
方法的输出。 否则,将返回基于UDA类型的实现定义的名称。- Returns
算法的名称
- Return type
- get_thread_safety()#
算法的线程安全级别。
此方法将返回一个枚举值
pygmo.thread_safety
,该值指示UDA的线程安全级别。与C++不同,在Python中无法在UDA中重新实现此方法。也就是说,对于C++ UDA,返回值将是UDA的get_thread_safety()
方法返回的值。对于Python UDA,返回值将无条件为none
。- Returns
UDA的线程安全级别
- Return type
一个值为
pygmo.thread_safety
- has_set_seed()#
检查UDA中是否可用
set_seed()
方法。如果UDA中存在
set_seed()
方法,则此方法将返回True
,否则返回False
。set_seed()
方法的可用性确定如下:如果UDA没有提供
set_seed()
方法,那么这个方法将总是返回False
;如果UDA提供了
set_seed()
方法但没有提供has_set_seed()
方法, 那么这个方法将总是返回True
;如果UDA提供了
set_seed()
和has_set_seed()
方法,那么此方法将返回UDA的has_set_seed()
方法的输出。
可选的
has_set_seed()
方法必须返回一个bool
。有关如何实现UDA的set_seed()
方法的信息,请参见set_seed()
。- Returns
一个标志,表示UDA中
set_seed()
方法的可用性- Return type
bool
- has_set_verbosity()#
检查UDA中是否可用
set_verbosity()
方法。如果UDA中存在
set_verbosity()
方法,则此方法将返回True
,否则返回False
。set_verbosity()
方法的可用性确定如下:如果UDA没有提供
set_verbosity()
方法,那么这个方法将总是返回False
;如果UDA提供了一个
set_verbosity()
方法,但没有提供一个has_set_verbosity()
方法, 那么这个方法将始终返回True
;如果UDA同时提供了
set_verbosity()
和has_set_verbosity()
方法,那么此方法将返回UDA的has_set_verbosity()
方法的输出。
可选的
has_set_verbosity()
方法必须返回一个bool
。有关如何实现UDA的set_verbosity()
方法的信息,请参见set_verbosity()
。- Returns
一个标志,表示UDA中
set_verbosity()
方法的可用性- Return type
bool
- is_(t)#
检查用户定义算法的类型。
如果
extract(t)
返回None
,则此方法返回False
,否则返回True
。
- is_stochastic()#
has_set_seed()
的别名。
- set_seed(seed)#
设置随机演化的种子。
此方法将设置用于UDA中所有随机变量的
evolve()
方法的种子。如果UDA提供了set_seed()
方法,则将调用其set_seed()
方法。否则,将引发错误。seed参数必须为非负数。UDA的
set_seed()
方法必须能够接受int
作为输入参数。- Parameters
seed (
int
) – 随机种子- Raises
NotImplementedError – 如果UDA没有提供
set_seed()
方法未指定 – 由UDA的
set_seed()
方法引发的任何异常或C++与Python之间的交互失败(例如,类型转换错误、函数签名不匹配等)
- set_verbosity(level)#
设置日志和屏幕输出的详细程度。
此方法将设置算法的详细程度。如果UDA提供了
set_verbosity()
方法,则将调用其set_verbosity()
方法。否则,将引发错误。输入参数level的确切含义取决于UDA。
UDA的
set_verbosity()
方法必须能够接受int
作为输入参数。- Parameters
level (
int
) – 所需的详细程度- Raises
NotImplementedError – 如果UDA没有提供
set_verbosity()
方法未指定 – 由UDA的
set_verbosity()
方法引发的任何异常或C++与Python之间的交互失败(例如,类型转换错误、函数签名不匹配等)