\chapter{时序模型}

在上文中我们将数字孪生系统的基本能力归纳为描述、诊断、预测与决策。其中预测是在四项基本能力中最为复杂和最具技术挑战力的能力，也是颇具实践价值的重要内容。在数字孪生涉及的物理空间和虚拟空间组合而成的庞大复杂网络中，涉及的数据量在时间、空间和结构上都具有庞大的复杂性和覆盖面\cite{ref21}，要去解决数字孪生的预测问题，首先就要解决如何去定义问题，如何去描述预测的目标或者说是结果，如何去在数学上描述这个网络和这个网络的动力系统，如何去统一去预测网络中的非线性复杂网络参数和简单线性参数\cite{ref23}\cite{ref24}，这即是本章探讨研究的内容。下文将探讨数字孪生系统的预测性，并以状态模型去描述数字孪生整个复杂网络，用事件模型去描述复杂网络变化的动力，用时序模型去解决复杂网络下的多层次时间序列参数的预测问题\cite{ref30}。

\section{预测性分析}

预测是一种利用数据和模型来分析未来可能发生的情况的方法，应用于各种领域，如经济、气象、医疗、教育等，其目的是为决策者提供有用的信息，帮助制定更合理的计划和策略，可以有效提高效率、降低风险、增强竞争力，问题是如何处理现实系统的不确定性、复杂性、动态性等因素，以及如何保证预测结果的准确性和可靠性。预测理论基于当前和过去的数据和知识，可以用于预测未来。对于时间序列，通常认为可以识别出历史值中的模式，并成功地将其实现到预测未来值的过程中。在未来时间段内，单个时间序列的预测有许多选项，包括期望值（称为点预测）、预测区间、百分位数和整个预测分布，这些结果集合可以被认为是“预测”。预测过程还有许多其他类型结果，如预测目标可能是事件（例如设备故障等）\cite{ref20}。

对于可以预测的事件或者说数据，通常取决于以下几种因素\cite{ref19}：

\begin{enumerate}
    \item 影响因素的了解程度;
    \item 可用数据量;
    \item 预测结果是否会影响试图预测的事物。
\end{enumerate}
对于数字孪生系统，前一二项取决于具体的孪生场景，比如智慧城市，智慧工厂，产线等，以目前的技术水平，前一二项会影响预测结果的精度，但不会导致无法预测的情况发生，由于目前的孪生对象皆为客观存在的事物或者流程，暂未涉及人的社会因素，无法像汇率股价预测等其结果会影响人的先关信心，从而影响其本身发展，所以以其理论，数字孪生系统可以实现其预测功能，其精度受制于对影响因素的了解程度和可用数据量。

\section{时间序列数据}
在数字孪生系统中几乎全部采集的数据都是时间信号数据，因此在进行参数预测前，我们需要分析时间序列数据的特性，以便于选择合适的预测模型。时间序列数据是指按照时间顺序排列的一组数据，通常是等间隔采样的,时间序列数据的特点是随时间变化，具有一定的趋势性、周期性和随机性，这些特点决定了时间序列数据的预测模型必须具有适应性、灵活性和鲁棒性，才能更好地适应时间序列数据的变化。在这些时序数据中，根据其变化的性质，将其成分分为四类：
\begin{enumerate}
    \item 确定性数据(线性数据) \\
        这些数据的特征是存在确定性趋势，其变化是由确定性因素引起的，如季节性、趋势性、周期性等，这些因素的影响是可以预测的，因此这类数据的预测是可行的。其趋势模式是数据的长期演变，它可以增加或减少，并且可以有不同的形式，如线性，指数和阻尼等\cite{ref31}。

    \item 混沌数据(非线性数据) \\
        该数据的特征通常表现为不同程度非线性的相关性，通常由未知或不完全理解的多种关联因素影响，其对初始条件具有较高的敏感度，系统中的小平滑扰动或测量误差会导致数据序列的趋势突然变化，且其因为复杂网络的抗干扰性它在短期内趋势往往是确定性的，但在长期看表征是随机的，因此其预测是一项非常困难的问题\cite{ref34}\cite{ref35}\cite{ref33}。

    \item 长依赖数据 \\
        该类数据的特征表现为对历史数据不同时间步长具有较强的相关性，其预测的困难在于其长期依赖性，即当前数据的预测值与历史数据的预测值之间存在较强的相关性，因此其预测需要考虑长期历史数据的预测值，这就导致了预测的复杂性\cite{ref36}。

    \item 噪声数据 \\
        此数据的特征在于存在单位根模式。当时间序列具有随机增加或减少趋势或随机季节性时，会出现在此基础上的随机偏移值。噪声数据的存在会导致时间序列中的非平稳性。因为大多数时间序列模型分析时都假定具有平稳性，即统计特性不随时间变化，这在实践中这是不现实的，因此在数据预处理时需要考虑对随机噪声的处理\cite{ref32}。

