我是新來的Haskell編程的世界,我正在削減我的牙齒在一個簡單的遺傳算法找到旅行推銷員問題的好辦法。我代表的解決方案,對整數排列,所以我有這種類型的同義詞哈斯克爾:抽象遺傳算法
type Genome = [Int]
的算法本身是一組這對解決方案進行操作的功能:
mutation :: Genome -> Genome
selectParents :: [Genome] -> [Genome] -> [Genome]
crossover :: Genome -> Genome -> (Genome, Genome)
selectSurvivors :: [Genome] -> [Genome] -> [Genome]
我不知道怎麼樣我的許多代碼與我的問題有關,所以請詢問是否需要更多細節。有一點值得一提的是,上面的類型簽名實際上是簡化的,實際上我使用State monad來承載StdGen
,所有這些函數實際上都返回有狀態的計算。
有幾件事我想用這個做,但不能讓我頭腦發熱。我希望能夠爲解決方案選擇不同的表示形式,在我看來,這將是一個使用類型類的自然地方,因此Genome
將是類型類,而[Int]
是此Genome
的特定實例。
現在,我希望能夠嘗試實現,並且希望能夠在其他項目中使用代碼。使用這樣的類型類將需要我創建的每個新算法都需要我創建Genome
的另一個實例,這是創建一個庫的好方法嗎?
一個額外的問題,只是一個困擾着我的東西,有什麼辦法可以創建類似於函數的類型同義詞的東西,所以如果我正在編寫一個函數作爲參數,我可以寫同義詞而不是而不是函數的整個類型簽名,所以像下面這樣的東西可以工作。
type someFunc = [Int] -> [Int] -> Int
someOtherFunc :: someFunc -> [Int] -> Int
權,希望這就是問題的清醒足夠的解釋,覺得我已經錯過了真正的答案很明顯,但它並沒有在我跳了出來。歡呼聲
哪些功能會的情況下, Genome需要定義? `突變',`selectParents`等?還是有一個更小(更簡單)的函數集,你可以用這些函數來定義這些函數? – rampion 2011-02-15 22:35:15
我可能是錯的,但我認爲這些功能儘可能簡單。也許我只是試圖讓它比一般的更普遍。 – 2011-02-15 22:41:49