/// <summary> /// Iterate over parameters and simulate all the possible configurations /// </summary> /// <param name="simulation"></param> private static void StartSimulation(Simulation simulation) { ResetSimulationFile(); var simulationDimension = 0; while (simulationDimension <= simulation.TotalSimulationDimension) { // iterate over thread configuration for (var t = simulation.MinThread; t <= simulation.MaxThread; t += ThreadStep) { // iterate over critical section dimension for (var c = simulation.MinCriticalSectionDimension; c <= simulation.MaxCriticalSectionDimension; c += CriticalSectionDimensionStep) { // iterate over time on critical section for (var w = simulation.MinTimeOnSection; w <= simulation.MaxTimeOnSection; w += CriticalSectionTimeStep) { #if DEBUG Console.WriteLine( $"SimulateConfiguration " + $"thread={t} " + $"criticalSectionDimension={c} " + $"criticalSectionTime={w}"); #endif // iterate over the partial step for (var p = 0; p <= simulation.PartialSimulationDimension; p++) { var currentSimulation = new CurrentSimulation() { ThreadNumber = t, CriticalSectionDimension = c, TimeOnSection = w }; SimulateConfiguration(currentSimulation); simulationDimension++; } } } } // simulation.TotalSimulationDimension < possible configurations break; } // stop all running threads SimulationManager.StopSimulation(); }
private void btnSaveFile_Click(object sender, RoutedEventArgs e) { SaveFileDialog dg = new SaveFileDialog(); if (dg.ShowDialog() ?? false) { CurrentSimulation.MoveLog(dg.FileName); } }
public mainForm() { InitializeComponent(); arrowPen.EndCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor; axisPoints[1] = new Point(80, 450); axisPoints[0] = new Point(80, 150); axisPoints[2] = new Point(380, 450); CS = CurrentSimulation.SteeringBehaviours; context = new BufferedGraphicsContext(); }
/// <summary> /// Simulate the current configuration /// </summary> /// <param name="currentSimulation"></param> /// <param name="dataPath"></param> /// <param name="rampUpPeriod"></param> public static void SimulateConfiguration(CurrentSimulation currentSimulation, string dataPath, int rampUpPeriod = 100) { ThreadGenerator.StopThreads(); CriticalSection.InitCriticalSection(currentSimulation.CriticalSectionDimension, dataPath); ThreadGenerator.InitThreads(currentSimulation); ThreadGenerator.StartThreads(rampUpPeriod); }
/// <summary> /// Init the thread list /// </summary> /// <param name="currentSimulation"></param> public static void InitThreads(CurrentSimulation currentSimulation) { ThreadList.Clear(); for (var i = 0; i < currentSimulation.ThreadNumber; i++) { var thread = new ThreadSimulation(currentSimulation, i); ThreadList.Add(thread); } }
private void initializeToolStripMenuItem_Click(object sender, EventArgs e) { if (!drawingSurfaceInitialized) { InitializeDrawingSurface(); } DestroyAll(); listView1.Visible = false; CS = CurrentSimulation.SteeringBehaviours; sBC = new SBC(g, mainPanel.ClientSize, steeringBehaviour, int.Parse(numberOfCars.Text)); Start(); }
/// <summary> /// Write the Csv file with result simulation /// </summary> /// <param name="currentSimulation"></param> /// <param name="totalTime"></param> /// <param name="dataPath"></param> public static void WriteCsv(CurrentSimulation currentSimulation, long totalTime, string dataPath) { try { var line = $"{currentSimulation.ThreadNumber},{currentSimulation.TimeOnSection},{currentSimulation.CriticalSectionDimension},{totalTime}"; line += Environment.NewLine; File.AppendAllText(dataPath, line); } catch (Exception e) { Console.WriteLine(e); } }
private void initializeToolStripMenuItem2_Click(object sender, EventArgs e) { if (!drawingSurfaceInitialized) { InitializeDrawingSurface(); } DestroyAll(); listView1.Items.Clear(); DestroyAll(); listView1.Visible = true; CS = CurrentSimulation.Ants; world = new Cosmos(int.Parse(textBoxFood.Text), int.Parse(textBoxNo.Text), mainPanel.ClientSize, g, listView1, mainPanel, grafx); world.Step(); }
/// <summary> /// Simulate thread execution /// </summary> /// <param name="currentSimulation"></param> /// <param name="threadId"></param> /// <param name="cancellationToken"></param> public static void UseCriticalSection(CurrentSimulation currentSimulation, int threadId, CancellationToken cancellationToken) { try { var stopwatch = Stopwatch.StartNew(); while (true) { // get the first critical section available slot for (var i = 0; i < CriticalSectionList.Count; i++) { // check for thread cancellation request if (cancellationToken.IsCancellationRequested) { return; } var obj = CriticalSectionList[i]; if (Monitor.TryEnter(obj)) { // simulate work Thread.Sleep(currentSimulation.TimeOnSection); stopwatch.Stop(); var elapsedMs = stopwatch.ElapsedMilliseconds; Console.WriteLine($"Total time {elapsedMs} ms"); // just the first thread writes the simulation file if (threadId == 0 && ThreadGenerator.StartCompleted) { CsvWriter.WriteCsv(currentSimulation, elapsedMs, _dataPath); } // reset the stopwatch for the current thread stopwatch = Stopwatch.StartNew(); // exit break; } } } } catch (Exception e) { Console.WriteLine(e); } }
private void initializeToolStripMenuItem2_Click(object sender, EventArgs e) { if (!drawingSurfaceInitialized) { InitializeDrawingSurface(); } DestroyAll(); listView1.Items.Clear(); DestroyAll(); listView1.Visible = true; CS = CurrentSimulation.Ants; string[] lines = System.IO.File.ReadAllLines("C:\\Users\\kogunlana\\AI Life\\AI Life\\lecture.txt"); world = new Cosmos(int.Parse(textBoxNo.Text), mainPanel.ClientSize, g, listView1, mainPanel, grafx, lines); Start(); //timer1.Enabled = true; //world.Step(); }
private void initializeToolStripMenuItem1_Click(object sender, EventArgs e) { if (!drawingSurfaceInitialized) { InitializeDrawingSurface(); } DestroyAll(); timer1.Enabled = false; oldPoint = new Point(80, 450 - 200); newPoint = new Point(80, 450 - 200); ClearScreen(); grafx.Render(Graphics.FromHwnd(mainPanel.Handle)); leaveTrail = true; EString.elitism = float.Parse(textBoxElitismRate.Text); EString.maxIteration = uint.Parse(textBoxMaxIteration.Text); EString.mutationRate = float.Parse(textBoxMutationRate.Text); EString.popSize = int.Parse(textBoxPopulationSize.Text); CS = CurrentSimulation.EString; listView1.Visible = true; eStringRunning = true; listView1.Items.Clear(); Start(); }
/// <summary> /// Simulate the current configuration /// </summary> /// <param name="currentSimulation"></param> private static void SimulateConfiguration(CurrentSimulation currentSimulation) { SimulationManager.SimulateConfiguration(currentSimulation, _resultFile); }
private void initializeToolStripMenuItem_Click(object sender, EventArgs e) { if (!drawingSurfaceInitialized) InitializeDrawingSurface(); DestroyAll(); listView1.Visible = false; CS = CurrentSimulation.SteeringBehaviours; sBC = new SBC(g, mainPanel.ClientSize, steeringBehaviour, int.Parse(numberOfCars.Text)); Start(); }
private void initializeToolStripMenuItem2_Click(object sender, EventArgs e) { if (!drawingSurfaceInitialized) InitializeDrawingSurface(); DestroyAll(); listView1.Items.Clear(); DestroyAll(); listView1.Visible = true; CS = CurrentSimulation.Ants; world = new Cosmos(int.Parse(textBoxFood.Text), int.Parse(textBoxNo.Text), mainPanel.ClientSize, g, listView1, mainPanel, grafx); world.Step(); }
private void initializeToolStripMenuItem1_Click(object sender, EventArgs e) { if (!drawingSurfaceInitialized) InitializeDrawingSurface(); DestroyAll(); timer1.Enabled = false; oldPoint = new Point(80, 450 - 200); newPoint = new Point(80, 450 - 200); ClearScreen(); grafx.Render(Graphics.FromHwnd(mainPanel.Handle)); leaveTrail = true; EString.elitism = float.Parse(textBoxElitismRate.Text); EString.maxIteration = uint.Parse(textBoxMaxIteration.Text); EString.mutationRate = float.Parse(textBoxMutationRate.Text); EString.popSize = int.Parse(textBoxPopulationSize.Text); CS = CurrentSimulation.EString; listView1.Visible = true; eStringRunning = true; listView1.Items.Clear(); Start(); }