【问题标题】:How to perform genetical evolution of python list's elements combination?如何进行python列表元素组合的遗传进化?
【发布时间】:2014-09-16 19:35:07
【问题描述】:

我是一名 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

最后我有 2 个列表:combinations,它保留了 li 元素和 results 的一些组合,它为每个组合保留了一个百分比值或准确性。我们的想法是选择准确度最高的组合。

检查li 的所有组合是不可能的——这需要几个月的计算。我必须从一些随机开始(我猜?),然后努力做到最好。我应该使用什么库?如何在这里模拟进化?

编辑:

或者:元素集不断演化,直到准确率超过 k%。

【问题讨论】:

  • 如果您真的无法检查所有组合,并且它们没有以任何可用的方式排序,那么您肯定无法就哪个组合得出一个自信的答案是最准确的。
  • 没有和没有。好的,我愿意在中间见面。它不断发展,直到一个组合的得分达到 > k% 准确度
  • 不确定这是否是答案级的,因此作为评论:在itertools 食谱部分,有一个简单的“随机组合”功能,您可以执行“几次”作为您的计算时间允许。
  • 谢谢,这是一个很好的开始,但后来我需要的不仅仅是随机选择......我想我必须在他们自己中组合结果(?)

标签: python genetic-algorithm evolutionary-algorithm


【解决方案1】:

你基本上有四种可能:

1。探索所有组合

然而,随着组合的数量呈指数增长,这将变得棘手。

2。随机搜索

生成随机组合,直到获得足够好的组合。

3。本地搜索

从一些组合开始。然后对其进行小改动。如果新的比当前的好,则将其设为当前的并重复该过程。

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

4。进化算法

使用模拟自然进化的算法。最基本的进化算法是这样的:

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

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

挑战在于找到一种允许有效重组和突变的良好表示。

【讨论】:

  • 非常感谢!做到了:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-20
相关资源
最近更新 更多