遗传算法应用于曲线拟合

时间:2009-12-11 00:49:41

标签: genetic-algorithm genetic-programming

让我们假设我有一个未知的功能,我想通过遗传算法进行近似。对于这种情况,我假设它是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. 任何其他值得使用的简单想法 围绕?
  6. 由于

2 个答案:

答案 0 :(得分:3)

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

但除此之外,我不明白你在问什么。如果您不知道该功能是什么,并且您也不知道要使用的要点,您如何确定适应度?

根据我目前对这个问题的理解,这可以通过神经网络更好地拟合。

编辑:

2.重新组合剩余的80%?怎么样?在随机点切割它们然后将父亲的ADN的第一部分与母亲的ADN的第二部分放在一起?

这称为交叉。如果你想变得很惹人喜欢,可以选择一个随机起点并交换一个随机长度的东西。例如,对象中有10个元素。随机选择一个介于1和10之间的X点并交换x..10-rand%10 + 1 ..你得到的图片......稍微调整一下。

3.突变,我应该如何定义这种问题突变? 通常这更多地取决于被定义为法律解决方案的东西而不是其他任何东西。你可以用与交叉相同的方式进行变异,除非你用随机数据填充它(这是合法的)而不是用另一个标本交换...而你以 MUCH 更低的速率进行变换。 / p>

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

答案 1 :(得分:2)

高斯适应通常优于标准遗传算法。如果您不想从头开始编写自己的软件包,那么Mathematica全局优化软件包就非常出色 - 我用它来拟合一个非常讨厌的非线性函数,标准装配工在这里失败了。

编辑: Wikipedia Article

如果您搜索文章中列出的论文的印刷品,您可以找到白皮书和实施。但总的来说,您应该知道最大化健身功能的解决方案空间是什么样的。如果变量的数量很小,或者局部最大值的数量很小,或者它们连接/向下倾斜到全局最大值,则简单最小二乘法工作正常。如果每个局部最大值周围的区域很小(IE必须得到一个很好的解决方案才能击中最好的一个,否则你会遇到一个糟糕的区域),那么就需要更高级的算法。

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