シミュレーションの「状態」が関数になるようにシミュレーションを実装したことを確認してください。つまり、時間の関数です。
時間での初期状態が与えられると、任意T0
の時間でシミュレーション フレームを構築できるはずです。たとえば、初期の定常状態でイベントがない (まだ) 場合は、恒等関数に等しいので.Tn
n
Tn == Tn+1
ある時点でパイロット アクション イベントが与えられると、任意Ta
のフレームを作成できるはずです。したがって、イベントは、引数として時間値を取り、その時間のシミュレーションのフレームを返す関数を変更するものと考えてください。Ta+n
n
シミュレーションの制御状態を表す (時間、関数) ペアのZipperとしてイベントの履歴を実装します。「現在」の状態がフォーカスされ、右側に将来の状態のリストが表示され、左側に過去の状態が表示されます。そのようです:
([past], present, [future])
シミュレーションの状態が変化するたびに、新しい状態関数を に記録しfuture
ます。シミュレーションの実行は、リストから関数を取り出しfuture
て現在の時間を渡すという問題になります。past
逆方向に実行することは、代わりにリストからイベントを取り出すことを除いて、まったく同じです。
したがって、時間に達していて、Tn
時間まで巻き戻したい場合は、属性が 未満の最新の状態Tn-1
のリストを調べます。その属性に渡すと、 time でのシミュレーションの状態が得られます。past
time
n-1
n-1
function
Tn-1
ここでは、Java で Zipper データ構造を実装しました。