我正在编写一个遗传算法作为我的人工智能课程的项目.我熟悉GA背后的概念,但我对Haskell的经验是有限的.在程序中只剩下一件事要做,那就是创建一个循环我其他函数的函数.我将介绍我的功能并更详细地解释问题:
这是第二代的功能.我得到了父母,交配它们并改变基因组,然后将新的基因组传递到一个列表中:
generation1 = initialPopulation
generation2 = [(mutate (mate (fTTS generation1) (sTTS generation1))) | x <- [1..100]]
Run Code Online (Sandbox Code Playgroud)
这非常有效.我可以创建新一代并重复:
generation3 = [(mutate (mate (fTTS generation2) (sTTS generation2))) | x <- [1..100]]
Run Code Online (Sandbox Code Playgroud)
所以对于每一代新人来说,我离目标基因组更近一步(在我的情况下,这是一个字符串).我希望生成新一代,直到达到目标String.我认为一个基本的递归会解决这个问题,如:
g 0 = initialPopulation
g n = [(mutate (mate (fTTS (g (n - 1))) (sTTS (g (n - 1))))) | x <- [1..100]]
Run Code Online (Sandbox Code Playgroud)
这适用于我的笔记本电脑,直到g(3),但计算需要很长时间.我的问题是我不明白为什么.我认为Haskell递归的工作方式如下:
-- g 0 = [(mutate (mate (fTTS initialPopulation) (sTTS initialPopulation))) | x <- [1..100]] = ["N4kiT","Tu1RT","Tu1R<"]
-- g 1 = [(mutate (mate (fTTS (g 0)) …Run Code Online (Sandbox Code Playgroud) 我正在尝试在Haskell中编写一个可以从文本文档中过滤掉不需要的关键字的程序.文本文档包含有关人员的信息,例如姓名,年龄和城市,我想过滤掉与不符合关键字的人相关的所有信息.
数据库看起来像这样:
"Eric" 27 "London"
"Josefine" 34 "Stockholm"
"Hans" 50 "London"
Run Code Online (Sandbox Code Playgroud)
所以如果关键字是"伦敦",我想要以下输出:
"Eric" 27 "London"
"Hans" 50 "London"
Run Code Online (Sandbox Code Playgroud)
我已经尝试了一些不同的方法来存储信息并过滤掉不需要的人,但我现在对如何做到这一点毫无头绪.