遗传算法:找到适合点的曲线
Genetic Algorithm : Find curve that fits points
我正在研究遗传算法。它是这样工作的:
- 输入:二维点列表
- 输入:曲线的度数
- 输出:以最佳方式通过点的曲线方程(尽量使点的Ys到曲线的垂直距离之和最小)
该算法为简单的直线和 2 次方程找到了好的方程。
但是对于 4 点和 3 度方程以及更多,它变得更加复杂。我找不到正确的参数组合:有时我必须等待 5 分钟,找到的曲线仍然很糟糕。我尝试修改许多参数,从人口规模到选择的 parents 数量...
在 GA 编程方面有名的 combinations/theorems 可以帮助我吗?
谢谢! :)
没那么复杂,n
次的多项式插值得到如下方程:
p(x) = c0 + c1 * x + c2 * x^2 + ... + cn * x^n = y
这意味着我们需要 n + 1
个系数 c0
到 cn
的基因。
适应度函数是所有点到曲线的距离平方和,下面是距离平方的公式。像这样一个较小的值显然更好,如果你不想,你可以取反(1 /平方距离之和):
d_squared(xi, yi) = (yi - p(xi))^2
我认为为了加快转换速度,您可以限制突变,例如变异时选择一个新值,概率为最小值和最大值(例如 -1000 和 1000)之间的概率为 20%,概率为 80%,一个介于 0.8 和 1.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),系数计算如下:
现在您需要使用参考页面来得出系数。
我正在研究遗传算法。它是这样工作的:
- 输入:二维点列表
- 输入:曲线的度数
- 输出:以最佳方式通过点的曲线方程(尽量使点的Ys到曲线的垂直距离之和最小)
该算法为简单的直线和 2 次方程找到了好的方程。
但是对于 4 点和 3 度方程以及更多,它变得更加复杂。我找不到正确的参数组合:有时我必须等待 5 分钟,找到的曲线仍然很糟糕。我尝试修改许多参数,从人口规模到选择的 parents 数量...
在 GA 编程方面有名的 combinations/theorems 可以帮助我吗?
谢谢! :)
没那么复杂,n
次的多项式插值得到如下方程:
p(x) = c0 + c1 * x + c2 * x^2 + ... + cn * x^n = y
这意味着我们需要 n + 1
个系数 c0
到 cn
的基因。
适应度函数是所有点到曲线的距离平方和,下面是距离平方的公式。像这样一个较小的值显然更好,如果你不想,你可以取反(1 /平方距离之和):
d_squared(xi, yi) = (yi - p(xi))^2
我认为为了加快转换速度,您可以限制突变,例如变异时选择一个新值,概率为最小值和最大值(例如 -1000 和 1000)之间的概率为 20%,概率为 80%,一个介于 0.8 和 1.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),系数计算如下:
现在您需要使用参考页面来得出系数。