What's the reasoning behind having the current cell maneuver around the
grid that way as opposed to a strict lefttoright, toptobottom 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 [ x1, y, ], [ x, y1 ].
> [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 = x1, 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
>
>
>
