遗传算法:找到适合点的曲线

时间:2017-04-15 19:48:53

标签: algorithm curve points genetic

我正在研究遗传算法。以下是它的工作原理:

  • 输入:2D点列表
  • 输入:曲线的程度
  • 输出:以最佳方式通过点的曲线方程(尝试最小化从点's Ys到曲线的垂直距离之和)

该算法找到了简单直线和2度方程的良好方程。

但是对于4点和3度方程式等等,它变得更加复杂。我找不到合适的参数组合:有时我需要等待5分钟,找到的曲线仍然非常糟糕。我尝试修改许多参数,从人口规模到所选父母的数量......

GA编程中的着名组合/定理可以帮助我吗?

谢谢! :)

2 个答案:

答案 0 :(得分:2)

根据给出的内容,您需要一个多项式插值,其中,等式的次数是点数减去1。

n = (Number of points) - 1

现在已经说过,让我们假设您有5个点需要安装,我将在变量中定义它们:

var points = [[0,0], [2,3], [4,-1], [5,7], [6,9]]

请注意,点数组已按您需要执行的 x 值排序。

那么等式将是:

f(x) = a1*x^4 + a2*x^3 + a3*x^2 + a4*x + a5

现在基于定义(https://en.wikipedia.org/wiki/Polynomial_interpolation#Constructing_the_interpolation_polynomial),系数计算如下:

enter image description here

现在您需要使用引用的页面来提出系数。

答案 1 :(得分:1)

并不是那么复杂,对于n度的多项式插值,你得到以下等式:

p(x) = c0 + c1 * x + c2 * x^2 + ... + cn * x^n = y

这意味着系数n + 1c0需要cn个基因。

适应度函数是从点到曲线的所有平方距离的总和,下面是平方距离的公式。像这样一个较小的值显然更好,如果你不希望你可以采取逆(1 /平方距离之和):

d_squared(xi, yi) = (yi - p(xi))^2

我认为为了更快的转换,您可以限制突变,例如变异时选择一个新值,最小值和最大值之间的概率为20%(例如-1000和1000),80%概率是一个0.8到1.2之间的随机因子,用它来乘以旧值。