public async Task AgentSimulatioAsync(int simulationConfigurationId) { // In-memory database only exists while the connection is open var connectionStringBuilder = new SqliteConnectionStringBuilder { DataSource = ":memory:" }; var connection = new SqliteConnection(connectionStringBuilder.ToString()); // create OptionsBuilder with InMemmory Context var builder = new DbContextOptionsBuilder <MasterDBContext>(); builder.UseSqlite(connection); var simNumber = _evaluationContext.GetSimulationNumber(simulationConfigurationId, SimulationType.Decentral); using (var c = new InMemoryContext(builder.Options)) { c.Database.OpenConnection(); c.Database.EnsureCreated(); InMemoryContext.LoadData(_evaluationContext, c); var sim = new AgentSimulation(c, _messageHub); await sim.RunSim(simulationConfigurationId, simNumber); CopyResults.Copy(c, _evaluationContext, simulationConfigurationId, simNumber, SimulationType.Decentral); CalculateKpis.MachineSattleTime(_evaluationContext, simulationConfigurationId, SimulationType.Decentral, simNumber); CalculateKpis.CalculateAllKpis(_evaluationContext, simulationConfigurationId, SimulationType.Decentral, simNumber, true); } connection.Close(); _messageHub.EndSimulation("Simulation with Id:" + simulationConfigurationId + " Completed." , simulationConfigurationId.ToString() , simNumber.ToString()); }
private void FinishSimulation(TimeTable <ISimulationItem> timeTable, int simulationId, int simNumber, SimulationConfiguration simConfig) { //copy workschedules to the simulationworkschedules which get written back to the local-db //FillSimulationWorkSchedules(timeTable.Items.OfType<PowsSimulationItem>().ToList(), simulationId, simNumber, 0); _messageHub.SendToAllClients("last Item produced at: " + _context.SimulationWorkschedules.Max(a => a.End)); //calculate kpis CalculateKpis.MachineSattleTime(_context, simulationId, SimulationType.Central, simNumber); CalculateKpis.CalculateAllKpis(_context, simulationId, SimulationType.Central, simNumber, true, simConfig.Time); RemoveSimulationWorkschedules(); //copy the relevant tables from the in-memory db to the local-db CopyResults.Copy(_context, _evaluationContext, simulationId, simNumber, SimulationType.Central); _messageHub.EndScheduler(); _context.Database.CloseConnection(); _evaluationContext.Database.CloseConnection(); }
//[InlineData(SimulationType.Decentral, 2)] //[InlineData(SimulationType.Decentral, 3)] //[InlineData(SimulationType.Central, 6)] // [InlineData(SimulationType.Central, 4)] // [InlineData(SimulationType.Central, 5)] // [InlineData(SimulationType.Central, 6)] // [InlineData(SimulationType.Central, 7)] public async Task TestKpiCalculation(SimulationType simType, int simId) { var toRemove = await _productionDomainContext.Kpis.Where(x => x.SimulationType == simType && x.SimulationConfigurationId == 1 && x.KpiType == KpiType.MeanTimeToStart) .ToListAsync(); _productionDomainContext.Kpis.RemoveRange(toRemove); _productionDomainContext.SaveChanges(); //var simConfig = _productionDomainContext.SimulationConfigurations.Where(x => x.Id == 1); CalculateKpis.CalculateMeanStartTime(_productionDomainContext , 1 , simType , 1 , true , 20160); // var toRemove2 = await _productionDomainContext.Kpis.Where(x => x.SimulationType == simType // && x.SimulationConfigurationId == simId // && x.KpiType == KpiType.StockEvolution) // .ToListAsync(); // _productionDomainContext.Kpis.RemoveRange(toRemove2); // _productionDomainContext.SaveChanges(); // // CalculateKpis.ArticleStockEvolution(_productionDomainContext // , simId // , simType // , 1 // , true // , 20160); // // CalculateKpis.CalculateAllKpis( //CalculateKpis.CalculateMachineUtilization( //context: _productionDomainContext, // simulationId: 1, // simulationType: simType, // simulationNumber: 1, // final: true, // time: 20000); }