Some random remarks
https://github.com/Norman1/SupremeDalek/blob/master/src/evaluation/RegionAndSuperRegionAnnotator.javasubRegion.getPlayerName().equals("neutral")
Many such magic string constant usage. Could be replaced with static final variable.
Also comparing string is slow operation. For my bot I had replaced owner with just integer number.
https://github.com/Norman1/SupremeDalek/blob/master/src/evaluation/GameStateCalculator.javain method isStalemateSituation2 used magic constant number 4 for number of neutral regions of bonus. What about unusual maps with, for example 10 regions per bonus?
https://github.com/Norman1/SupremeDalek/blob/master/src/evaluation/RegionValueCalculator.java
if (region.getSuperRegion().getId() == 6) {
region.setAttackRegionValue(region.getAttackRegionValue() + 4);
}
if (region.getSuperRegion().getId() == 2) {
region.setAttackRegionValue(region.getAttackRegionValue() + 3);
}
Hardcode not usable on other maps. Also what if on same map ids of regions will be changed?
Also in many classes (BotState state) is passed as argument to static methods. In this case Better to make methods not static, and put BotState state as field of corresponding class. And then access methods via instance of class without need to pass BotState every time.
https://github.com/Norman1/SupremeDalek/blob/master/src/evaluation/SimpleHeuristics.javacalculateMostDesirableSuperregion - income of region is not taked into account.
Imagine that you have one bonus with 5 regions and 10 income.
and other bonus with 4 regions and 1 income. And in both bonuses you have 1 captured region.
Then your method will return second bonus as more desirable.