欧洲法院的岛屿模型

时间:2015-06-04 14:24:44

标签: genetic-programming ecj

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

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

pop.subpop.0.size = 4000

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

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

2 个答案:

答案 0 :(得分:0)

我还没有研究过ECJ一揽子计划,但这就是一般的想法:你的人口分为多个子群体。

我不知道为什么你想要不同大小的亚人群。与固定大小的亚种群相比,是否有益处?

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

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

答案 1 :(得分:0)

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

在欧洲法院有两种使用群岛模式的方法:

  • 使用 InterPopulationExchanger 类:

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

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 类:

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

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

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

exch.num-islands = 10

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