private static void InitializeCornerCellNeighbourhoods(AbstractCell[,] cellSpace, int highestIndex, Hyperparameters hyperParams)
 {
     cellSpace[0, 0].Neighbourhood                       = NeighbourhoodConstructor.getUpperLeftNeighbourhood(cellSpace, hyperParams);
     cellSpace[0, highestIndex].Neighbourhood            = NeighbourhoodConstructor.getUpperRightNeighbourhood(cellSpace, hyperParams);
     cellSpace[highestIndex, 0].Neighbourhood            = NeighbourhoodConstructor.getLowerLeftNeighbourhood(cellSpace, hyperParams);
     cellSpace[highestIndex, highestIndex].Neighbourhood = NeighbourhoodConstructor.getLowerRightNeighbourhood(cellSpace, hyperParams);
 }
 private static void InitializeSafeCellNeigbhourhoods(AbstractCell[] cellSpace, int highestIndex, int width)
 {
     Parallel.For(1, highestIndex - 1, i =>
     {
         cellSpace[i].Neighbourhood = NeighbourhoodConstructor.getOKNeighbourhood(cellSpace, i, width);
     });
 }
 private static void InitializeOutlierCellNeighbourhoods(AbstractCell[,] cellSpace, int highestIndex, Hyperparameters hyperParams)
 {
     Parallel.For(1, highestIndex, (int i) =>
     {
         cellSpace[0, i].Neighbourhood            = NeighbourhoodConstructor.getUpperNeighbourhood(cellSpace, i, hyperParams);
         cellSpace[i, 0].Neighbourhood            = NeighbourhoodConstructor.getLeftNeighbourhood(cellSpace, i, hyperParams);
         cellSpace[highestIndex, i].Neighbourhood = NeighbourhoodConstructor.getLowerNeighbourhood(cellSpace, i, hyperParams);
         cellSpace[i, highestIndex].Neighbourhood = NeighbourhoodConstructor.getRightNeighbourhood(cellSpace, i, hyperParams);
     });
 }
 private static void InitializeSafeCellNeighbourhoods(AbstractCell[,] cellSpace, int highestIndex, int width)
 {
     //TODO need a "safe distance calculator" for 2D neighbourhood widths
     Parallel.For(1, highestIndex, (int i) =>
     {
         Parallel.For(1, highestIndex, (int j) =>
         {
             cellSpace[i, j].Neighbourhood = NeighbourhoodConstructor.getOKNeighbourhood(cellSpace, i, j, width);
         });
     });
 }
 private static void InitializeEdgeNeighbourhoods(AbstractCell[] cellSpace, int highestIndex, int width)
 {
     cellSpace[0].Neighbourhood = NeighbourhoodConstructor.getLeftEndNeighbourhood(cellSpace, width);
     cellSpace[highestIndex - 1].Neighbourhood = NeighbourhoodConstructor.getRightEndNeighbourhood(cellSpace, width);
 }