\end{enumerate}

考虑到数字孪生系统中时间信号数据的来源广泛，其数据的特性也是多样的，数据成分复杂，比如对于以线性成分为主的信号预测，可以采取拟合和时序分解方法进行快速预测，对于影响因素众多的以非线性数据和长依赖数据为主的时间信号预测可以选用向量机、RNN、LSTM等方法进行预测。因此在进行整系统预测时，需要根据节点数据的特性选择合适的预测模型，以达到全局最佳的预测效果，为此，本平台以状态-事件-时序三级模型为基础针对复杂网络设计了一种可以融合多种预测手段的分析方法。


\section{状态模型}
在进行预测过程中，我们首先需要定义问题，决定去预测什么？在OneDT系统中，我们需要预测的是整个系统中所有节点的状态，这些节点的状态组成了整个系统的状态，即整个系统的状态模型。如某节点的状态空间，可以是离散的标签值，也可以是连续的物理量，如速度、位姿、坐标、温度等。为了描述整个系统，在所有的节点集群中，将节点分为三大类：
\begin{description}
    \item[服务节点]: 主要为系统服务节点，运行平台核心功能或一部分核心规则
    \item[物理节点]: 一个接入到消息网络的真实物理设备，其响应会在物理世界生效
    \item[虚拟节点]: 主要为规则节点或者虚体逻辑节点，代表一个虚拟物品或者一段规则。
\end{description}


每个节点在接入消息网络时会自动同步输入输出接口，为方便节点运算管理和展示，对节点库内置有限状态机逻辑，可在算法内直接调用和修改。
除了在节点算法内自行配置状态机外，还可以在用户端对节点状态转移表进行直接控制，如表\ref{tab-c3}所示根据不同的输入编辑状态转换逻辑
\begin{table}
    \centering
    \caption{某节点状态转移表}
    \label{tab-c3}
    \begin{tabular}{cccc}
        \toprule
               & 状态A & 状态B & 状态C \\
        \midrule
         事件A & ....  & ...   & ... \\
         事件B & ....  & ...   & ... \\
         事件C & ....  & 状态C & ... \\
         事件D & ....  & ...   & ... \\
        \bottomrule
    \end{tabular}
\end{table}

在一个复杂系统中，可能涉及成白上千甚至上万的异构节点，节点在各个时间点的状态的合集组成了该复杂系统的状态，该状态可以有一个n维的向量描述，称之为相空间或者状态空间，n为节点数量，元素为每个节点的状态，复杂系统每秒的状态变换可以描述为一组相空间在一组事件下转变为另一组相空间。这类似于有限状态机的描述，但是因为每个节点的状态转换可能由多个事件引起，每个事件也有可能导致多个节点状态迁移，同时状态和事件也可能为连续的自然数，因此不太适合有限状态机方法，但是其状态描述值得用来描述复杂网络所有集群节点的状态。

\section{事件模型}
\subsection{事件定义}
在本平台中，一条或多条包含特定逻辑的消息被归纳为事件。事件是整个平台流转的最小价值信息单元，是消息网络订阅主题的发布内容，推动中系统中某些节点发生变化，是整个系统网络的动力系统。每个主题仅发布相同类型的事件，而事件具有特定的数据结构。需要注意的是，事件的数据结构可能与节点的输入输出数据结构不一致，因此在事件到达和离开节点时，需要进行一次结构转换。通过这种方式，特定主体的事件可以在整个消息网络和节点网络中传播，并且实时生效和发挥作用。

