2

的是什麼與Ñ(任意> 0號)之間使用一個基因型的差異染色體與1(一)的基因,並用1(一)染色體中的基因型與Ñ(相同數字)基因?差異論文兩個種基因型

在代碼:

// 3 chromosomes with 1 gene each 
Genotype.of(
    DoubleChromosome.of(0,1), 
    DoubleChromosome.of(0,1), 
    DoubleChromosome.of(0,1) 
) 

// 1 chromosome with 3 genes each 
Genotype.of(
    DoubleChromosome.of(
     DoubleGene.of(0,1), 
     DoubleGene.of(0,1), 
     DoubleGene.of(0,1) 
    ) 
) 

我的問題是不是得到eval函數內的值,但如果能以某種方式(結果或進化)改變遺傳算法。

UPDATE

我使用Jenetics庫。

+0

請將您使用的庫添加到描述中。 – RonaldFindling

+0

嗨,我試圖把它作爲一個標籤(jenetics),但stackoverflow要求1500聲望來創建一個新的:)。 – Dyorgio

+0

您的重組和變異操作符可能會以不同的方式處理這兩種情況。 – RonaldFindling

回答

1

當您設計遺傳算法,你需要你的「基因」,映射到一個或多個染色體。你的問題似乎是「多染色體有什麼影響?」

在繁殖階段,從兩個現有(父母)基因組中創建一個新的(子)基因組。一般而言,對於每個染色體,您執行以下操作:

  1. 選擇以父母開始的染色體。
  2. 沿着染色體線性走下來,將位(或任何密碼子)拷貝到正在構建的子染色體上。
  3. 在每一位,翻轉一個隨機數,看看你是否應該「交叉」到另一個父染色體作爲拷貝的來源。
  4. 隨着每一位被複制,翻轉另一個隨機數以查看該位是否應該「變異」。

因此,在染色體內,親本遺傳物質的混合量受交叉率控制。

如果您的交叉率非常低(或爲零),並且您只有一條染色體,那麼每個孩子可能是一個父母或另一個父母的副本。這通常應該避免,因爲它消除了可以顯着提高遺傳算法性能的基因混合的重要組成部分。

如果您有兩條染色體,那麼有50%的機會將孩子作爲父母之一的副本,並有50%的機會成爲半數。

如果你有10條染色體,那麼有512個機會中的一個作爲父母之一的副本。

換句話說,當應用有性繁殖(不管使用的交叉率如何)時,至少有少數染色體可以產生良好的遺傳混合。

如果你每個染色體有一個「基因」,那麼你最終會隨機混合父代基因在每一代。這意味着您的遺傳算法無法選擇位於同一染色體上的基因的良好組合。這通常應該避免,因爲它消除了可以顯着提高遺傳算法性能的基因混合的重要組成部分。

我的建議是遵循大自然的先導,並在5-50範圍內使用許多染色體。您可能想要嘗試改變染色體的數量並查看它如何影響應用程序的性能。

+0

最完整的答案,tks! – Dyorgio

1

這兩種基因型之間的差異是創建的雙基因的允許範圍。在第一版中,三條染色體的基因允許有不同的範圍(它們實際上沒有)。在第二個版本中,基因型創建了一條長度爲3的染色體,其中所有基因都被迫具有相同的數值範圍(第一個基因的範圍)。另一個區別是,交叉操作僅在具有相同索引或數字範圍的染色體上進行。

如果你的雙基因有相同的數值範圍,比第二個版本通常是更好的選擇。你可以在一個更自覺的方式來創建這個版本:

Genotype.of(DoubleChromosome.of(0.0, 1.0, 3)); 
+0

很好的答案,恢復,但重要的信息,tks! – Dyorgio