\chapter{时序模型} 在数字孪生实践困境中涉及到了诸多现实难题,如多系统融合、数字化率低、应用场景单一等等。本文在考虑现实应用场景需要后,根据前面两项研究基础,建立虚拟世界的时序模型,扩充了数字孪生系统的应用范围和场景,降低系统使用难度和场景构建难度。 在设计时序模型前,还需要设计清楚多复杂系统的状态模型和事件模型,时序模型建立在该两项技术基础上。 \section{状态模型} 在所有的节点集群中,将节点分为三大类: \begin{description} \item[服务节点]: 主要为系统服务节点,运行平台核心功能或一部分核心规则 \item[物理节点]: 一个接入到消息网络的真实物理设备,其响应会在物理世界生效 \item[虚拟节点]: 主要为规则节点或者虚体逻辑节点,代表一个虚拟物品或者一段规则。 \end{description} 每个节点在接入消息网络时会自动同步输入输出接口,为方便节点运算管理和展示,对节点库内置有限状态机逻辑,可在算法内直接调用和修改。 除了在节点算法内自行配置状态机外,还可以在用户端对节点状态转移表进行直接控制,如下表所示根据不同的输入编辑状态转换逻辑 \begin{table} \centering \caption{节点状态转移表} \label{tab-three-line-table-example} \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-three-line-table-example} \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} 对于四种因素预测,可采用最典型的移动平均法,也可以如第四章所示自行提交预测函数进行预测。 针对不同特点的数据源应该采用不同的时序预测方法,其机制已经在本系统内实现,具体的预测方法可以根据不同节点选择或者填写不同的预测方法或函数。