2013-05-15 95 views
0

我剛剛學習遺傳算法時,我被賦予了一項任務,設計一個遺傳算法,學習規則,預測如果一個人會投票是或否給出數據集。遺傳算法的製作

我一直在閱讀關於GA和GP的書籍和互聯網連續兩天。所以現在我理解了遺傳算法關於種羣管理,遺傳算子,適應度函數和與不同類型的交叉口罩交叉的概念。但是我仍然無法爲給定的數據集製作自己的GA。我只是沒有得到如何開始或與什麼,我有點絕望,因爲我覺得我愚蠢的這一點。

因此,任何幫助,如提示,提示或僞代碼,將不勝感激!

的給定的數據集如下(組):

G1 | G2 | G3 | G4

A1 | B1 | C1 |無

A2 | B2 | C2 | D2

A3 | B3 | C3 | D3

A4 | B4 | C4 | D4

A5 | - | - | D5

那麼數據不是a,b,c's。他們是更長的東西,但我很懶惰,所以是:P - 意味着沒有更多的屬性。請注意,沒有一個屬性。 感謝任何幫助傢伙!

+0

您必須更具體地瞭解您的數據代表什麼,因爲我不知道。我的第一個猜測是,G1-G4是一個人的財產,但是它缺少一個說明該人是否投票的領域。在一個側面說明中,這並不是我稱之爲開始使用GAs的合適人選,這聽起來有點高級。 – Dukeling

+0

我在人口中的每個基因組都像[決策樹](http://en.wikipedia.org/wiki/Decision_tree)之前就已經看到了一種方法。這可能是一個起點。或者,這可能會使你**應該做的事情過分複雜化。 – Dukeling

回答

0

嗯,我不完全理解數據集的描述,所以我的回答是基於以下假設: 我們有一組屬性,比如n個不同的屬性。每個屬性都有一組不同的可能符號(=非數字)值,比如m(i)個不同的可能性。每個人都有相同的屬性,但其中一些可能缺失或無。

如果這些假設是正確的,一組屬性和可能的​​值不太高,那麼其中一個可能的工作:

  • 如果這兩套都是非常小的,你可以有正維數組作爲個體/基因型。每個維度的大小都是m(i),這個結構的每個值都是yes/no的答案。這將是固定大小(比特)向量的泛化(=更多維度)。如何創建隨機/變異/交叉應該很容易。健身將會是多久才能做出好的預測。

  • 如果它們比較大,那麼你需要更復雜的東西。一種可能性是有規則清單。每個規則可以是長度爲n + a是/否標誌的矢量。在矢量的每個位置上,您都可能有相關屬性的可能值。你也可以有一個快樂的小丑屬性接受一切。 解釋規則(p:person,r:規則):如果p1 = r1且p2 = r2且... pn = rn,則結果是規則的標誌。 您必須評估規則,直到找到匹配的規則。你還需要一個默認值。 在這種情況下遺傳算子有點棘手,但我認爲如果您搜索可變長度編碼,您會發現一些東西。 我已經使用了類似的編碼(對於不同的問題),它工作正常。

  • 爲了使它更通用(但也更復雜),您可以將規則表示爲樹,其中內部節點是和/或不是和可能是其他邏輯運算符,葉子是謂詞pi = ri。如果你喜歡這個解決方案,這將是一種遺傳編程,谷歌。

說實話,我不是100%確定如果遺傳算法是這個問題的最佳選擇,特別是如果值不是符號,但數字。這似乎是一個模式匹配問題,爲此有更好的解決方案。我會尋找一些替代品,例如數字情況下的神經網絡。

+0

感謝您的提示。 @Sandor數據集和前面的文章中描述的一樣大,我必須使用GA,因爲它是一個需求。所有的價值觀都是象徵性的,如果我明白你是正確的。例如G1包含諸如黑色,白色,棕色等人的顏色。該任務基於我以前在另一種情況下使用的先前數據集。該數據集的投票是/否,並且即時猜測,因爲在這個問題中沒有提到它,所以決定是否使用該分類取決於我。仍然不太確定如何解決這個問題,希望得到更具體的東西。 – Celly

1

首先,首先,您必須首先確定您想要用數據集解決的問題。您通常使用遺傳算法來處理非確定性問題:需要很長時間才能解決的問題,但是其答案很容易驗證。

所以第一個問題是:你的數據集代表什麼?

第二個問題:你想要解決什麼問題,是遺傳算法的一種擬合方法來解決你的問題?

無論如何,創建遺傳算法是通過以下步驟來完成:

  1. 表示問題可變結構域作爲固定長度的染色體中,選擇羣體Ñ,交叉概率的大小p(c)和突變概率p(m)
  2. 定義適應度函數f(x)來測量問題域中個體染色體的性能或適應度。適應度函數規定,將再現
  3. 期間相配合
  4. 隨機產生的大小爲N的染色體的初始羣體,用於選擇染色體的基礎:X1X2,...,XN
  5. 計算健身每個單獨的染色體:F(X1)F(X2),...,F(xn)映射
  6. 選擇一對染色體的,用於從當前羣體交配。親本染色體的選擇與它們的適應性有關。高度適合的染色體被選擇用於交配的概率高於不適合的染色體。
  7. 通過將遺傳算子創建一對後代的染色體 - 交叉和變異
  8. 放入新羣體中的創建的後代的染色體
  9. 重複步驟5,直到新的染色體羣體的大小變得等於的大小初始羣體ñ
  10. 與新的(後代)人口
  11. 轉到更換初始(親本)染色體人口到步驟4,直到終止準則被滿足重複該過程。

因此,您必須爲您的解決方案(例如位數或字符串數​​組)找到一個符號,以便您輕鬆地交換部分染色體。然後你必須確定交叉和變異操作。 如果您正在處理有序染色體,那麼取決於應用的交叉策略,您可能必須在之後修復染色體。有序染色體是一個染色體,其中的順序或基因很重要。如果你在代表旅行推銷員訪問的兩個解決方案上進行標準交叉,那麼你最終可能會染上一個染色體,他會訪問一些城市兩次或更多,而有些則根本沒有!

關於如何在遺傳算法中翻譯每個問題沒有明確的描述,因爲每個問題都不相同。上述步驟不會改變,但您可能需要引入幾種不同的交叉和變異操作來防止過早收斂。