群岛类#

_images/archi_no_text.png
class pygmo.archipelago(self, n=0, t=topology(), **kwargs)#

群岛。

群岛是由island对象通过topology连接而成的集合。群岛中的岛屿可以通过称为迁移的过程交换个体(即候选解)。个体通过拓扑描述的路线迁移,岛屿的替换和选择策略(参见r_policys_policy)决定了如何替换和选择岛屿种群中的个体。

archipelago 的接口部分反映了 island 的接口:进化通过调用 evolve() 来启动,用户可以随时查询群岛的状态并访问其岛屿成员。用户可以通过调用 wait()wait_check() 方法显式等待待处理的进化完成。可以通过 status() 查询群岛中正在进行的进化的状态。

构造函数将初始化一个具有拓扑结构t和由kwargs构建的n个岛屿的群岛。 关键字参数接受与island构造函数中解释的相同格式,但有以下不同之处:

  • size 被替换为 pop_size,为了清晰起见,

  • 如果存在seed参数,它用于初始化一个随机数生成器,该生成器又用于为每个岛屿种群生成随机种子。换句话说,seed参数允许随机(但确定性地)生成群岛中种群的种子。如果未提供seed,种群的种子将是随机且非确定性的。

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

Parameters
  • n (int) – 群岛中的岛屿数量

  • t – 用户定义的拓扑(可以是Python或C++),或者是topology的实例

Keyword Arguments
  • udi – 用户定义的岛屿,可以是Python或C++

  • algo – 用户定义的算法(可以是Python或C++),或者是algorithm的实例

  • pop (population) – 一个种群

  • prob – 用户定义的问题(可以是Python或C++),或者是problem的实例

  • b – 用户定义的批量适应度评估器(可以是Python或C++),或者是bfe的实例

  • pop_size (int) – 每个岛屿的个体数量

  • r_pol – 用户定义的替换策略(可以是Python或C++),或者是r_policy的实例

  • s_pol – 用户定义的选择策略(可以是Python或C++),或者是s_policy的实例

  • seed (int) – 随机种子

Raises

示例

>>> from pygmo import *
>>> archi = archipelago(n = 16, algo = de(), prob = rosenbrock(10), pop_size = 20, seed = 32)
>>> archi.evolve()
>>> archi 
Number of islands: 16
Status: busy

Islands summaries:

        #   Type           Algo                    Prob                                  Size  Status
        -----------------------------------------------------------------------------------------------
        0   Thread island  Differential Evolution  Multidimensional Rosenbrock Function  20    idle
        1   Thread island  Differential Evolution  Multidimensional Rosenbrock Function  20    idle
        2   Thread island  Differential Evolution  Multidimensional Rosenbrock Function  20    idle
        3   Thread island  Differential Evolution  Multidimensional Rosenbrock Function  20    idle
        4   Thread island  Differential Evolution  Multidimensional Rosenbrock Function  20    busy
        5   Thread island  Differential Evolution  Multidimensional Rosenbrock Function  20    idle
        6   Thread island  Differential Evolution  Multidimensional Rosenbrock Function  20    busy
        7   Thread island  Differential Evolution  Multidimensional Rosenbrock Function  20    busy
        8   Thread island  Differential Evolution  Multidimensional Rosenbrock Function  20    idle
        9   Thread island  Differential Evolution  Multidimensional Rosenbrock Function  20    idle
        10  Thread island  Differential Evolution  Multidimensional Rosenbrock Function  20    idle
        11  Thread island  Differential Evolution  Multidimensional Rosenbrock Function  20    idle
        12  Thread island  Differential Evolution  Multidimensional Rosenbrock Function  20    idle
        13  Thread island  Differential Evolution  Multidimensional Rosenbrock Function  20    busy
        14  Thread island  Differential Evolution  Multidimensional Rosenbrock Function  20    busy
        15  Thread island  Differential Evolution  Multidimensional Rosenbrock Function  20    idle

>>> archi.wait()
>>> res = archi.get_champions_f()
>>> res 
[array([ 125441.77328885]),
array([ 144025.63904164]),
array([ 25387.38989711]),
array([ 56029.44160232]),
array([ 47760.99082202]),
array([ 118552.94891993]),
array([ 118405.29575447]),
array([ 101866.81846325]),
array([ 166106.12039851]),
array([ 167408.00058506]),
array([ 148815.47953885]),
array([ 165186.74476375]),
array([ 326615.28881936]),
array([ 167301.16445135]),
array([ 166871.42760503]),
array([ 75133.38815736])]
evolve(n=1)#

进化群岛。

此方法将在群岛的所有岛屿上调用pygmo.island.evolve()。 输入参数n将传递给每个岛屿的pygmo.island.evolve()调用。 status属性可用于查询群岛中异步操作的状态。

Parameters

n (int) – 将被传递给 pygmo.island.evolve() 的参数

Raises

未指定 – 由pygmo.island.evolve()抛出的任何异常

get_champions_f()#

获取岛屿冠军的适应度向量。

Returns

岛屿冠军的适应度向量

Return type

list 一维 NumPy 浮点数组

Raises

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

get_champions_x()#

获取岛屿冠军的决策向量。

Returns

岛屿冠军的决策向量

Return type

list 一维 NumPy 浮点数组

Raises

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

