遗传算法时间序列预测创建初始种群

Genetic Algorithm timeseries forcast creating an initial population

我正在构建一个在符号回归分析中进行时间序列预测的遗传算法。我正在尝试让算法找到一个与数据的潜在趋势相匹配的方程式。 (预测每月啤酒销量)

想法是使用类似 lisp 的表达式,将等式写在树中。这允许在 crossover/mating 阶段进行分支交换。

5* (5 +5)

写成:

X = '(mul 5 (add 5 5))'
Y = parser(X) 
y = ['mul', 5, ['add', 5, 5]]

我想知道如何创建一个初始群体集合,其中个体自动代表不同的表达方式。 “适合度”与每个方程式与潜在趋势的匹配程度有关。

例如,一个人可以是:'(add 100 (mul x (sin (mul x 3))))' 其中 x 是以月为单位的时间。

如何为我的人群自动生成表达式?我不知道该怎么做,任何帮助将不胜感激。

您可以使用递归和随机数生成器 random() 轻松解决此问题,其中 return 是一个介于 0 和 1 之间的(伪)随机数 float。这是一些伪代码:

randomExp() {
    // Choose a function(like mul or add):
    func = getRandomFunction() // Just choose one of your functions randomly.
    arg1 = ""
    rand1 = random()
    // Choose the arguments. You may choose other percentages here depending how deep you want it to be and how many 'x' you want to have.
    if(rand1 < 0.2)
        arg1 = randomExp() // Here add a new expression
    else if(rand1 < 0.5)
        arg1 = "x"
    else
        arg1 = randomConstant() // Get a random constant in a predefined range.
    // Do the same for the second argument:
    arg2 = ""
    …
    …
    // Put everything together and return it:
    return "("+func+" "+arg1+" "+arg2+")"
}

您可能还想限制递归深度,因为这可能 return 您是理论上无限长的表达式。