如何进行python列表元素组合的遗传进化?

时间:2014-09-16 19:35:07

标签: python genetic-algorithm evolutionary-algorithm

我是一名Python程序员,在这种情况下,我必须模拟列表元素组合的遗传进化。 这个想法如下:

li #initial list
combinations=get_combinations(li) #not all possible combinations
results=[]
for c in combinations: results.append(do_stuff(li)) #do_stuff returns percantage of accuracu

最后,我有两个列表:combinations,它保留了li元素和results的某些组合,为每个组合保留了精确度。我们的想法是选择具有最高精度的组合。

无法检查li的所有组合 - 这需要数月的计算时间。我必须从一些随机开始(我猜?)然后以最好的方式工作。我应该使用什么库?如何在这里模拟进化?

编辑:

或者:元素集演变,直到达到k%以上的准确度。

1 个答案:

答案 0 :(得分:4)

你基本上有四种可能性:

1。探索所有组合

然而,随着组合数量呈指数增长,这是难以处理的。

2。随机搜索

生成随机组合,直到你得到一个足够好的。

3。本地搜索

从一些组合开始。然后对它做一个小改动。如果新的优于当前的那个,则将其设置为当前的并重复该过程。

可以大大改进上述方法。根据我的经验,最好的改进之一是Simmulated Annealing

4。进化算法

使用模拟自然进化的算法。最基本的进化算法看起来像这样:

  • 初始化一组候选解决方案。
  • 直到不符合停止条件:

    1. 从人群中选择两个候选解决方案,其中更好的解决方案具有更高的被选中率。
    2. (可选*)重新组合两个解决方案(不知何故,取决于表示),即将它们组合在一起以创建新的解决方案。
    3. (可选*)略微更改(或改变)新解决方案。
    4. 将新的解决方案重新投入人口,放弃一些不够好的解决方案(以保持人口规模不变)。
  • 必须存在重组或突变。通常每个都是以一些概率执行的。

挑战在于寻找一种能够进行有效重组和突变的良好代表。