【发布时间】:2014-05-04 20:26:11
【问题描述】:
我目前正在尝试用一种不寻常的方法,一种遗传算法来解决 reddit 上的hard Challenge #151。
简而言之,在将字符串分隔为consonants 和vowels 并删除spaces 之后,我需要将它们放在一起,而不知道先出现哪个字符。
hello world 分别为hllwrld 和eoo,需要重新组合在一起。例如,一种解决方案是hlelworlod,但这没有多大意义。采用所有可能解决方案的详尽方法有效,但不适用于较长的问题集。
我已经拥有的
- 英文单词频率数据库
- 一种算法,使用 Zipf 定律构建相对
cost数据库,并且可以一致地将单词与没有空格的句子分开(借用自 this question/answer - 一种将辅音和元音放入堆栈并从其中一个中随机获取一个字符并将其编码为由
1和2组成的字符串的方法,有效地将结构编码为gene。该示例的正确gene将是1211212111 - 一种改变这种字符串的方法,随机交换字符
我尝试了什么
生成 500 个随机序列,使用 infer_spaces() 方法并使用所有单词的成本评估适合度,从其中取出最好的 25% 并变异 4 个新序列,适用于小字符串,但经常陷入局部最小值,特别是对于较长的序列。 Hello World 已在第一代中找到,thisisnotworkingverygood(已正确分离,成本为 41.223)在第二代中已收敛到 th iss n ti wo or king v rye good(270 成本)。
我需要什么
显然,使用计算成本作为评估方法仅适用于分离语法正确的句子,不适用于这种遗传算法。你有更好的想法我可以尝试吗?还是解决方案的另一部分,例如gene 的表示,是问题所在?
【问题讨论】:
-
在下面查看我新编辑的答案。我完整描述了如何使用 GA 解决问题,尽管我坚信深度优先搜索会更快并且更好地处理更大的输入。
标签: python algorithm genetic-algorithm