群岛类#
- class pygmo.archipelago(self, n=0, t=topology(), **kwargs)#
群岛。
群岛是由
island对象通过topology连接而成的集合。群岛中的岛屿可以通过称为迁移的过程交换个体(即候选解)。个体通过拓扑描述的路线迁移,岛屿的替换和选择策略(参见r_policy和s_policy)决定了如何替换和选择岛屿种群中的个体。archipelago的接口部分反映了island的接口:进化通过调用evolve()来启动,用户可以随时查询群岛的状态并访问其岛屿成员。用户可以通过调用wait()和wait_check()方法显式等待待处理的进化完成。可以通过status()查询群岛中正在进行的进化的状态。构造函数将初始化一个具有拓扑结构t和由kwargs构建的n个岛屿的群岛。 关键字参数接受与
island构造函数中解释的相同格式,但有以下不同之处:size 被替换为 pop_size,为了清晰起见,
如果存在seed参数,它用于初始化一个随机数生成器,该生成器又用于为每个岛屿种群生成随机种子。换句话说,seed参数允许随机(但确定性地)生成群岛中种群的种子。如果未提供seed,种群的种子将是随机且非确定性的。
这个类是C++类
pagmo::archipelago的Python对应类。- Parameters
- 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
TypeError – 如果 n 不是整数类型
ValueError – 如果 n 是负数
未指定 – 由
island的构造函数、底层C++构造函数、push_back()或topology的公共接口抛出的任何异常
示例
>>> 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
- get_migrants_db()#
在群岛的进化过程中,岛屿会定期将选择迁移的个体存储在迁移数据库中。这是一个
list的tuple对象,其大小等于群岛中的岛屿数量,并且包含每个岛屿当前的候选迁出个体。移民元组每个由3个值组成:
一个一维的NumPy数组,包含个体ID(表示为64位无符号整数),
一个二维的NumPy数组,包含决策向量(即每个个体的决策向量,按行优先顺序存储),
一个二维NumPy数组的适应度向量(即每个个体的适应度向量,按行优先顺序存储)。
- Returns
一份移民数据库的副本
- Return type
- Raises
未指定 – 任何由C++和Python之间的失败引发的异常(例如,类型转换错误、函数签名不匹配等)
- get_migration_log()#
每当一个人从一个岛屿(源)迁移到另一个岛屿(目的地)时,都会在迁移日志中添加一个条目。该条目是一个包含6个元素的
tuple,其中包括:迁移的时间戳,
迁移的个体的ID,
迁移个体的决策和适应度向量,
源岛屿和目标岛屿的索引。
迁移日志是迁移条目的
列表。- Returns
迁移日志的副本
- Return type
- Raises
未指定 – 任何由C++和Python之间的失败引发的异常(例如,类型转换错误、函数签名不匹配等)
- get_migration_type()#
- Returns
当前这个群岛的迁移类型
- Return type
- get_topology()#
- Returns
当前拓扑的副本
- Return type
tyopology
- push_back(*args, **kwargs)#
添加一个岛屿。
此方法将从提供的参数构建一个岛屿,并将其添加到群岛中。 岛屿被添加到群岛的末尾(即,新岛屿的索引将等于调用此方法前群岛的大小)。
pygmo.topology.push_back()也将在此群岛关联的topology上调用,因此 向群岛添加新岛屿的同时,也会向拓扑中添加一个新的顶点。此方法接受单个位置参数或一组关键字参数:
如果没有提供位置参数,那么关键字参数将被用来构造一个
island,然后将其添加到群岛中;否则,如果提供了一个单一的位置参数并且没有提供关键字参数,那么该位置参数将被解释为要添加到群岛中的
island对象。
任何其他位置/关键字参数的组合都会导致错误。
- Raises
ValueError – 如果使用位置参数时,位置参数超过1个,或者同时使用了关键字参数
未指定 – 由
island的构造函数、pygmo.topology.push_back()或底层C++方法抛出的任何异常
- set_migrant_handling(mh)#
为这个群岛制定新的移民处理政策。
- Parameters
mh (
migrant_handling) – 该群岛所需的移民处理政策
- set_migrants_db(mig)#
在群岛的进化过程中,岛屿会定期将选择迁移的个体存储在迁移数据库中。这是一个
list的tuple对象,其大小等于群岛中的岛屿数量,并且包含每个岛屿当前的候选迁出个体。移民元组每个由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将始终返回idle或idle_error。- Returns
一个标志,指示群岛中异步操作的当前状态
- Return type
- wait()#
阻塞直到所有进化完成。
此方法将在群岛的所有岛屿上调用
pygmo.island.wait()。岛屿进化抛出的异常可以通过wait_check()重新抛出:它们不会通过此方法重新抛出。 此外,与wait_check()相反,此方法不会重置群岛的状态: 在调用wait()之后,status属性将始终返回idle或idle_error。
- wait_check()#
阻塞直到所有进化完成并引发遇到的第一个异常。
此方法将调用
pygmo.island.wait_check()在所有岛屿上(按照岛屿插入群岛的顺序)。 由pygmo.island.wait_check()引发的第一个异常将被此方法重新抛出, 而其他调用pygmo.island.wait_check()引发的异常将被忽略。请注意,
wait_check()会重置群岛的状态:在调用wait_check()之后,status属性将 始终返回idle。- Raises
未指定 – 由群岛中任何排队进化任务抛出的任何异常