我正在尝试使用遗传算法找到模型的最佳 5 个参数(微分方程的解)以拟合时间序列。
我使用 Scikit-Opt 遗传算法 ( https://scikit-opt.github.io/scikit-opt/#/en/README ) 来执行以下操作:
- 定义模型 --> model(a, b, c, d, e)来拟合时间序列 --> series
(模型给出了一个微分方程的解:一个与该序列长度相同的时间序列)
- 将算法的适应度函数定义为模型解与序列解的均方误差
def fitness_func(a, b, c, d, e): error = sklearn.metrics.mean_squared_error(model(a, b, c, d, e), series) return error
- 使用一些参数构建 GA,如 lb(下界)和 ub(上界),这两个边界通过手动拟合已知:
sko.GA.GA(func = fitness_func0, n_dim = 5,size_pop = 100, max_iter = 50, lb = [-0.5, -0.3 ,0.01, 0.0001, 0.1],ub = [-0.01, -0.01, 0.5, 0.0625, 10], precision = 1e-4, prob_mut = 0.2)
- 运行 GA:
best_x, best_y = ga.run()
bext_x是使均方误差(a, b, c, d, e)最小化的参数中的 5 个, best_y是模型的 best_x 参数的均方误差值
当我运行代码时它可以工作(我的意思是,生成 5 个参数,求解模型并计算解决方案和系列之间的均方误差以找到使其最小化的参数),但它不会优化误差和给出的参数也不适合这个系列。
即使我进行手动拟合,我也发现了比遗传算法发现的最佳均方误差