示例#1
0
        /// <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();
 }
示例#4
0
        /// <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);
        }
示例#5
0
 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();
 }
示例#6
0
        /// <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();
 }
示例#8
0
        /// <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);
            }
        }
示例#11
0
        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();
 }
示例#13
0
 /// <summary>
 /// Simulate the current configuration
 /// </summary>
 /// <param name="currentSimulation"></param>
 private static void SimulateConfiguration(CurrentSimulation currentSimulation)
 {
     SimulationManager.SimulateConfiguration(currentSimulation, _resultFile);
 }
示例#14
0
 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();
 }
示例#15
0
 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();
 }
示例#16
0
 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();
 }