ECJ 中的孤岛模型

Island Model in ECJ

在遗传规划(GP)中,当使用岛屿模型时,是否意味着它将在岛屿之间分割种群大小?

例如,如果在参数文件中我们有

pop.subpop.0.size = 4000

我们有 4 个岛屿,这是否意味着每个岛屿将有 1000 人?如果我们把这行代码放在每个岛的参数文件中呢?每个岛屿的人口规模可能不同吗?

我正在使用 Java 和 ECJ package 在 GP 中实现孤岛模型。

我没有研究过 ECJ 包,但这是一般的想法:你有一个被分成多个子群体的群体。

我不知道你为什么想要不同大小的亚群。与固定大小的亚群相比有优势吗?

无论如何,我做了一个非常简单的具有多个亚群的遗传编程变体的实现。您可以在这里下载:http://www.mepx.org/source_code.html

它是用 C++ 编写的,但 Java 程序员应该很容易理解它。

不,在您的示例中,您只定义了一个由 4000 个人组成的岛屿。该号码永远不会自动拆分。

ECJ 中有两种使用 Islands 模型的方式:

  • 使用 InterPopulationExchanger class:

一个共享变量的独特 Java 进程。这些岛屿是 Population 对象的子种群。因此,您需要在参数文件中为每个子种群设置大小。在您的示例中,您只将岛(子种群)设置为 0 到 4000 个人,但您还应该设置其他大小。例如,对于 10 个岛屿,每个岛屿有 4000 人:

exch = ec.exchange.InterPopulationExchange
pop.subpops = 10
pop.subpop.0.size = 4000
pop.subpop.1.size = 4000
pop.subpop.2.size = 4000
...etc
pop.subpop.10.size = 4000
  • 使用 IslandExchanger class:

在这种情况下,每个岛都在不同的 Java 进程中执行,因此,每个 islandID.params 文件(每个 island/process 一个)只需要设置一个人口:

exch = ec.exchange.InterPopulationExchange
pop.subpop.0.size = 4000

并且岛屿的数量在server.params文件中设置:

exch.num-islands = 10

您可以在 ECJ 文档 pdf 的第 223 页查看其余参数和更多信息:https://cs.gmu.edu/~eclab/projects/ecj/docs/manual/manual.pdf