4

假设我有一个未知函数,我想通过遗传算法来近似。对于这种情况,我假设它是 y = 2x。

我有一个由 5 个元素组成的 DNA,每个 x 一个 y,从 x = 0 到 x = 4,其中,经过大量试验和计算,我会接近某种形式:

best_adn = [ 0, 2, 4, 6, 8 ]

请记住,我事先不知道它是线性函数、多项式还是更难看的东西,另外,我的目标不是从 best_adn 推断函数的类型,我只想要这些点,所以我以后可以使用它们。

这只是一个示例问题。就我而言,我的 DNA 中不是只有 5 个点,而是 50 或 100 个。用 GA 找到最佳点集的最佳方法是什么?

  1. 产生 100 个人口,丢弃最差的 20%
  2. 重组剩下的80%?如何?在随机点切割它们,然后将父亲的 ADN 的第一部分与母亲的 ADN 的第二部分放在一起?
  3. 突变,我应该如何定义这种问题突变?
  4. 是否值得使用精英主义?
  5. 还有其他值得使用的简单想法吗?

谢谢

4

2 回答 2

3

通常你只能通过实验找到这些......也许编写一个 GA 来调整你的 GA。

但除此之外,我不明白你在问什么。如果你不知道函数是什么,也不知道配合的要点,你如何确定适应度?

从我目前对这个问题的理解来看,这更适合神经网络。

编辑:

2.重组剩下的80%?如何?在随机点切割它们,然后将父亲的 ADN 的第一部分与母亲的 ADN 的第二部分放在一起?

这称为交叉。如果您想变得更有趣,请执行诸如选择随机起点并交换随机长度之类的操作。例如,您在一个对象中有 10 个元素。随机选择一个介于 1 和 10 之间的点 X 并交换 x..10-rand%10+1.. 你得到了图片... 稍微调味。

3.Mutation,这种问题的mutation应该怎么定义?通常,这更多地取决于被定义为法律解决方案的内容,而不是其他任何事情。你可以像交叉一样进行突变,除了你用随机数据填充它(这是合法的)而不是与另一个样本交换......而且你以得多的速度进行。

4.是否值得使用精英主义?实验并找出答案。

于 2009-12-11T01:00:50.187 回答
2

高斯适应通常优于标准遗传算法。如果您不想从头开始编写自己的程序包,Mathematica 全局优化程序包非常棒——我用它来拟合一个非常讨厌的非线性函数,其中标准拟合器惨遭失败。

编辑: 维基百科文章

如果您搜索文章中列出的论文的打印版,您可以找到白皮书和实现。不过,总的来说,您应该对最大化适应度函数的解决方案空间有所了解。如果变量的数量很少,或者局部最大值的数量很小,或者它们连接/倾斜到全局最大值,则简单的最小二乘法可以正常工作。如果每个局部最大值周围的区域很小(IE 你必须得到一个该死的好解决方案才能达到最好的解决方案,否则你会遇到一个糟糕的解决方案),那么需要更高级的算法。

为遗传算法选择变量取决于解决方案空间的样子。

于 2009-12-11T01:05:58.647 回答