洛伦兹系统
数据生成见博文:混沌系统数值模拟


回声状态网络
动力学模型
- 状态更新函数

- 输出函数

结构下图所示,虚线连接不是必要的

python 实现
所需的包
import networkx as nx
import json
from decimal import Decimal
from collections import OrderedDict
配置文件
# if config file not exists, use this default config
default_config = """{
"input": {
"nodes": 2,
"functions":
[
"lambda x: np.cos(32 * np.pi * x)",
"lambda x: np.sin(32 * np.pi * x) + np.cos(128 * np.pi * x)"
],
"length": 5000
},
"reservoir": {
"start_node": 202,
"end_node": 203,
"step": 1,
"degree_function": "lambda x: np.sqrt(x)",
"sigma": 0.5,
"bias": 1,
"leakage_rate": 0.3,
"regression_parameter": 1e-8
},
"output": {
"nodes": 2
},
"training": {
"init": 1000,
"train": 3000,
"test": 2000,
"error": 1999
}
}
"""
Reservoir 类
- 默认读取配置文件 ‘reservoir.config’,如果找不到配置文件就用上面的默认配置
class Reservoir:
def __init__(self):
config_file_name = 'reservoir.config'
global config
config = json.loads(default_config, object_pairs_hook=OrderedDict)
# Input layer
self.M = config["input"]["nodes"]
self.input_len = config["input"]["length"]
self.input_func = []
dataset = []
for i in range(self.M):
self.input_func.append(eval(config["input"]["functions"][i]))
dataset.append(self.input_func[i](
np.arange(self.input_len) / self.input_len))
self.dataset = np.array(list(zip(*dataset))).T # shape = (M, length)
# Reservoir layer
self.start_node = config["reservoir"]["start_node"]
self.N = self.start_node
self.step = config["reservoir"]["step"]
self.end_node = config["reservoir"]["end_node"]
self.degree_func = eval(config["reservoir"]["degree_function"])
self.D = self.degree_func(self.start_node)
self.sigma = config["reservoir"]["sigma"]
self.bias = config["reservoir"]["bias"]
self.alpha = config["reservoir"]["leakage_rate"]
self.beta = config["reservoir"]["regression_parameter"]
# Output layer
self.P = config["output"]["nodes"]
# Training relevant
self.init_len = config["training"]["init"]
self.train_len = config
洛伦兹系统与ESN动力学模型

本文深入探讨了洛伦兹系统的混沌特性及其在回声状态网络(ESN)中的应用。通过Python实现ESN,重建了洛伦兹系统的动态行为,并详细解析了ESN的训练过程及预测效果。
最低0.47元/天 解锁文章
2403

被折叠的 条评论
为什么被折叠?



