My most important thought was to ensure that all CPU time is used. That means continuing to expand the search space in the time after your move has been submitted but before the next turn’s state is received. Branches that are inconsistent with your opponent’s move can be pruned once you know it.
Architecturally, several different levels of planning are necessary: food harvesting and anticipating new food spawns. Pathfinding, with good route caching so you don’t spend all your CPU here. Combat instances, evaluating a small region of the map with alpha/beta pruning and some pre-tuned heuristics. High level strategy, allocating ants between food operations, harassment, and hive destruction.
If you’re really hardcore, a scheduling algorithm to dynamically prioritize the above calculations. I was just going to let the runtime handle that and hope for the best, though.
My most important thought was to ensure that all CPU time is used. That means continuing to expand the search space in the time after your move has been submitted but before the next turn’s state is received. Branches that are inconsistent with your opponent’s move can be pruned once you know it.
Architecturally, several different levels of planning are necessary: food harvesting and anticipating new food spawns. Pathfinding, with good route caching so you don’t spend all your CPU here. Combat instances, evaluating a small region of the map with alpha/beta pruning and some pre-tuned heuristics. High level strategy, allocating ants between food operations, harassment, and hive destruction.
If you’re really hardcore, a scheduling algorithm to dynamically prioritize the above calculations. I was just going to let the runtime handle that and hope for the best, though.