I am trying to design a discrete event simulation where the execution of an event is independent of time. Choosing what event comes next is dependent only on the conditions of the model (in my case, a person), and they're executed one at a time.
I have found a couple of designs out there:
Event Scheduling - A queue of events is kept and during each event execution, new events are scheduled or old ones cancelled.
Activity Scanning - During each cycle, all the events are iterated through, and if the current state of the person satisfies the event's conditions for execution, that event is executed.
Graph of Events - Have a graph of events, and have each edge represent the conditions of the transition.
The considerations I have for each of the methods are the following:
Event Scheduling - The logic of what event should be added is distributed across the events, making it hard to keep track of. Moreover, the queue would get changed a lot, and because it's not time based, you'd have to iterate through the entire queue each time you want to make changes to find the event(s) to remove (for example, if you wanted to remove event B when preceded by two event A's).
Activity Scanning - The performance of it could be bad, especially if it has to iterate through many events to find the next one to execute during each cycle.
Graph of Events - If the graph is extremely large, initializing it and setting up all the edges could become cumbersome.
I wanted your opinions on which method might be the most suitable, and if so, in what ways I could address the considerations stated. Maybe a completely different design might be appropriate.
You question is not very clear to me, but I think that you could use a discrete event simulation system and ignoring time component. You can schedule all events 'right now' and it should work independetly of time domain. I am using SimPy http://simpy.sourceforge.net/ and IMO it is capable of it.