get_migrant_handling()#
Returns

当前这个群岛的移民处理政策

Return type

migrant_handling

get_migrants_db()#

在群岛的进化过程中,岛屿会定期将选择迁移的个体存储在迁移数据库中。这是一个listtuple对象,其大小等于群岛中的岛屿数量,并且包含每个岛屿当前的候选迁出个体。

移民元组每个由3个值组成:

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

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

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

Returns

一份移民数据库的副本

Return type

list

Raises

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

get_migration_log()#

每当一个人从一个岛屿(源)迁移到另一个岛屿(目的地)时,都会在迁移日志中添加一个条目。该条目是一个包含6个元素的tuple,其中包括:

  • 迁移的时间戳,

  • 迁移的个体的ID,

  • 迁移个体的决策和适应度向量,

  • 源岛屿和目标岛屿的索引。

迁移日志是迁移条目的列表

Returns

迁移日志的副本

Return type

list

Raises

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

get_migration_type()#
Returns

当前这个群岛的迁移类型

Return type

migration_type

get_topology()#
Returns

当前拓扑的副本

Return type

tyopology

push_back(*args, **kwargs)#

添加一个岛屿。

此方法将从提供的参数构建一个岛屿,并将其添加到群岛中。 岛屿被添加到群岛的末尾(即,新岛屿的索引将等于调用此方法前群岛的大小)。pygmo.topology.push_back() 也将在此群岛关联的topology上调用,因此 向群岛添加新岛屿的同时,也会向拓扑中添加一个新的顶点。

此方法接受单个位置参数或一组关键字参数:

  • 如果没有提供位置参数,那么关键字参数将被用来构造一个island,然后将其添加到群岛中;否则,

  • 如果提供了一个单一的位置参数并且没有提供关键字参数,那么该位置参数将被解释为要添加到群岛中的island对象。

任何其他位置/关键字参数的组合都会导致错误。

Raises
  • ValueError – 如果使用位置参数时,位置参数超过1个,或者同时使用了关键字参数

  • TypeError – 如果使用单个位置参数时,该参数的类型不是 island

  • 未指定 – 由island的构造函数、pygmo.topology.push_back()或底层C++方法抛出的任何异常

set_migrant_handling(mh)#

为这个群岛制定新的移民处理政策。

Parameters

mh (migrant_handling) – 该群岛所需的移民处理政策

set_migrants_db(mig)#

在群岛的进化过程中,岛屿会定期将选择迁移的个体存储在迁移数据库中。这是一个listtuple对象,其大小等于群岛中的岛屿数量,并且包含每个岛屿当前的候选迁出个体。

移民元组每个由3个值组成:

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

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

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

此设置器允许用一个新的数据库替换当前的迁移数据库。

请注意,此设置器将接受输入中的格式错误的移民数据库而不会抱怨。 然而,当迁移发生时,无效的移民数据库将导致异常被抛出。

Parameters

mig (list) – 新的移民数据库

Raises

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

set_migration_type(mt)#

为这个群岛设置一个新的迁移类型。

Parameters

mt (migration_type) – 该群岛所需的迁移类型

set_topology(t)#

此方法将等待群岛中任何正在进行的演化完成,然后它将把群岛的拓扑结构设置为t

请注意,用户有责任确保新拓扑结构与群岛的属性一致。

Parameters

t – 用户定义的拓扑(可以是Python或C++),或者是topology的实例

Raises

未指定 – 复制拓扑时抛出的任何异常

property status#

群岛的状态。

此只读属性将返回一个evolve_status标志,指示群岛中异步操作的当前状态。该标志将是:

  • idle 如果对于群岛中的所有岛屿,pygmo.island.status 返回 idle

  • busy 如果群岛中至少有一个岛屿,pygmo.island.status 返回 busy,并且没有任何岛屿的 pygmo.island.status 返回错误状态;

  • idle_error 如果群岛中没有岛屿忙碌,并且至少有一个岛屿 pygmo.island.status 返回 idle_error;

  • busy_error 如果对于群岛中的至少一个岛屿,pygmo.island.status 返回错误状态并且至少有一个岛屿处于忙碌状态。

请注意,在调用wait_check()之后,pygmo.archipelago.status将始终返回 idle,而在调用wait()之后,pygmo.archipelago.status 将始终返回idleidle_error

Returns

一个标志,指示群岛中异步操作的当前状态

Return type

evolve_status

wait()#

阻塞直到所有进化完成。

此方法将在群岛的所有岛屿上调用pygmo.island.wait()。岛屿进化抛出的异常可以通过wait_check()重新抛出:它们不会通过此方法重新抛出。 此外,与wait_check()相反,此方法不会重置群岛的状态: 在调用wait()之后,status属性将始终返回idleidle_error

wait_check()#

阻塞直到所有进化完成并引发遇到的第一个异常。

此方法将调用pygmo.island.wait_check()在所有岛屿上(按照岛屿插入群岛的顺序)。 由pygmo.island.wait_check()引发的第一个异常将被此方法重新抛出, 而其他调用pygmo.island.wait_check()引发的异常将被忽略。

请注意,wait_check() 会重置群岛的状态:在调用 wait_check() 之后,status 属性将 始终返回 idle

Raises

未指定 – 由群岛中任何排队进化任务抛出的任何异常