private void PopulateGridWithAgentPosition(Learning.Grid grid, List <int[]> positions)
        {
            PreviewGrid.Children.Clear();
            PreviewGrid.ColumnDefinitions.Clear();
            PreviewGrid.RowDefinitions.Clear();

            int dimension = grid.Dimension;

            for (int i = 0; i < dimension; i++)
            {
                PreviewGrid.RowDefinitions.Add(new RowDefinition());
                PreviewGrid.ColumnDefinitions.Add(new ColumnDefinition());
            }

            int index = 0;

            foreach (int[] position in positions)
            {
                var textPanel = new TextBlock
                {
                    Text = index.ToString(),
                    VerticalAlignment   = VerticalAlignment.Center,
                    HorizontalAlignment = HorizontalAlignment.Center
                };

                PreviewGrid.Children.Add(textPanel);

                System.Windows.Controls.Grid.SetRow(textPanel, position[1]);
                System.Windows.Controls.Grid.SetColumn(textPanel, position[0]);

                index++;
            }
        }
        private void Train(object sender, RoutedEventArgs e)
        {
            int dimension = int.Parse(this.Dimension.Text);
            int tryCount  = int.Parse(this.StepNumbers.Text);

            map = new Learning.Grid(dimension);

            ObservableCollection <ObservableCollection <UIGridTile> > rows = (ObservableCollection <ObservableCollection <UIGridTile> >) this.LearningGrid.ItemsSource;

            int r = 0;

            foreach (ObservableCollection <UIGridTile> row in rows)
            {
                int col = 0;
                foreach (UIGridTile tile in row)
                {
                    map.AddTile(new Tile(tile.Wall, new int[] { col, r }, tile.Exit));
                    col++;
                }
                r++;
            }

            runner = new LearningRunner(map, dimension * tryCount);

            runner.Learn();

            this.act.IsEnabled = true;

            PopulatePreviewGrid(map);
        }
        private void PopulatePreviewGrid(Learning.Grid grid)
        {
            PreviewGrid.Children.Clear();
            PreviewGrid.ColumnDefinitions.Clear();
            PreviewGrid.RowDefinitions.Clear();

            int dimension = grid.Dimension;

            for (int i = 0; i < dimension; i++)
            {
                PreviewGrid.RowDefinitions.Add(new RowDefinition());
                PreviewGrid.ColumnDefinitions.Add(new ColumnDefinition());
            }

            for (int row = 0; row < dimension; row++)
            {
                for (int column = 0; column < dimension; column++)
                {
                    Tile tile      = grid.GetTileByCoordinates(column, row);
                    var  textPanel = new TextBlock
                    {
                        Text = tile.getAverageReward().ToString().Substring(0, Math.Min(6, tile.getAverageReward().ToString().Length)),
                        VerticalAlignment   = VerticalAlignment.Center,
                        HorizontalAlignment = HorizontalAlignment.Center
                    };

                    PreviewGrid.Children.Add(textPanel);

                    System.Windows.Controls.Grid.SetRow(textPanel, row);
                    System.Windows.Controls.Grid.SetColumn(textPanel, column);
                }
            }
        }