使用类 algorithm#
algorithm 类代表一个通用的优化算法。用户在单独的类(用户定义的算法,或 UDA)中编写此类算法的细节,然后将其传递给 algorithm,后者提供一个统一的接口。
注意
用户定义算法(UDAs)是优化算法(由用户编码),可用于构建类型为algorithm的pygmo对象。
一些UDAs(优化算法)已经随pygmo提供,我们称它们为pygmo UDAs。
在本教程中,我们将使用一个名为cmaes的pygmo UDA来展示algorithm的基本构造,但同样的逻辑也适用于自定义的UDA,即用户实际编码的UDA。
让我们开始:
>>> import pygmo as pg
>>> algo = pg.algorithm(pg.cmaes(gen = 100, sigma0=0.3))
>>> print(algo)
Algorithm name: CMA-ES: Covariance Matrix Adaptation Evolutionary Strategy [stochastic]
C++ class name: ...
Thread safety: basic
Extra info:
Generations: 100
cc: auto
cs: auto
c1: auto
cmu: auto
sigma0: 0.3
Stopping xtol: 1e-06
Stopping ftol: 1e-06
Memory: false
Verbosity: 0
Force bounds: false
Seed: ...
在上面的代码中,在简单导入pygmo包之后,我们通过从cmaes构造一个algorithm来定义一个变量algo,这是我们实现的协方差矩阵适应进化策略。为了构造pygmo UDA,我们还传递了一些参数(gen和sigma0),这些参数的含义在cmaes中有文档说明。在下一行中,我们检查了algorithm。我们可以一目了然地看到algorithm的名称和一些额外信息,这些信息表明用户(在这种情况下是我们)在UDA(在这种情况下是cmaes)中实现了可选的get_extra_info()方法,该方法将一些定义UDA的基本参数打印到屏幕上。
我们也可以随时通过extract方法访问UDA,从而访问其未在algorithm接口中公开的方法:
>>> uda = algo.extract(pg.cmaes)
>>> type(uda)
<class 'pygmo.core.cmaes'>
>>> uda = algo.extract(pg.de)
>>> uda is None
True
只有当正确的UDA类型作为参数传递时,这种提取才会起作用。