2015-06-04 65 views
2

在遗传规划(GP)中,当使用岛屿模型时,这是否意味着它将划分岛屿之间的人口规模?ECJ中的岛屿模型

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

pop.subpop.0.size = 4000 

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

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

回答

0

不,在你的例子中,你只定义了一个4000个人的岛屿。该号码永远不会自动分裂。

有两种方式使用岛屿模型ECJ:

  • 使用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 

而岛的数量

exch.num-islands = 10 

你可以看到欧洲法院文档PDF的223页的参数的休息和信息:https://cs.gmu.edu/~eclab/projects/ecj/docs/manual/manual.pdf

+0

如果我把'流行音乐'subpop.0 = 4000'在server.params文件中,而不是在islandID.params中提及它(人口规模)。在这种情况下,它是否会将所有岛屿之间的4000分开? – ashkanent

+0

如果启动调用ec.exchanger.IslandExchange(不是ec.Evolve)的server.params,则不会使用此参数。如果使用ec.Evolve将创建4000个人的服务器岛。 –

+0

因此,您必须手动明确设置每个岛的人口数量,无法自动分配数量。在这种情况下,您可以使用脚本来生成参数文件。查看我的脚本,作为运行大量参数配置(包括不同岛数)的示例:https://github.com/fergunet/HPMOON/blob/master/launch.py –

0

我没有研究过ECJ包,但那是一般的想法:你有一个群体,其在多个亚群分。

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

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

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

+0

我试图在每个岛上,但对于不同的设置在server.params文件中设置最后的实验我用固定大小的所有人。我只是想确保每个岛屿都会有(人口规模)/(岛屿数量)的人口。在ECJ中没有简单的方法来确认它。 – ashkanent