这是为上海大学构思的一个教学系统。得益于赵刚教授的指点,算是搞明白了几个概念的宏观意义。由于一些原因,中途离开了公司,不知道系统最后是否采用了这个思路。
一、术语
下列是为描述“模拟模型”而定义的几个术语:
- 事件过程(Event Process): 市场(Market)从一个状态(State)发展到另外一个状态(State)的过程,简称事件(Event)。市场就是这种事件的集合。发生时刻、过期条件、完成条件。
事件流(Event Stream): 具有一定先后顺序和(或)因果关系的一串事件称为事件流。
触发器(Trigger Source): 导致事件发生的原因或力称为事件的触发器,或称驱动者。
触发(Trigger): 触发器驱使事件开始的动作叫做触发。同时描述这种现象为事件发生。
投票者(Voter): 有的事件是市场内部机制产生的,有些事件是市场的外部参与者产生的,因此事件不一定有触发器。有个时候,某些事件的触发器不是我们所关心的,因此就忽略它;而有些事件的触发器正式是我们关注的,不能忽略,此时称触发器为投票者。 事件处理:就是投票者对特定事件进行某些处理和决策。事件处理是一个过程,需要或长或短的一定时间。事件处理的由采集开始,并由投票结束。
采集(Picking): 投票者选择一些事件准备进行处理的行为。
投票(Vote): 投票者的触发行为。投票动作以及其全过程称为选举(poll)。选举的结果决定了事件流的分支或是否终止。投票总是一个事件流的最开始,或者一次事件处理过程的最后步骤。
投票权(Voting right): 如果投票者可以触发某事件,那么就称投票者对此事件具有投票权。
二、静态模型

如上图所示,市场由很多的各种随机事件和非随机事件,以及一个未知投票者(实际上有很多,但是由于我们不关注不同的未知投票者有何区别,所以总认为只有一个),很多的扮演人投票者和合伙人投票者组成。
非随机事件是指在营运过程中,在某种场景中总是会出现的事件,譬如签约、加油、装货和卸货等等。随机事件则是可能会出现,可能无论如何也不会出现的事件,譬如突遇恶劣天气、偶尔碰到海盗等等。
一般说来,随机事件的出现一般是不可控的,它的投票者多为未知投票者,而非随机事件是可控的,它的投票者多为合伙人投票者和扮演人投票者。非随机事件是可控的,并不是说事件的一切都是不可确定的。随机事件的发生将会改变事件的某些因素。譬如说,公司老总不在,导致合同滞后2天才签字生效。事件发生的时间被随机事件改变了。
扮演人投票人,就是使用模拟系统进行模拟的人员,而合伙人投票者则是与扮演人投票者进行商务往来的合作方。通常,合伙人投票者的数目会远多于扮演人投票者的数目。投票者有working和idle2种状态。Working状态会对时间进行锁定,投票者所处的时刻是他最后一次投票的时刻。而市场时刻则是所有处于Working状态的全部投票者时刻的最滞后者的时刻。
投票人投票原则:1)原子时间段内,只能就一件事件进行投票;2)当投票者的时刻强先于市场时刻是,不能进行Working投票,但是可以进行Idle投票。
根据上面的定义,市场的运动(即市场状态的变化)是由于投票者的投票行为而产生的。如果市场的状态没有变化,可以认为时间静止的。而只要市场变化,那么市场的时刻就是向前移动的。
三、动态模型

上图是市场运动模型(投票模型)示意图。下面对它进行说明:
事实上,市场时刻和全部投票者的时刻是一致的。之所以单独度量是因为每次投票模型都当成是原子操作,导致处在这个原子操作过程中投票者观察到的事件是一样的。
市场中的事件可以按照发生的时间,有序的排列在带有时间刻度的时间轴上,不管是随机事件还是非随机事件;对于非随机事件,还可以对未发生的事件进行一定程度的预测,而随机事件的发生可能改变这些预测的结果。
市场中的一个事件能够被多个投票者进行采集、处理和投票(如Event α),但也可能没有任何投票者对它进行采集(如Eventα和Eventβ之间的2个事件)。
Working投票是对事件的处理,并对处理结果进行确认,消耗一定的时间,在处理事件的末尾由投票者驱动。
Idle投票表示不进行任何事件的处理,任由事件流逝。Idle投票由投票者显式驱动开始,由投票者开始一个Working投票隐式的结束。
投票者对采集的事件可以分为若干个步骤进行处理,处理过程也可以不连续。此时每个步骤就是一个子事件,其处理过程以及结果就是一次阶段性的投票。(如Actor B 对Eventα和Eventβ的处理。)
投票者的采集活动不一定是及时的,可以在事件发生一定时间之后,直到过期之前这段时间内可以随时采集。(如Actor A 对Eventα的采集。)
某些事件具有唯一排他性,当被一个投票者采集后,它将对其他投票者过期。(如Actor B 对Eventβ的采集。)而事件本身并没有过期。所以投票者看到事件过期与事件过期并不总是一致的。
根据上述说明,关于事件的时间可度良性,有以下公式1:
- Market.time = Min( WorkingVoter.time )
- Voter.time = LastVotedEvent.votingTime
- Event.votingTime = Event.prevVotedEvent.votingTime + Event.handlingTime
- Event.votingTime = Market.time + Event.handlingTime
Working投票的历时由实例定义,Idle投票历时由2个紧邻的Working投票决定,后发生的Working投票(nextWorkingPoll)的开始时刻(PickingTime)减去前一个发生的Working投票(prevWorkingPoll)的结束时刻(VotingTime),即:
IdlePoll.Duration = nextWorkingPoll.PickingTime – prevWorkingPoll.VotingTime
四、模型应用

- 事实上,市场时刻和全部投票者的时刻是一致的。之所以单独度量是因为每次投票模型都当成是原子操作,导致处在这个原子操作过程中投票者观察到的事件是一样的 [return]