\chapter{时序模型}

在数字孪生实践困境中涉及到了诸多现实难题，如多系统融合、数字化率低、应用场景单一等等。本文在考虑现实应用场景需要后，根据另外两项研究基础，建立虚拟世界的时序模型，扩充了数字孪生系统的应用范围和场景，降低系统使用难度和场景构建难度。

在设计时序模型前，还需要设计清楚多复杂系统的状态模型和事件模型，时序模型建立在该两项技术基础上。

\section{状态模型}

在所有的节点集群中，将节点分为三大类：
\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为节点数量，元素为每个节点的状态，复杂系统每秒的状态变换可以描述为一个向量在一组事件下转变为另一个n维向量。

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

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

其数据格式设计为:

\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}

\section{时序模型}

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

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

时序模型允许在OneDT系统中随时在虚拟世界中将复杂系统恢复到过去、现在以及推演的未来某一刻。推演数据来源于过去的状态数据和事件数据，推演方法包括统计学方法和循环神经网络预测。


\begin{table}
    \centering
    \caption{复杂系统状态转移表}
    \label{tab-c4}
    \begin{tabular}{cccccccc}
        \toprule
               & 过去A & 过去B & ... & 现在 & ... & 未来A & 未来B \\

        \midrule
         节点a & a1    & a2    & ... & an   & ... & an+1 & an+2 \\
         节点b & b1    & b2    & ... & bn   & ... & an+1 & an+2 \\
         ..... & ....  & ....  & ... & .... & ... & an+1 & an+2 \\
         节点n & n1    & n2    & ... & nn   & ... & an+1 & an+2 \\
        \bottomrule
    \end{tabular}
\end{table}

本文验证时序模型功能时采用的时序分解法去预测未来数据，将一个时间信号视为由四部分趋势影响叠加合成：

\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}

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