/// <summary> /// Call this method for a single run without simulation. /// </summary> /// <param name="task"></param> /// <param name="simulationId"></param> /// <returns></returns> public async Task InitializeMrp(MrpTask task, int simulationId) { await Task.Run(async() => { _messageHub.SendToAllClients("Prepare InMemory Tables...", MessageType.info); rebuildNets = new RebuildNets(_context); capacityScheduling = new CapacityScheduling(_context); _context = InMemoryContext.CreateInMemoryContext(); InMemoryContext.LoadData(_evaluationContext, _context); await PrepareSimulationContext(); var simConfig = _context.SimulationConfigurations.Single(x => x.Id == simulationId); await OrderGenerator.GenerateOrders(_context, simConfig, simulationId); var simulationNumber = _context.GetSimulationNumber(simulationId, SimulationType.Central); //call initial central MRP-run await _processMrp.CreateAndProcessOrderDemand(task, _context, simulationId, _evaluationContext); if (task == MrpTask.Backward || task == MrpTask.Forward || task == MrpTask.GifflerThompson) { var list = _context.ProductionOrderWorkSchedules.Select(schedule => new PowsSimulationItem(_context) { End = (task == MrpTask.Backward) ? schedule.EndBackward : (task == MrpTask.Forward) ? schedule.EndForward : schedule.End, Start = (task == MrpTask.Backward) ? schedule.StartBackward : (task == MrpTask.Forward) ? schedule.StartForward : schedule.Start, ProductionOrderId = schedule.ProductionOrderId, ProductionOrderWorkScheduleId = schedule.Id, SimulationId = simulationId }) .ToList(); _evaluationContext.SaveChanges(); FillSimulationWorkSchedules(list, simulationId, simulationNumber, task); } SimulationType simType = SimulationType.Central; switch (task) { case MrpTask.Forward: simType = SimulationType.ForwardPlanning; break; case MrpTask.Backward: simType = SimulationType.BackwardPlanning; break; } CopyResults.ExtractSimulationOrders(_context, _evaluationContext, simulationId, simulationNumber, simType); _messageHub.EndScheduler(); }); }
public async Task RunAkkaSimulation(Configuration configuration) { _configuration = configuration; _messageHub.SendToAllClients(msg: "Prepare in Memory model from DB for Simulation: " + _configuration.GetOption <SimulationId>().Value.ToString() , msgType: MessageType.info); //In-memory database only exists while the connection is open //var _inMemory = InMemoryContext.CreateInMemoryContext(); // InMemoryContext.LoadData(source: _context, target: _inMemory); //MasterDBInitializerSimple.DbInitialize(_inMemory); _messageHub.SendToAllClients(msg: "Prepare Simulation", msgType: MessageType.info); _agentSimulation = new AgentSimulation(DBContext: _context , messageHub: _messageHub); // Defines the status output var simulation = _agentSimulation.InitializeSimulation(configuration: _configuration).Result; SimulationContext = simulation.SimulationContext; if (simulation.IsReady()) { _messageHub.SendToAllClients(msg: "Start Simulation ...", msgType: MessageType.info); // Start simulation var sim = simulation.RunAsync(); AgentSimulation.Continuation(inbox: _agentSimulation.SimulationConfig.Inbox , sim: simulation , collectors: new List <IActorRef> { _agentSimulation.StorageCollector , _agentSimulation.WorkCollector , _agentSimulation.ContractCollector }); await sim; } _messageHub.EndScheduler(); _messageHub.EndSimulation(msg: "Simulation Completed." , simId: _configuration.GetOption <SimulationId>().Value.ToString() , simNumber: _configuration.GetOption <SimulationNumber>().Value.ToString()); return; }
public async Task RunSimulation(int simulationId, int simulationNumber) { await _agentSimulation.RunSim(simulationId, simulationNumber); _messageHub.SendToAllClients("Number of involved Agents: " + Agent.AgentCounter.Count, MessageType.success); _messageHub.SendToAllClients("Number of instructions send: " + Agent.InstructionCounter, MessageType.success); var itemlist = from val in Agent.AgentStatistics group val by new { val.AgentType } into grouped select new { Agent = grouped.First().AgentType, ProcessingTime = grouped.Sum(x => x.ProcessingTime), Count = grouped.Count().ToString() }; foreach (var item in itemlist) { _messageHub.SendToAllClients(" Agent (" + Agent.AgentCounter.Count(x => x == item.Agent) + "): " + item.Agent + " -> Runtime: " + item.ProcessingTime + " Milliseconds with " + item.Count + " Instructions Processed", MessageType.warning); } //var jobs = itemlist.Count(x => x.) var jobs = AgentStatistic.Log.Count(x => x.Contains("Finished Work with")); _messageHub.SendToAllClients(jobs + " Jobs processed in " + (Agent.AgentStatistics.Max(x => x.Time) - 1) + " minutes", MessageType.success); _messageHub.SendToAllClients("Simulation Finished"); _messageHub.EndScheduler(); }