private static void RunSimulation() { LogConfiguration.LogTo(TargetTypes.File, TargetNames.LOG_AGENTS, LogLevel.Info, LogLevel.Warn); LogConfiguration.LogTo(TargetTypes.Console, TargetNames.LOG_AGENTS, LogLevel.Info); LogConfiguration.LogTo(TargetTypes.Console, TargetNames.LOG_AKKA, LogLevel.Warn); LogConfiguration.LogTo(TargetTypes.File, TargetNames.LOG_AKKA, LogLevel.Trace); //InternalLogger.LogToConsole = true; //InternalLogger.LogLevel = LogLevel.Trace; SimulationConfig simConfig = new SimulationConfig(debugAkka: false , debugAkkaSim: true , interruptInterval: 120 , timeToAdvance: TimeSpan.FromSeconds(0)); var sim = new Simulation(simConfig); var r = new Random(); Console.ReadKey(); var jobDistributor = sim.ActorSystem.ActorOf(MachineJobDistributor.Props(sim.ActorSystem.EventStream, sim.SimulationContext, 0), "JobDistributor"); // Tell all Machines for (int i = 0; i < 3; i++) { // Create a message var createMachines = new MachineJobDistributor.AddMachine(null, jobDistributor); sim.SimulationContext.Tell(createMachines, null); } for (int i = 0; i < 300; i++) { var materialRequest = new MaterialRequest(CreateBOM(), new Dictionary <int, bool>(), 0, r.Next(50, 500), true); var request = new MachineJobDistributor.ProductionOrder(materialRequest, jobDistributor); sim.SimulationContext.Tell(request, null); } // example to monitor for FinishWork Messages. var monitor = sim.ActorSystem.ActorOf(props: Monitoring.WorkTimeMonitor .Props(time: 0), name: "SimulationMonitor"); if (sim.IsReady()) { var terminated = sim.RunAsync(); new StateManager().Continuation(simConfig.Inbox, sim); terminated.Wait(); } Console.WriteLine("Systen is shutdown!"); Console.WriteLine("System Runtime " + sim.ActorSystem.Uptime); }
static void Main(string[] args) { Console.WriteLine(value: "Welcome to AkkaSim Cli"); // has to be Installed here other wise it would attach a new log listener every time a simulation is called. LogConfiguration.LogTo(TargetTypes.Console, TargetNames.LOG_AGENTS, LogLevel.Info, LogLevel.Info); //LogConfiguration.LogTo(TargetTypes.File, TargetNames.LOG_AGENTS, LogLevel.Debug, LogLevel.Debug); //LogConfiguration.LogTo(TargetTypes.File, TargetNames.LOG_AKKA, LogLevel.Trace); //LogConfiguration.LogTo(TargetTypes.Console, TargetNames.LOG_AKKA, LogLevel.Warn); //LogConfiguration.LogTo(TargetTypes.Debugger, TargetNames.LOG_AKKA, LogLevel.Warn); var masterDb = ProductionDomainContext.GetContext(ConfigurationManager.AppSettings[AgentCore.DEFAULT_CONNECTION]); var validCommands = Commands.GetAllValidCommands; var command = validCommands.Single(predicate: x => x.ArgLong == "Help"); var lastArg = 0; var config = new SimulationCore.Environment.Configuration(); for (; lastArg < args.Length; lastArg++) { if (args[lastArg] == "-?" || args[lastArg] == "/?") { command.Action(arg1: null, arg2: null); return; } if (ArgumentConverter.IsArg(validCommands: validCommands, argument: args[lastArg], command: ref command)) { if (command.HasProperty) { lastArg++; command.Action(arg1: config, arg2: args[lastArg]); } else { command.Action(arg1: config, arg2: null); } } } if (config.TryGetValue(typeof(StartHangfire), out object startHangfire)) { StartHangfire(((StartHangfire)startHangfire).Silent).Wait(); } else { RunSimulationTask(masterDb: masterDb, config: config).Wait(); Console.WriteLine(value: "Simulation Run Finished."); } }
public void RunProduction(int uniqueSimNum, int orderQuantity, ModelSize resourceModelSize, ModelSize setupModelSize, ModelSize operatorModelSize, int numberOfWorkers, bool secondResource) { LogConfiguration.LogTo(TargetTypes.Debugger, TargetNames.LOG_AGENTS, LogLevel.Info, LogLevel.Info); LogConfiguration.LogTo(TargetTypes.Debugger, TargetNames.LOG_AGENTS, LogLevel.Debug, LogLevel.Debug); _testOutputHelper.WriteLine("DatabaseString: " + _contextDataBase.ConnectionString.Value); _testOutputHelper.WriteLine("ResultDatabaseString: " + _resultContextDataBase.ConnectionString.Value); //Handle this one in our Resource Model? MasterDBInitializerTruck.DbInitialize(_contextDataBase.DbContext, resourceModelSize, setupModelSize, operatorModelSize, numberOfWorkers, secondResource); _testOutputHelper.WriteLine("MasterDBInitialized finished"); ResultDBInitializerBasic.DbInitialize(_resultContextDataBase.DbContext); _testOutputHelper.WriteLine("ResultDBInitializerBasic finished"); var messageHub = new ConsoleHub(); var simContext = new AgentSimulation(DBContext: _contextDataBase.DbContext, messageHub: messageHub); var simConfig = ArgumentConverter.ConfigurationConverter(_resultContextDataBase.DbContext, 1); _testOutputHelper.WriteLine("ArgumentConverter finished"); simConfig.ReplaceOption(new DBConnectionString(_resultContextDataBase.ConnectionString.Value)); simConfig.ReplaceOption(new TimeToAdvance(new TimeSpan(0L))); simConfig.ReplaceOption(new KpiTimeSpan(240)); simConfig.ReplaceOption(new DebugAgents(true)); simConfig.ReplaceOption(new MinDeliveryTime(1440)); simConfig.ReplaceOption(new MaxDeliveryTime(2880)); simConfig.ReplaceOption(new TransitionFactor(3)); simConfig.ReplaceOption(new SimulationKind(value: SimulationType.Default)); simConfig.ReplaceOption(new OrderArrivalRate(value: 0.15)); simConfig.ReplaceOption(new OrderQuantity(value: orderQuantity)); simConfig.ReplaceOption(new EstimatedThroughPut(value: 1920)); simConfig.ReplaceOption(new TimePeriodForThroughputCalculation(value: 2880)); simConfig.ReplaceOption(new Seed(value: 1337)); simConfig.ReplaceOption(new SettlingStart(value: 0)); simConfig.ReplaceOption(new SimulationEnd(value: 4380)); simConfig.ReplaceOption(new SaveToDB(value: true)); simConfig.ReplaceOption(new MaxBucketSize(value: 480)); simConfig.ReplaceOption(new SimulationNumber(value: uniqueSimNum)); simConfig.ReplaceOption(new DebugSystem(value: true)); simConfig.ReplaceOption(new WorkTimeDeviation(0.0)); simConfig.ReplaceOption(new TimeConstraintQueueLength(480)); var simulation = simContext.InitializeSimulation(configuration: simConfig).Result; _testOutputHelper.WriteLine("simContext.InitializeSimulation finished"); var sim = simulation.RunAsync(); _testOutputHelper.WriteLine("simulation.RunAsync() finished"); Within(TimeSpan.FromSeconds(120), async() => { simContext.StateManager.ContinueExecution(simulation); await sim; }).Wait(); var processedOrders = _resultContextDataBase.DbContext.Kpis .Single(x => x.IsFinal.Equals(true) && x.Name.Equals("OrderProcessed")).Value; Assert.Equal(orderQuantity, processedOrders); Assert.False(AnyOverlappingTaskItemsExistsOnOneMachine()); foreach (var obj in messageHub.Logs) { dynamic guardChildCounter = JsonConvert.DeserializeObject(obj); Assert.Equal(0, int.Parse(guardChildCounter[1].Value)); } _contextDataBase.DbContext.Dispose(); _resultContextDataBase.DbContext.Dispose(); }
public async Task SystemTestAsync(int approachId , int orderQuantity , int maxBucketSize , long throughput , int seed , double arrivalRate , long simulationEnd) { ResultContext ctxResult = ResultContext.GetContext(resultCon: testResultCtxString); ProductionDomainContext masterCtx = ProductionDomainContext.GetContext(testCtxString); DataGeneratorContext dataGenCtx = DataGeneratorContext.GetContext(testGeneratorCtxString); var approach = ApproachRepository.GetApproachById(dataGenCtx, approachId); var generator = new MainGenerator(); await Task.Run(() => generator.StartGeneration(approach, masterCtx, ctxResult)); var simContext = new AgentSimulation(DBContext: masterCtx, messageHub: new ConsoleHub()); var simConfig = ArgumentConverter.ConfigurationConverter(ctxResult, 1); //LogConfiguration.LogTo(TargetTypes.Debugger, TargetNames.LOG_AGENTS, LogLevel.Trace, LogLevel.Trace); LogConfiguration.LogTo(TargetTypes.Debugger, TargetNames.LOG_AGENTS, LogLevel.Info, LogLevel.Info); //LogConfiguration.LogTo(TargetTypes.Debugger, TargetNames.LOG_AGENTS, LogLevel.Debug, LogLevel.Debug); //LogConfiguration.LogTo(TargetTypes.Debugger, CustomLogger.PRIORITY, LogLevel.Warn, LogLevel.Warn); //LogConfiguration.LogTo(TargetTypes.File, CustomLogger.SCHEDULING, LogLevel.Warn, LogLevel.Warn); //LogConfiguration.LogTo(TargetTypes.File, CustomLogger.DISPOPRODRELATION, LogLevel.Debug, LogLevel.Debug); //LogConfiguration.LogTo(TargetTypes.Debugger, CustomLogger.PROPOSAL, LogLevel.Warn, LogLevel.Warn); //LogConfiguration.LogTo(TargetTypes.Debugger, CustomLogger.INITIALIZE, LogLevel.Warn, LogLevel.Warn); //LogConfiguration.LogTo(TargetTypes.Debugger, CustomLogger.JOB, LogLevel.Warn, LogLevel.Warn); //LogConfiguration.LogTo(TargetTypes.File, CustomLogger.ENQUEUE, LogLevel.Warn, LogLevel.Warn); //LogConfiguration.LogTo(TargetTypes.Debugger, CustomLogger.JOBSTATE, LogLevel.Warn, LogLevel.Warn); //LogConfiguration.LogTo(TargetTypes.File, TargetNames.LOG_AKKA, LogLevel.Trace, LogLevel.Trace); //LogConfiguration.LogTo(TargetTypes.Debugger, TargetNames.LOG_AKKA, LogLevel.Warn); var dataGenSim = new DB.GeneratorModel.Simulation(); dataGenSim.ApproachId = approachId; dataGenSim.StartTime = DateTime.Now; await Task.Run(() => { dataGenCtx.Simulations.AddRange(dataGenSim); dataGenCtx.SaveChanges(); }); // update customized Configuration simConfig.AddOption(new DBConnectionString(testResultCtxString)); simConfig.ReplaceOption(new TimeConstraintQueueLength(480)); simConfig.ReplaceOption(new OrderArrivalRate(value: arrivalRate)); simConfig.ReplaceOption(new OrderQuantity(value: orderQuantity)); simConfig.ReplaceOption(new EstimatedThroughPut(value: throughput)); simConfig.ReplaceOption(new TimePeriodForThroughputCalculation(value: 2880)); simConfig.ReplaceOption(new Seed(value: seed)); simConfig.ReplaceOption(new SettlingStart(value: 0)); simConfig.ReplaceOption(new SimulationEnd(value: simulationEnd)); simConfig.ReplaceOption(new SaveToDB(value: true)); simConfig.ReplaceOption(new MaxBucketSize(value: maxBucketSize)); simConfig.ReplaceOption(new SimulationNumber(value: dataGenSim.Id)); simConfig.ReplaceOption(new DebugSystem(value: true)); simConfig.ReplaceOption(new WorkTimeDeviation(0.0)); // anpassen der Lieferzeiten anhand der Erwarteten Durchlaufzeit. simConfig.ReplaceOption(new MinDeliveryTime(80)); simConfig.ReplaceOption(new MaxDeliveryTime(150)); await Task.Run(() => ArgumentConverter.ConvertBackAndSave(ctxResult, simConfig, dataGenSim.Id)); var simulation = await simContext.InitializeSimulation(configuration : simConfig); if (simulation.IsReady()) { // Start simulation var sim = simulation.RunAsync(); simContext.StateManager.ContinueExecution(simulation); await sim; dataGenSim.FinishTime = DateTime.Now; dataGenSim.FinishedSuccessfully = sim.IsCompletedSuccessfully; await Task.Run(() => dataGenCtx.SaveChanges()); System.Diagnostics.Debug.WriteLine("################################# Simulation has finished with number " + dataGenSim.Id); Assert.True(condition: sim.IsCompleted); } }
//[InlineData(SimulationType.DefaultSetup, 1, Int32.MaxValue, 1920, 169, ModelSize.Small, ModelSize.Small)] public async Task CentralSystemTest() { //LogConfiguration.LogTo(TargetTypes.Debugger, TargetNames.LOG_AGENTS, LogLevel.Trace, LogLevel.Trace); LogConfiguration.LogTo(TargetTypes.Debugger, TargetNames.LOG_AGENTS, LogLevel.Info, LogLevel.Info); //LogConfiguration.LogTo(TargetTypes.Debugger, TargetNames.LOG_AGENTS, LogLevel.Debug, LogLevel.Debug); LogConfiguration.LogTo(TargetTypes.Debugger, TargetNames.LOG_AGENTS, LogLevel.Warn, LogLevel.Warn); var simtulationType = SimulationType.Central; var seed = 169; var throughput = 1920; var arrivalRate = 0.015; //Create Master40Data var masterPlanContext = ProductionDomainContext.GetContext(masterCtxString); masterPlanContext.Database.EnsureDeleted(); masterPlanContext.Database.EnsureCreated(); MasterDBInitializerTruck.DbInitialize(masterPlanContext, ModelSize.Medium, ModelSize.Medium, ModelSize.Small, 3, false); //CreateMaster40Result var masterPlanResultContext = ResultContext.GetContext(masterResultCtxString); masterPlanResultContext.Database.EnsureDeleted(); masterPlanResultContext.Database.EnsureCreated(); ResultDBInitializerBasic.DbInitialize(masterPlanResultContext); //Reset GanttPLan DB? var ganttPlanContext = GanttPlanDBContext.GetContext(GanttPlanCtxString); ganttPlanContext.Database.ExecuteSqlRaw("EXEC sp_MSforeachtable 'DELETE FROM ? '"); //Synchronisation GanttPlan GanttPlanOptRunner.RunOptAndExport("Init"); var simContext = new GanttSimulation(GanttPlanCtxString, masterCtxString, messageHub: new ConsoleHub()); var simConfig = ArgumentConverter.ConfigurationConverter(masterPlanResultContext, 1); // update customized Items simConfig.AddOption(new DBConnectionString(masterResultCtxString)); simConfig.ReplaceOption(new KpiTimeSpan(240)); simConfig.ReplaceOption(new TimeConstraintQueueLength(480)); simConfig.ReplaceOption(new SimulationKind(value: simtulationType)); simConfig.ReplaceOption(new OrderArrivalRate(value: arrivalRate)); simConfig.ReplaceOption(new OrderQuantity(value: 141)); simConfig.ReplaceOption(new EstimatedThroughPut(value: throughput)); simConfig.ReplaceOption(new TimePeriodForThroughputCalculation(value: 4000)); simConfig.ReplaceOption(new Seed(value: seed)); simConfig.ReplaceOption(new SettlingStart(value: 2880)); simConfig.ReplaceOption(new SimulationEnd(value: 10080)); simConfig.ReplaceOption(new SaveToDB(value: true)); simConfig.ReplaceOption(new DebugSystem(value: false)); simConfig.ReplaceOption(new WorkTimeDeviation(0.2)); var simulation = await simContext.InitializeSimulation(configuration : simConfig); //emtpyResultDBbySimulationNumber(simNr: simConfig.GetOption<SimulationNumber>()); var simWasReady = false; if (simulation.IsReady()) { // set for Assert simWasReady = true; // Start simulation var sim = simulation.RunAsync(); simContext.StateManager.ContinueExecution(simulation); await sim; } Assert.True(condition: simWasReady); }
public async Task SystemTestAsync(SimulationType simulationType, int simNr, int maxBucketSize, long throughput, int seed , ModelSize resourceModelSize, ModelSize setupModelSize , double arrivalRate, bool distributeSetupsExponentially) { LogConfiguration.LogTo(TargetTypes.Debugger, TargetNames.LOG_AGENTS, LogLevel.Trace, LogLevel.Trace); LogConfiguration.LogTo(TargetTypes.Debugger, TargetNames.LOG_AGENTS, LogLevel.Info, LogLevel.Info); LogConfiguration.LogTo(TargetTypes.Debugger, TargetNames.LOG_AGENTS, LogLevel.Debug, LogLevel.Debug); //LogConfiguration.LogTo(TargetTypes.Debugger, CustomLogger.PRIORITY, LogLevel.Warn, LogLevel.Warn); //LogConfiguration.LogTo(TargetTypes.File, CustomLogger.SCHEDULING, LogLevel.Warn, LogLevel.Warn); //LogConfiguration.LogTo(TargetTypes.File, CustomLogger.DISPOPRODRELATION, LogLevel.Debug, LogLevel.Debug); //LogConfiguration.LogTo(TargetTypes.Debugger, CustomLogger.PROPOSAL, LogLevel.Warn, LogLevel.Warn); //LogConfiguration.LogTo(TargetTypes.Debugger, CustomLogger.INITIALIZE, LogLevel.Warn, LogLevel.Warn); LogConfiguration.LogTo(TargetTypes.Debugger, CustomLogger.JOB, LogLevel.Warn, LogLevel.Warn); //LogConfiguration.LogTo(TargetTypes.File, CustomLogger.ENQUEUE, LogLevel.Warn, LogLevel.Warn); //LogConfiguration.LogTo(TargetTypes.Debugger, CustomLogger.JOBSTATE, LogLevel.Warn, LogLevel.Warn); //LogConfiguration.LogTo(TargetTypes.File, TargetNames.LOG_AKKA, LogLevel.Trace, LogLevel.Trace); //LogConfiguration.LogTo(TargetTypes.Debugger, TargetNames.LOG_AKKA, LogLevel.Warn); var masterCtx = ProductionDomainContext.GetContext(testCtxString); masterCtx.Database.EnsureDeleted(); masterCtx.Database.EnsureCreated(); MasterDBInitializerTruck.DbInitialize(masterCtx, resourceModelSize, setupModelSize, ModelSize.Small, 3, distributeSetupsExponentially); //InMemoryContext.LoadData(source: _masterDBContext, target: _ctx); var simContext = new AgentSimulation(DBContext: masterCtx, messageHub: new ConsoleHub()); var simConfig = Simulation.CLI.ArgumentConverter.ConfigurationConverter(_ctxResult, 1); // update customized Items simConfig.AddOption(new DBConnectionString(testResultCtxString)); simConfig.ReplaceOption(new TimeConstraintQueueLength(480)); simConfig.ReplaceOption(new SimulationKind(value: simulationType)); simConfig.ReplaceOption(new OrderArrivalRate(value: arrivalRate)); simConfig.ReplaceOption(new OrderQuantity(value: 5)); simConfig.ReplaceOption(new EstimatedThroughPut(value: throughput)); simConfig.ReplaceOption(new TimePeriodForThroughputCalculation(value: 2880)); simConfig.ReplaceOption(new Seed(value: seed)); simConfig.ReplaceOption(new SettlingStart(value: 0)); simConfig.ReplaceOption(new SimulationEnd(value: 2880)); simConfig.ReplaceOption(new SaveToDB(value: true)); simConfig.ReplaceOption(new MaxBucketSize(value: maxBucketSize)); simConfig.ReplaceOption(new SimulationNumber(value: simNr)); simConfig.ReplaceOption(new DebugSystem(value: true)); simConfig.ReplaceOption(new WorkTimeDeviation(0.0)); var simulation = await simContext.InitializeSimulation(configuration : simConfig); emtpyResultDBbySimulationNumber(simNr: simConfig.GetOption <SimulationNumber>()); var simWasReady = false; if (simulation.IsReady()) { // set for Assert simWasReady = true; // Start simulation var sim = simulation.RunAsync(); simContext.StateManager.ContinueExecution(simulation); await sim; } Assert.True(condition: simWasReady); }