在遗传编程(GP)中,当使用岛屿模型时,是否意味着它将分割岛屿之间的种群大小?
例如,如果在参数文件中我们有
pop.subpop.0.size = 4000
我们有4个岛屿,这是否意味着每个岛屿的人口将达到1000?如果我们将这行代码放在每个岛的参数文件中怎么办?每个岛屿可能有不同的人口规模吗?
我使用Java和ECJ package在GP中实现岛模型。
答案 0 :(得分:0)
我还没有研究过ECJ一揽子计划,但这就是一般的想法:你的人口分为多个子群体。
我不知道为什么你想要不同大小的亚人群。与固定大小的亚种群相比,是否有益处?
无论如何,我做了一个非常简单的遗传编程变体实现,包含多个子群体。您可以在此处下载:http://www.mepx.org/source_code.html
它是用C ++编写的,但Java程序员应该很容易理解。
答案 1 :(得分:0)
不,在您的示例中,您只定义了一个拥有4000个人的岛屿。该号码永远不会自动拆分。
在欧洲法院有两种使用群岛模式的方法:
一个共享变量的独特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
在这种情况下,每个岛都在不同的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