事件还作为数据存储的单位，每个事件都会作为一条消息存储在数据库中。后续基于数据的分析实际上是在这些事件中挖掘潜在规律。

其数据格式设计为:

\begin{lstlisting}
{
	"distinct_id": "2b0a6f51a3cd6775",
	"time": 1434556935000,
	"type": "track",
	"anonymous_id": "2b0a6f51a3cd6775",
	"event": "",
	"properties": { 
        "ip" : "180.79.35.65",
        "data": {
        "demo1": test_data,
        "demo2": ....,
        .....
        }
	} 
}
\end{lstlisting}
事件作为动态的最小单元，它推动着整个系统的变化，事件的发生和传播是整个系统的动力，事件的类型和数据结构是整个系统的逻辑，
\subsection{动力分析}

事件是每个节点状态变化的动力，这个动力因素既可以是极限环（周期性的）也可以是混沌的，是两个节点之间的信息交互，即两节点之间存在耦合作用，因此数字孪生所有节点就形成了一个动力学网络，事件系统就是其动力学系统\cite{ref22}。设网络有N个节点,第i个节点在t时刻的n维状态变量是$x^i_t$，单个节点不考虑系统相互作用其状态方程为$x^i_{t+1} = f(x^i_t)$；设网络有M种事件，第j种事件在t时刻发生描述为$y^j_t$，$g_{ij}$为第j种事件作用于第i种节点的耦合矩阵，$h^i$为第i个节点的拟合函数。因此，某个节点的状态方程为：

\begin{equation}
    x^i_{t+1} = h^i(f(x^i_t) + \sum_{j=1}^{M}g_{ij}y^j_t)
    \label{eq1}
\end{equation}

$X_t$为t时刻整个系统的状态矩阵，$Y_t$为t时刻所有事件矩阵，$H$为整个系统的预测函数，$F$为整个系统的自响应函数，$G$为作用矩阵，整个系统的状态方程描述为：

\begin{equation}
    X_{t+1} = H(F(X_t) + GY_t)
    \label{eq2}
\end{equation}

\section{时序模型}

时序模型是本平台最核心的高级功能和分析手段之一。在运行中的集群网络中，会收集所有历史事件，这些历史数据为所有数据分析提供基础。整个集群包含三个状态：过去、现在和未来。现在状态是物理集群目前的状态，按照预定的规则和节点逻辑运行。过去和未来状态均为模拟场景，发生在用户端。

用户可在客户端自由调整时间进度条。向前拉动时，虚拟场景会自动重新模拟当时的事件数据并按照当时的逻辑规则运行。向后拉动时，系统会根据历史事件数据进行拟合，预测未来的集群状态和数据。这相当于在虚拟世界中可以自由调整时间线，平台会根据时间戳自动重播历史事件消息或预测未来数据。

时序模型允许在OneDT系统中随时在虚拟世界中将复杂系统恢复到过去、现在以及推演的未来某一刻。推演数据来源于过去的状态数据和事件数据，如式\ref{eq1}推演根据预测目标的特点分为线性预测和非线性预测，并使用合适的方法确定预测函数$h^i$，从而确定系统的预测函数$H$。

\subsection{线性预测}


\begin{table}
    \centering
    \caption{复杂系统状态迁移}
    \label{tab-c4}
    \begin{tabular}{cccccccc}
        \toprule
               & ... & 过去$t-2$ &  过去$t-1$ & 现在$t$ & 未来$t+1$ & 未来$t+2$ & ... \\

        \midrule
         节点a & ...    & $x^a_{t-2}$  & $x^a_{t-1}$ &  $x^a_t$  &  $x^a_{t+1}$ & $x^a_{t+2}$  & ... \\
         节点b & ...    & $x^b_{t-2}$  & $x^b_{t-1}$ &  $x^b_t$  &  $x^b_{t+1}$ & $x^b_{t+2}$  & ... \\
         ..... & ...    & ....         & ...         &  ...      &  ...         & ...          & ...  \\
         节点n & ...    & $x^n_{t-2}$  & $x^n_{t-1}$ &  $x^n_t$  &  $x^n_{t+1}$ & $x^n_{t+2}$ & ... \\
        \bottomrule
    \end{tabular}
