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

\section{事件模型}

有泛含某种特定逻辑的单条或者多条消息在本平台归纳为事件, 事件是在整个平台流转的最小价值信息，也是消息网络订阅主题的发布内容，每个主题仅会发布同种事件，事件具有特定的数据结构，不一定与节点输入输出数据结构相符，所以事件在到达和传出节点时会做一次结构转换。这样特定主体的事件就可以在整个消息网络和节点网络传播，并且即时生效和作用。事件也是数据存储的单位，每个事件都会作为一条消息存储在数据库中，后续所有基于数据的后期分析实质都是在这些时序事件中发现规则。
其数据格式设计为:

\begin{lstlisting}
{
	"distinct_id": "2b0a6f51a3cd6775",
	"time": 1434556935000,
	"type": "track",
	"anonymous_id": "2b0a6f51a3cd6775",
	"event": "",
	"properties": { 
        "ip" : "180.79.35.65",
        "data": "demo"
	} 
}
\end{lstlisting}

\section{时序模型}

时序模型是本平台最为核心的一个基础功能和分析手段。在已经运行的集群网络，会收集所有的历史事件，这些历史数据是所有数据分析的基础。整个集群会包含三个状态，过去，现在，未来。现在状态 就是物理集群目前的状态，会按照设定好的规则和节点逻辑运行。过去和未来状态皆是模拟场景，发生在用户端，用户在客户端可以自由的调整时间进度条，往前拉，虚拟场景会自动重新模拟当时的事件数据并按照当时的逻辑规则运行，往后拉，会根据历史的事件数据进行拟合，去预测未来的集群状态和数据。相当于在虚拟世界可以自由的调整时间线，平台会根据时间戳自动重播历史事件消息或者预测未来数据。
本文采用时序分解法去预测未来数据，一个时间信号主要有四部分趋势影响叠加合成：

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

对于四种因素预测，可采用最典型的移动平均法，也可以如第四章所示自行提交预测函数进行预测
