2015-06-04 57 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