What's the reasoning behind having the current cell maneuver around the
grid that way as opposed to a strict left-to-right, top-to-bottom approach?
If there isn't a modeling requirement for a more complicated approach I'd
suggest something simple that can easily be tested using TDD patterns.

On Wed, Apr 4, 2018 at 11:30 AM, Stewart Aitken <
[log in to unmask]> wrote:

> Hello,
>
> If possible can you point out what changes are required.
>
> Included in this message are a small movie of the horizontal rectangle and
> the vertical rectangle of the same overall grid size.
> It can be seen that the issue is not the ObjectGrid2D but rather the
> neighbourhood method.
>
> I have been through the code thoroughly and cannot find the error.
>
> The default neighbour priority order looks like [ x-1, y, ], [ x, y-1 ].
> [x+1, y ], [ x, y+1 ] from the central cell.
>
>  It appears to be related to the von Neumann neighbours method used in the
> replicate part of Agents2. I have changed the distance to 1
>  rather than the 8 shown previously so the next cell location should be
> simple to identify.
>  The horizontal rectangle appears correct whilst the vertical rectangle
> has two issues.
>
> If the start cell is on the bottom row other than in the L/H/Corner the
> next cell is located at x = x-1, y = 0 rather than the correct location.
>
>  Secondly the bottom row is not recognised by the returning child and thus
> there are empty cells that could be occupied.
>
>  This works completely as expected.
>
>  Horizontal
>  Start X = 5 : Start Y =  4
>  nextX = 4 : NextY =  : 4 : counter =  : 1  Cells remaining :28
>  nextX = 3 : NextY =  : 4 : counter =  : 2  Cells remaining :27
>  nextX = 2 : NextY =  : 4 : counter =  : 3  Cells remaining :26
>  nextX = 1 : NextY =  : 4 : counter =  : 4  Cells remaining :25
>  nextX = 0 : NextY =  : 4 : counter =  : 5  Cells remaining :24
>  nextX = 0 : NextY =  : 3 : counter =  : 6  Cells remaining :23
>  nextX = 0 : NextY =  : 2 : counter =  : 7  Cells remaining :22
>  nextX = 0 : NextY =  : 1 : counter =  : 8  Cells remaining :21
>  nextX = 0 : NextY =  : 0 : counter =  : 9  Cells remaining :20
>  nextX = 1 : NextY =  : 0 : counter =  : 10  Cells remaining :19
>  nextX = 2 : NextY =  : 0 : counter =  : 11  Cells remaining :18
>  nextX = 3 : NextY =  : 0 : counter =  : 12  Cells remaining :17
>  nextX = 4 : NextY =  : 0 : counter =  : 13  Cells remaining :16
>  nextX = 5 : NextY =  : 0 : counter =  : 14  Cells remaining :15
>  nextX = 5 : NextY =  : 1 : counter =  : 15  Cells remaining :14
>  nextX = 4 : NextY =  : 1 : counter =  : 16  Cells remaining :13
>  nextX = 3 : NextY =  : 1 : counter =  : 17  Cells remaining :12
>  nextX = 2 : NextY =  : 1 : counter =  : 18  Cells remaining :11
>  nextX = 1 : NextY =  : 1 : counter =  : 19  Cells remaining :10
>  nextX = 1 : NextY =  : 2 : counter =  : 20  Cells remaining :9
>  nextX = 2 : NextY =  : 2 : counter =  : 21  Cells remaining :8
>  nextX = 3 : NextY =  : 2 : counter =  : 22  Cells remaining :7
>  nextX = 4 : NextY =  : 2 : counter =  : 23  Cells remaining :6
>  nextX = 5 : NextY =  : 2 : counter =  : 24  Cells remaining :5
>  nextX = 5 : NextY =  : 3 : counter =  : 25  Cells remaining :4
>  nextX = 4 : NextY =  : 3 : counter =  : 26  Cells remaining :3
>  nextX = 3 : NextY =  : 3 : counter =  : 27  Cells remaining :2
>  nextX = 2 : NextY =  : 3 : counter =  : 28  Cells remaining :1
>  nextX = 1 : NextY =  : 3 : counter =  : 29  Cells remaining :0
>
>  The only change to the code is to swap the gridWidth and gridHeight.
>  The first child is incorrect for the von Neumann neighbourhood with a
> distance of 1.
>  in the film you can see the finish is correct as the last child is
> surrounded with occupied cells.
>
>  Vertical
>  Start X = 4 : Start Y =  5
>  nextX = 3 : NextY =  : 0 : counter =  : 1  Cells remaining :28
>  nextX = 2 : NextY =  : 0 : counter =  : 2  Cells remaining :27
>  nextX = 1 : NextY =  : 0 : counter =  : 3  Cells remaining :26
>  nextX = 0 : NextY =  : 0 : counter =  : 4  Cells remaining :25
>  nextX = 0 : NextY =  : 1 : counter =  : 5  Cells remaining :24
>  nextX = 1 : NextY =  : 1 : counter =  : 6  Cells remaining :23
>  nextX = 2 : NextY =  : 1 : counter =  : 7  Cells remaining :22
>  nextX = 3 : NextY =  : 1 : counter =  : 8  Cells remaining :21
>  nextX = 4 : NextY =  : 1 : counter =  : 9  Cells remaining :20
>  nextX = 4 : NextY =  : 0 : counter =  : 10  Cells remaining :19
>
>  This is the same as the above with a new start location of the bottom
>  left hand corner and the first child is correct.
>  However the run completes when there is an empty space in the bottom row.
>  It is as if the bottom row is not recognised.
>
>  Vertical2
>   Start X = 0 : Start Y =  5
>  nextX = 0 : NextY =  : 4 : counter =  : 1  Cells remaining :28
>  nextX = 0 : NextY =  : 3 : counter =  : 2  Cells remaining :27
>  nextX = 0 : NextY =  : 2 : counter =  : 3  Cells remaining :26
>  nextX = 0 : NextY =  : 1 : counter =  : 4  Cells remaining :25
>  nextX = 0 : NextY =  : 0 : counter =  : 5  Cells remaining :24
>  nextX = 1 : NextY =  : 0 : counter =  : 6  Cells remaining :23
>  nextX = 2 : NextY =  : 0 : counter =  : 7  Cells remaining :22
>  nextX = 3 : NextY =  : 0 : counter =  : 8  Cells remaining :21
>  nextX = 4 : NextY =  : 0 : counter =  : 9  Cells remaining :20
>  nextX = 4 : NextY =  : 1 : counter =  : 10  Cells remaining :19
>  nextX = 3 : NextY =  : 1 : counter =  : 11  Cells remaining :18
>  nextX = 2 : NextY =  : 1 : counter =  : 12  Cells remaining :17
>  nextX = 1 : NextY =  : 1 : counter =  : 13  Cells remaining :16
>  nextX = 1 : NextY =  : 2 : counter =  : 14  Cells remaining :15
>  nextX = 2 : NextY =  : 2 : counter =  : 15  Cells remaining :14
>  nextX = 3 : NextY =  : 2 : counter =  : 16  Cells remaining :13
>  nextX = 4 : NextY =  : 2 : counter =  : 17  Cells remaining :12
>  nextX = 4 : NextY =  : 3 : counter =  : 18  Cells remaining :11
>  nextX = 3 : NextY =  : 3 : counter =  : 19  Cells remaining :10
>  nextX = 2 : NextY =  : 3 : counter =  : 20  Cells remaining :9
>  nextX = 1 : NextY =  : 3 : counter =  : 21  Cells remaining :8
>  nextX = 1 : NextY =  : 4 : counter =  : 22  Cells remaining :7
>  nextX = 2 : NextY =  : 4 : counter =  : 23  Cells remaining :6
>  nextX = 3 : NextY =  : 4 : counter =  : 24  Cells remaining :5
>  nextX = 4 : NextY =  : 4 : counter =  : 25  Cells remaining :4
>
>
>