|
@@ -20,7 +20,7 @@ train_start = 15000
|
|
|
train_len = 5000
|
|
|
train_warmup = 100
|
|
|
predict_warmup = 100
|
|
|
-predict_len = 500
|
|
|
+predict_len = 5000
|
|
|
|
|
|
Koopmanconfig = KoopmanESNConfig(
|
|
|
units=latent_dim,
|
|
@@ -37,7 +37,7 @@ Koopmanconfig = KoopmanESNConfig(
|
|
|
)
|
|
|
|
|
|
ESNconfig = KoopmanESNConfig(
|
|
|
- units=1000,
|
|
|
+ units=500,
|
|
|
lr=lr,
|
|
|
sr=sr,
|
|
|
sp=sp,
|
|
@@ -47,7 +47,7 @@ ESNconfig = KoopmanESNConfig(
|
|
|
train_warmup=train_warmup,
|
|
|
predict_warmup=predict_warmup,
|
|
|
predict_len=predict_len,
|
|
|
- state_dim=latent_dim
|
|
|
+ state_dim=state_dim
|
|
|
)
|
|
|
|
|
|
KoopESNModel = KoopmanESN(
|
|
@@ -57,48 +57,42 @@ KoopESNModel = KoopmanESN(
|
|
|
ESNModel = ESN(
|
|
|
config=ESNconfig
|
|
|
)
|
|
|
-_, DataTrain, DataWarm, DataVal = DataLoad('./DataLib/LatentNor.csv', Koopmanconfig)
|
|
|
-# _, DataTrain, DataWarm = DataLoad('./DataLib/DataNor.csv', config)
|
|
|
-
|
|
|
+_, DataTrainKoop, DataWarmKoop, DataValKoop = DataLoad('./DataLib/LatentNor.csv', Koopmanconfig)
|
|
|
# KoopmanESN
|
|
|
-KoopESNModel.koopmanesn_train(DataTrain)
|
|
|
-DataPreKoop = KoopESNModel.predict(DataWarm)
|
|
|
-
|
|
|
-# ESN
|
|
|
-ESNModel.esn_train(DataTrain)
|
|
|
-DataPreESN = ESNModel.predict(DataWarm)
|
|
|
+KoopESNModel.koopmanesn_train(DataTrainKoop)
|
|
|
+DataPreKoop = KoopESNModel.predict(DataWarmKoop)
|
|
|
|
|
|
DataPreKoop_Ten = torch.from_numpy(DataPreKoop).float()
|
|
|
-DataPreESN_Ten = torch.from_numpy(DataPreESN).float()
|
|
|
-DataVal_Ten = torch.from_numpy(DataVal).float()
|
|
|
-DataWarm_Ten = torch.from_numpy(DataWarm).float()
|
|
|
+DataValKoop_Ten = torch.from_numpy(DataValKoop).float()
|
|
|
+DataWarmKoop_Ten = torch.from_numpy(DataWarmKoop).float()
|
|
|
|
|
|
StatePreKoop_Ten = decoder(DataPreKoop_Ten)
|
|
|
-StatePreESN_Ten = decoder(DataPreESN_Ten)
|
|
|
-StateVal_Ten = decoder(DataVal_Ten)
|
|
|
-StateWarm_Ten = decoder(DataWarm_Ten)
|
|
|
+StateValKoop_Ten = decoder(DataValKoop_Ten)
|
|
|
+StateWarmKoop_Ten = decoder(DataWarmKoop_Ten)
|
|
|
|
|
|
StatePreKoop = StatePreKoop_Ten.detach().numpy()
|
|
|
-StatePreESN = StatePreESN_Ten.detach().numpy()
|
|
|
-StateVal = StateVal_Ten.detach().numpy()
|
|
|
-StateWarm = StateWarm_Ten.detach().numpy()
|
|
|
+StateValKoop = StateValKoop_Ten.detach().numpy()
|
|
|
+StateWarmKoop = StateWarmKoop_Ten.detach().numpy()
|
|
|
|
|
|
-KoopMSE = np.linalg.norm(StatePreKoop - StateVal, ord='fro') ** 2 / np.prod(StateVal.shape)
|
|
|
-ESNMSE = np.linalg.norm(StatePreESN - StateVal, ord='fro') ** 2 / np.prod(StateVal.shape)
|
|
|
+KoopMSE = np.linalg.norm(StatePreKoop - StateValKoop, ord='fro') ** 2 / np.prod(StateValKoop.shape)
|
|
|
print(KoopMSE)
|
|
|
-print(ESNMSE)
|
|
|
|
|
|
t = np.arange(Koopmanconfig.predict_warmup + Koopmanconfig.predict_len)
|
|
|
|
|
|
+DataMaxMin = np.loadtxt('./DataLib/DataMaxMin.csv', delimiter=',')
|
|
|
+DataMax = DataMaxMin[0, :]
|
|
|
+DataMin = DataMaxMin[1, :]
|
|
|
+
|
|
|
+StateWarmKoop = (StateWarmKoop + 1) * (DataMax-DataMin) + DataMin
|
|
|
+StatePreKoop = (StatePreKoop + 1) * (DataMax-DataMin) + DataMin
|
|
|
+StateValKoop = (StateValKoop + 1) * (DataMax-DataMin) + DataMin
|
|
|
+
|
|
|
for fea in np.arange(state_dim):
|
|
|
plt.figure(fea)
|
|
|
- plt.plot(t[:Koopmanconfig.predict_warmup], StateWarm[:, fea],
|
|
|
- linestyle="-", color='black', label='StateWarm')
|
|
|
+ plt.plot(t[:Koopmanconfig.predict_warmup], StateWarmKoop[:, fea])
|
|
|
plt.plot(t[-Koopmanconfig.predict_len:], StatePreKoop[:, fea],
|
|
|
linestyle="--", color='red', label='KoopmanESNPre')
|
|
|
- plt.plot(t[-Koopmanconfig.predict_len:], StatePreESN[:, fea],
|
|
|
- linestyle="--", color='green', label='ESNPre')
|
|
|
- plt.plot(t[-Koopmanconfig.predict_len:], StateVal[:, fea],
|
|
|
+ plt.plot(t[-Koopmanconfig.predict_len:], StateValKoop[:, fea],
|
|
|
linestyle="-", color='blue', label='StateReal')
|
|
|
plt.legend()
|
|
|
plt.show()
|