public SimEventHandle(ISimEntity sender, ISimEntity target, ISimEvent simEvent, UniqueDouble udt) { _sender = sender; _target = target; _simEvent = simEvent; _udt = udt; }
/// <summary> /// Enqueues given event into queue. /// </summary> /// <param name="simEvent">Event to be enqueued into queue.</param> public void Enqueue(ISimEvent simEvent) { // Event is positioned using bisection. var min = 0; var max = _queue.Count; var newEntry = new QueueEntry(simEvent); while (min < max) { var mid = (max + min) / 2; var midEntry = _queue[mid]; if (midEntry.Event == simEvent) { return; } if (midEntry.SimTime < newEntry.SimTime) { max = mid; continue; } if (midEntry.SimTime == newEntry.SimTime && midEntry.Priority <= newEntry.Priority) { max = mid; continue; } min = mid + 1; } _queue.Insert(max, newEntry); }
public ISimEventHandle Register(ISimEntity sender, ISimEntity target, ISimEvent simEvent, double t) { if (t < 0) { Console.WriteLine("Cannot register an event in the past!"); System.Diagnostics.StackTrace st = new StackTrace(true); Console.WriteLine(st.ToString()); Environment.Exit(-1); } SingletonLogger.Instance().DebugLog(typeof(Scheduler), "@ " + Scheduler.GetTime() + " Register src:" + sender + " dst:" + target + " ev:" + simEvent + " t:" + t); double deliveryTime = Scheduler.GetTime() + t; ISimEventHandle eventHandle = new SimEventHandle(sender, target, simEvent, new UniqueDouble(deliveryTime)); HashSet <ISimEventHandle> eventsFrom = Instance().GetEventsFrom(eventHandle.Sender); eventsFrom.Add(eventHandle); HashSet <ISimEventHandle> eventsTo = Instance().GetEventsTo(eventHandle.Target); eventsTo.Add(eventHandle); Instance()._ud2ehandle.Add(eventHandle.UDT, eventHandle); return(eventHandle); }
private int GetPriority(ISimEvent simEvent) { if (simEvent is OrderBookEvent) { return(1); } if (simEvent is NewPriceRequestEvent) { return(2); } if (simEvent is MarketTradeEvent) { return(3); } return(10); }
/// <summary> /// Removes given event from simulation. /// </summary> /// <param name="simEvent">Eventt to be removed from simulation.</param> public void CancelEvent(ISimEvent simEvent) { _queue.Remove(simEvent); }
/// <summary> /// Adds a new event into simulation queue. /// </summary> /// <param name="simEvent">An event to be simulated.</param> public void AddEvent(ISimEvent simEvent) { _queue.Enqueue(simEvent); }
/// <summary> /// Fires an AfterEventSimulation event. /// </summary> /// <param name="simEvent">Simulation event that was just simulated.</param> private void FireAfterEventSimulation(ISimEvent simEvent) { AfterEventSimulation?.Invoke(this, new EventArgs <ISimEvent>(simEvent)); }
public QueueEntry(ISimEvent simEvent) { Event = simEvent; SimTime = simEvent.SimTime; Priority = GetPriority(simEvent); }
/// <summary> /// Removes event from queue. /// </summary> /// <param name="simEvent">Event to be removed from queue.</param> public void Remove(ISimEvent simEvent) { _queue.RemoveAll(entry => entry.Event == simEvent); }
public abstract void Recv(ISimEntity src, ISimEvent simEvent);
protected ISimEventHandle Send(ISimEntity dst, ISimEvent simEvent, double t) { return(Scheduler.Instance().Register(this, dst, simEvent, t)); }
// receive a signal from the Simulation (via the Population) public override void Recv(ISimEntity src, ISimEvent simEvent) { if (Orderbook == null) { return; } if (LoggerDiags.Enabled) { SingletonLogger.Instance().DebugLog(typeof(AbstractAgent), "AbstractAgent " + GetName() + "recv ISimEvent " + simEvent + " @ " + Scheduler.GetTime()); } // events received from the DES if (simEvent is ActionPrompt) { if (DecideToAct()) { if (LoggerDiags.Enabled) { SingletonLogger.Instance().DebugLog(typeof(AbstractAgent), "AbstractAgent " + GetName() + "acts @ " + Scheduler.GetTime() + " I have " + _orders.Count + " orders open"); } EvaluateAllOpenOrders(); if (DecideToMakeOrder()) { if (LoggerDiags.Enabled) { SingletonLogger.Instance().DebugLog(typeof(AbstractAgent), "AbstractAgent " + GetName() + "makes order @ " + Scheduler.GetTime()); } if (!Orderbook.isNonDegenerate()) { SingletonLogger.Instance().WarningLog(typeof(AbstractAgent), "AbstractAgent " + GetName() + " witnesses Orderbook blowup @ " + Scheduler.GetTime() + "\n" + Orderbook.ToStringLong()); } IOrder newOrder = null; if (DecideToSubmitBid()) { if (LoggerDiags.Enabled) { SingletonLogger.Instance().DebugLog(typeof(AbstractAgent), "AbstractAgent " + GetName() + " submits bid @ " + Scheduler.GetTime()); } // bid double price = GetBidPrice(); int volume = GetBidVolume(); if (volume > 0) { newOrder = Orderbook.addBid(price, volume, this); } else { if (LoggerDiags.Enabled) { SingletonLogger.Instance().WarningLog(typeof(AbstractAgent), "AbstractAgent " + GetName() + " attempts unsuccessful zero sized bid @ " + Scheduler.GetTime()); } } } else { if (LoggerDiags.Enabled) { SingletonLogger.Instance().DebugLog(typeof(AbstractAgent), "AbstractAgent " + GetName() + " submits ask @ " + Scheduler.GetTime()); } // ask double price = GetAskPrice(); int volume = GetAskVolume(); if (volume > 0) { newOrder = Orderbook.addAsk(price, volume, this); } else { if (LoggerDiags.Enabled) { SingletonLogger.Instance().WarningLog(typeof(AbstractAgent), "AbstractAgent " + GetName() + " attempts unsuccessful zero sized ask @ " + Scheduler.GetTime()); } } } if (newOrder != null) { // may be null if dual volume is 0 preventing creation of new orders AddToOpenOrderList(newOrder); if (LoggerDiags.Enabled) { SingletonLogger.Instance().DebugLog(typeof(AbstractAgent), "AbstractAgent " + GetName() + " submitted " + newOrder + " @ " + Scheduler.GetTime()); } } else { throw new Exception("We got a problem"); } } } double timeToNextPrompt = GetTimeToNextActionPrompt(); if (timeToNextPrompt < 0.0) { // agent checks out of ecosystem by indicating a negative time if (LoggerDiags.Enabled) { SingletonLogger.Instance().WarningLog(typeof(AbstractAgent), "AbstractAgent " + GetName() + " leaves simulation by indicating negative prompt time @ " + Scheduler.GetTime()); } } else { this.Send(this, simEvent, timeToNextPrompt); } } }
public override void Recv(ISimEntity src, ISimEvent simEvent) { // no op // throw new Exception("Unexpected call to Simulation.Recv"); }
public override void Recv(ISimEntity src, ISimEvent simEvent) { // no op }