\end{table}

如表\ref{tab-c4}所示，为系统的状态迁移表，其中每一行代表一个节点，每一列代表一个时间点，每个节点在每个时间点的状态用$x^i_t$表示。系统的预测功能就是根据历史的节点状态矩阵$X_t$ 和 事件矩阵$T_t$ 去填充上表未来某个时刻的$X_{t+\delta}$，系统现有的状态模型机制和事件模型机制已经将过去及现在的数据记录，时序模型就是对某个节点选择合适的预测函数$h^i$，从而形成整个系统的预测函数$H$。

对于简单线性参数的预估，本文采用的时序分解法去预测未来数据，将一个时间信号视为由四部分趋势影响叠加合成：

\begin{description}
    \item[长期趋势(Secular trend,T)] 指在较长时期内持续发展变化的一种趋向或状态。
    \item[季节变动(Seasonal Variation,S)] 由于季节的变化引起的规则变动
    \item[循环波动(Cyclical Variation,C)] 指以若干年为期限，不具严格规则的周期性连续变动
    \item[不规则波动(Irregular Variation,I)] 指由于众多偶然因素对时间序列造成的影响
\end{description}

对于不同的信号，其特征不同，预测算法参数也应该有偏重，具体的预测算法参数和模型可以由用户配置，也可使用默认配置。

预测模型可采用:

\begin{description}
    \item[加法模型] $ Y_t = T_t + S_t + C_t + I_t $
    \item[乘法模型] $ Y_t = T_t * S_t * C_t * I_t $
    \item[加乘模型] $ Y_t = T_t * S_t * C_t + I_t $
\end{description}

对于四种因素预测，可采用最典型的移动平均法，也可以如第五章所示自行提交预测函数进行预测。
针对不同特点的数据源应该采用不同的时序预测方法，其机制已经在本系统内实现，具体的预测方法可以根据不同节点选择或者填写不同的预测方法或函数。

\subsection{非线性预测}
对于复杂系统的非线性参数预测，本文采用递归神经网络预测未来数据。目前，递归神经网络（RNN）模型是顺序数据建模中最受欢迎的机器学习模型之一，是一种适用于处理序列数据的神经网络结构，相较于传统的前馈神经网络（Feedforward Neural Network），RNN可以处理不定长的序列数据，因此在时序预测、自然语言处理、语音识别等领域中具有广泛应用\cite{ref25}\cite{ref26}。

\begin{figure}[h!]
    \centering
    \includegraphics[width=1\textwidth]{figure/f39.png}
    \caption{预测网络图}
    \label{fig-f39}
\end{figure}

在参数预测中，考虑到数据的时间序列特性，大量系统参数包含混沌成分，因此采用循环神经网络（RNN）来预测未来的数据\cite{ref27}。RNN的结构如图\ref{fig-f39}所示，为使用了单个全连接层的单向RNN网络。
采用RNN神经网络预测的好处是可以对整个系统未来状态进行预测，在使用传统方法进行预测时，只能对单个参数进行预测，而RNN可以以某刻所有节点状态作为输入，如表\ref{tab-c4}所示，过去所有节点的状态变换皆可一次性作为rnn网络训练数据输入，一次输入即可得到整个系统的状态预测，由于对于部分数据来说存在良好的线性性，所有采取传统的预测方法可以取得更好的分析性能和效率，因此上文仅描述了单个节点的rnn预测网络，对于整体预测，如表\ref{tab-c4}所示其结果是有每个节点的预测组合而成，本平台已状态-事件-时序模型为基础，提供了一个对多目标大系统的预测容器，对于每个单目标，可以根据其特性选用不同的预测手段，相对于对于这个容器，其每个节点输入输出已经定义完成，用户可以根据其输入特性配置不同预测手段计算其输出，配置方法将在第5章知识模型讲述，用户可以自由的选择程序接入、上传代码或者上传公式。

