Skip to content

Commit b267bc1

Browse files
committed
Added stopping criteria to patrolling
1 parent d732ef4 commit b267bc1

File tree

8 files changed

+49
-12
lines changed

8 files changed

+49
-12
lines changed

Assets/Scripts/ExperimentSimulations/ConscientiousReactiveExperiment.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,8 @@ private void Start()
137137
foreach (var (algorithmName, algorithm) in algorithms)
138138
{
139139
simulator.EnqueueScenario(new MySimulationScenario(seed: 123,
140+
totalCycles: 4,
141+
stopAfterDiff: false,
140142
mapSpawner: generator => generator.GenerateMap(mapConfig),
141143
robotSpawner: (buildingConfig, spawner) => spawner.SpawnRobotsTogether(
142144
buildingConfig,
@@ -155,6 +157,8 @@ private void Start()
155157
}
156158

157159
simulator.EnqueueScenario(new MySimulationScenario(seed: 123,
160+
totalCycles: 4,
161+
stopAfterDiff: false,
158162
mapSpawner: generator => generator.GenerateMap(mapConfig),
159163
robotSpawner: (buildingConfig, spawner) => spawner.SpawnRobotsAtPositions(
160164
collisionMap: buildingConfig,
@@ -173,6 +177,8 @@ private void Start()
173177
//Just code to make sure we don't get too many maps of the last one in the experiment
174178
var dumpMap = new BuildingMapConfig(-1, widthInTiles: 50, heightInTiles: 50);
175179
simulator.EnqueueScenario(new MySimulationScenario(seed: 123,
180+
totalCycles: 4,
181+
stopAfterDiff: false,
176182
mapSpawner: generator => generator.GenerateMap(dumpMap),
177183
robotSpawner: (buildingConfig, spawner) => spawner.SpawnRobotsTogether(
178184
buildingConfig,

Assets/Scripts/ExperimentSimulations/RandomReactiveExperiment.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,8 @@ private void Start()
131131
foreach (var (algorithmName, algorithm) in algorithms)
132132
{
133133
simulator.EnqueueScenario(new MySimulationScenario(seed: 123,
134+
totalCycles: 3,
135+
stopAfterDiff: true,
134136
mapSpawner: generator => generator.GenerateMap(mapConfig),
135137
robotSpawner: (buildingConfig, spawner) => spawner.SpawnRobotsTogether(
136138
buildingConfig,
@@ -149,6 +151,8 @@ private void Start()
149151
}
150152

151153
simulator.EnqueueScenario(new MySimulationScenario(seed: 123,
154+
totalCycles: 3,
155+
stopAfterDiff: true,
152156
mapSpawner: generator => generator.GenerateMap(mapConfig),
153157
robotSpawner: (buildingConfig, spawner) => spawner.SpawnRobotsAtPositions(
154158
collisionMap: buildingConfig,
@@ -167,6 +171,8 @@ private void Start()
167171
//Just code to make sure we don't get too many maps of the last one in the experiment
168172
var dumpMap = new BuildingMapConfig(-1, widthInTiles: 50, heightInTiles: 50);
169173
simulator.EnqueueScenario(new MySimulationScenario(seed: 123,
174+
totalCycles: 3,
175+
stopAfterDiff: true,
170176
mapSpawner: generator => generator.GenerateMap(dumpMap),
171177
robotSpawner: (buildingConfig, spawner) => spawner.SpawnRobotsTogether(
172178
buildingConfig,

Assets/Scripts/Simulation/ExplorationSimulation.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public override void SetScenario(ExplorationSimulationScenario scenario)
2525

2626
public override bool HasFinishedSim()
2727
{
28-
return ExplorationTracker.ExploredProportion > 0.99f;
28+
return ExplorationTracker.ExploredProportion > 0.99f || SimulatedLogicTicks > 3600 * 10;
2929
}
3030

3131
public override void OnSimulationFinished()

Assets/Scripts/Simulation/PatrollingSimulation.cs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ protected override void AfterCollisionMapGenerated(PatrollingSimulationScenario
2323
{
2424
var patrollingMap = scenario.PatrollingMapFactory(new PatrollingMapSpawner(), _collisionMap);
2525

26-
PatrollingTracker = new PatrollingTracker(_collisionMap, patrollingVisualizer, this, scenario.RobotConstraints, patrollingMap);
26+
PatrollingTracker = new PatrollingTracker(_collisionMap, patrollingVisualizer, this, scenario, patrollingMap);
2727

2828
patrollingVisualizer.SetPatrollingMap(patrollingMap);
2929

@@ -32,8 +32,17 @@ protected override void AfterCollisionMapGenerated(PatrollingSimulationScenario
3232

3333
public override bool HasFinishedSim()
3434
{
35-
// TODO: Implement
36-
return false;
35+
if (_scenario.TotalCycles != PatrollingTracker.CompletedCycles)
36+
{
37+
return false;
38+
}
39+
40+
if (!PatrollingTracker.StopAfterDiff)
41+
{
42+
return true;
43+
}
44+
45+
return PatrollingTracker.AverageGraphDiffLastTwoCyclesProportion <= 0.025;
3746
}
3847
}
3948
}

Assets/Scripts/Simulation/SimulationScenarios/PatrollingSimulationScenario.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,13 @@ namespace Maes.Simulation.SimulationScenarios
1414
public sealed class PatrollingSimulationScenario : SimulationScenario<PatrollingSimulation, IPatrollingAlgorithm>
1515
{
1616
public PatrollingMapFactory PatrollingMapFactory { get; }
17+
public int TotalCycles { get; }
18+
public bool StopAfterDiff { get; }
1719

1820
public PatrollingSimulationScenario(
1921
int seed,
20-
SimulationEndCriteriaDelegate<PatrollingSimulation>? hasFinishedSim = null,
22+
int totalCycles,
23+
bool stopAfterDiff,
2124
MapFactory? mapSpawner = null,
2225
RobotFactory<IPatrollingAlgorithm>? robotSpawner = null,
2326
RobotConstraints? robotConstraints = null,
@@ -26,11 +29,13 @@ public PatrollingSimulationScenario(
2629
)
2730
: base(seed,
2831
robotSpawner ?? ((map, spawner) => spawner.SpawnRobotsTogether(map, seed, 1, Vector2Int.zero, _ => new ConscientiousReactiveAlgorithm())),
29-
hasFinishedSim,
32+
null,
3033
mapSpawner,
3134
robotConstraints,
3235
statisticsFileName)
3336
{
37+
TotalCycles = totalCycles;
38+
StopAfterDiff = stopAfterDiff;
3439
PatrollingMapFactory = patrollingMapFactory ?? ((generator, map) => generator.GeneratePatrollingMapRectangleBased(map));
3540
}
3641
}

Assets/Scripts/Simulation/SimulationScenarios/SimulationScenario.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ protected SimulationScenario(
6464
)
6565
{
6666
Seed = seed;
67-
HasFinishedSim = hasFinishedSim ?? (simulation => simulation.HasFinishedSim() || simulation.SimulatedLogicTicks > 3600 * 10);
67+
HasFinishedSim = hasFinishedSim ?? (simulation => simulation.HasFinishedSim());
6868
// Default to generating a cave map when no map generator is specified
6969
MapSpawner = mapSpawner ?? (generator => generator.GenerateMap(new CaveMapConfig(seed)));
7070
RobotSpawner = robotSpawner;

Assets/Scripts/Trackers/PatrollingTracker.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
using Maes.Robot;
1010
using Maes.Simulation;
11+
using Maes.Simulation.SimulationScenarios;
1112
using Maes.Statistics;
1213

1314
using UnityEngine;
@@ -31,14 +32,17 @@ public class PatrollingTracker : Tracker<PatrollingCell, PatrollingVisualizer, I
3132

3233
private List<float> GraphIdlenessList { get; } = new();
3334
//TODO: TotalCycles is not set any where in the code
34-
public int TotalCycles { get; set; } = 10;
35+
public int TotalCycles { get; }
36+
public bool StopAfterDiff { get; set; }
3537

36-
public PatrollingTracker(SimulationMap<Tile> collisionMap, PatrollingVisualizer visualizer, PatrollingSimulation patrollingSimulation, RobotConstraints constraints,
37-
PatrollingMap map) : base(collisionMap, visualizer, constraints, tile => new PatrollingCell(isExplorable: !Tile.IsWall(tile.Type)))
38+
public PatrollingTracker(SimulationMap<Tile> collisionMap, PatrollingVisualizer visualizer, PatrollingSimulation patrollingSimulation, PatrollingSimulationScenario scenario,
39+
PatrollingMap map) : base(collisionMap, visualizer, scenario.RobotConstraints, tile => new PatrollingCell(isExplorable: !Tile.IsWall(tile.Type)))
3840
{
3941
PatrollingSimulation = patrollingSimulation;
4042
Map = map;
4143
Vertices = map.Vertices.ToDictionary(vertex => vertex.Position, vertex => new VertexDetails(vertex));
44+
TotalCycles = scenario.TotalCycles;
45+
StopAfterDiff = scenario.StopAfterDiff;
4246

4347
_visualizer.meshRenderer.enabled = false;
4448
_currentVisualizationMode = new WaypointHeatMapVisualizationMode();

Assets/Scripts/UI/SimulationInfoUIControllers/PatrollingInfoUIController.cs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,17 @@ protected override void AfterStart()
3636
};
3737
SelectVisualizationButton(WaypointHeatMapButton);
3838

39+
if (Simulation != null)
40+
{
41+
StoppingCriteriaToggle.isOn = Simulation.PatrollingTracker.StopAfterDiff;
42+
}
3943

40-
StoppingCriteriaToggle.onValueChanged.AddListener(delegate
44+
StoppingCriteriaToggle.onValueChanged.AddListener(toggleValue =>
4145
{
42-
//TODO: when the stopping criteria is toggled
46+
if (Simulation != null)
47+
{
48+
Simulation.PatrollingTracker.StopAfterDiff = toggleValue;
49+
}
4350
});
4451

4552
WaypointHeatMapButton.onClick.AddListener(() =>

0 commit comments

Comments
 (0)