public void PickObservation(out int index, out int pattern) { var topology = propagator.Topology; var t = edgedPathView.PathSelectedTracker; // Find cells that could potentially be paths, and are next to // already selected path. In tileSpace var tilePriority = Enumerable.Range(0, topology.IndexCount).Select(i => { if (!topology.ContainsIndex(i)) { return(-1); } var qs = t.GetQuadstate(i); if (qs.IsYes()) { return(2); } if (qs.IsNo()) { return(0); } // Determine if any neighbours exit onto this tile for (var d = 0; d < topology.DirectionsCount; d++) { if (topology.TryMove(i, (Direction)d, out var i2, out var inverseDirection, out var _)) { if (edgedPathView.TrackerByExit.TryGetValue(inverseDirection, out var tracker)) { var s2 = tracker.GetQuadstate(i2); if (s2.IsYes()) { return(1); } } } } return(0); }).ToArray(); var patternPriority = tileModelMapping.PatternCoordToTileCoordIndexAndOffset == null ? tilePriority : throw new NotImplementedException(); index = randomPicker.GetRandomIndex(randomDouble, patternPriority); if (index == -1) { fallbackHeuristic.PickObservation(out index, out pattern); propagator.Topology.GetCoord(index, out var x, out var y, out var z); } else { propagator.Topology.GetCoord(index, out var x, out var y, out var z); pattern = randomPicker.GetRandomPossiblePatternAt(index, randomDouble); } }
public void PickObservation(out int index, out int pattern) { // Choose a random cell index = randomPicker.GetRandomIndex(randomDouble); if (index == -1) { pattern = -1; return; } // Choose a random pattern pattern = randomPicker.GetRandomPossiblePatternAt(index, randomDouble); }