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 > > >