private Model.Statics MapConfig(SimulationConfig config) { Model.Statics statics = new Model.Statics(); statics.BatchingRule = (Model.Statics.BatchingRules)config.Batching; statics.NDiningTables = config.LayoutTable; statics.ExpectedDiningMinutesbeforePeak = config.DiningTimeBeforePeak; statics.ExpectedDiningMinutesduringPeak = config.DiningTimeDuringPeak; statics.ExpectedDiningMinutesafterPeak = config.DiningTimeAfterPeak; statics.AdsOption = (Model.Statics.AdsOptions)config.Advertisement; statics.AdsLevel = config.AdsLevel; statics.OpeningHour = config.OpeningHour; return(statics); }
public async Task <IActionResult> Post([FromBody] SimulationConfig config) { await _hubContext.Clients.All.SendAsync("setClientMessage", "Run simulation"); Model.Statics statics = MapConfig(config); List <Result> result = Enumerable.Range(0, 20).Select(seed => { var sim = new Model(statics, seed); while (sim.Run(1)) { ; } return(sim.Result); }).ToList(); return(Ok(result)); }
public async Task <IActionResult> RunSimulation(int id, [FromBody] RunSimulationModel simulation) { //_queue.QueueAsyncTask(async () => //{ // await Task.Run(async () => // { // await _hubContext.Clients.Client(simulation.ConnectionId).SendAsync("setSimulationResults", "testing"); // Model.Statics scenario = MapConfig(simulation.Config); // Model model = new Model(scenario, seed: id); // model.WarmUp(TimeSpan.FromHours(scenario.OpeningHour)); // await RunSimulationAsync(model, simulation.ConnectionId); // }); //}); //await _hubContext.Clients.Client(simulation.ConnectionId).SendAsync("setSimulationResults", "testing"); Model.Statics scenario = MapConfig(simulation.Config); Model model = new Model(scenario, seed: id); model.WarmUp(TimeSpan.FromHours(scenario.OpeningHour)); Console.WriteLine("running sim for 10 seconds"); //List<ResultModel> results = new List<ResultModel>(); List <Result> results = new List <Result>(); do { model.WriteToConsole(); //ResultModel result = new ResultModel(); //result.BarAvgCust = model.Result.BarAvgCust; //result.BarAvgDrinksPerCust = model.Result.BarAvgDrinksPerCust; //result.BarDrinksSold = model.Result.BarDrinksSold; results.Add(model.Result); await Task.Delay(500);; } while (model.Run(TimeSpan.FromHours(1))); //string messageString = JsonSerializer.Serialize(results); //Console.WriteLine(messageString); //await _hubContext.Clients.Client(simulation.ConnectionId).SendAsync("setSimulationResults", messageString); //Console.WriteLine("finished running sim"); return(Ok(results)); }