Scipy Opt 遗传算法优化均方误差

问题描述

我正在尝试使用遗传算法找到模型的最佳 5 个参数(微分方程的解)来拟合时间序列。

我使用 Scikit-Opt 遗传算法 (https://scikit-opt.github.io/scikit-opt/#/en/README) 执行此操作,如下所示:

  1. 定义模型 --> model(a,b,c,d,e) 拟合时间序列 --> series

(model 给出了一个微分方程的解:一个与该系列长度相同的时间序列)

  1. 将算法的适应度函数定义为模型系列
  2. 的解之间的均方误差

def fitness_func(a,e): error = sklearn.metrics.mean_squared_error(model(a,e),series) return error

  1. 使用 lb(下限)和 ub(上限)等一些参数构建 GA,这两个边界通过手动拟合已知:

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)

  1. 运行 GA:

best_x,best_y = ga.run()

bext_x 是使均方误差最小化的 5ple 参数 (a,e)best_y 是模型的 best_x 参数的均方误差值

当我运行代码时,它可以工作(我的意思是,生成 5 个参数,求解模型并计算解与 系列间的均方误差以找到最小化它的参数)但是它没有优化错误并且给出的参数也不适合该系列。

我绘制结果并发现:

enter image description here

即使我进行手动拟合,我也发现了比遗传算法发现的最佳均方误差

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...