Release 8.0.0
This version includes all of the 2020-2022 work on Tiebreaking and various updates to develop since the last version.
Adds a separate array of RNG streams on each LP that aren’t to be utilized by developed models. These separate RNG streams can be utilized to leverage the deterministic RNG nature that ROSS can manage toward other goals of the ROSS engine itself.
Notable example use for this: Deterministic Tiebreaking Deterministic Tiebreaking can be implemented by creating a random value at the creation of an event, this value is encoded into the ROSS event struct and is utilized to break any event ties (same destination LP at same time). Because this separate RNG is only accessed by ROSS, it can be rolled back if the event becomes RC’d or cancelled. Because of determinism, any ordering as a result of this tiebreaker will be consistent across simulation runs regardless of event delivery order or stragglers. If a regular model-accessed LP RNG was used for this purpose, the tiebreaking sequence would be subject to interference.
Also included:
- Capability for zero-offset event unbiased tiebreaking
- User defined event priorities for tiebreaking (primary tie-breaker, then random tiebreaker used to break subsequent ties)
Given two events, their ordering in the simulation (regardless of execution mode) is dependent on the following cascading ruleset, subsequent rules are only triggered if a given rule is inconclusive (a tie):
- Virtual time timestamp
- User Defined Priority (lower value is “better”)
- The ‘i’th random tiebreaker value
- ‘i’th+1 random tiebreaker value (and so on – tiebreaker value indices greater than 0 are only used in case of comparing two – related – zero-offset events)
Seeds for both the model level and core RNG streams are individually specifiable at runtime via CLA.
As it shows up in the github release: https://github.com/ROSS-org/ROSS/releases/tag/v8.0.0