BryanSWeber / CUNYAIModule

CUNYBot, an AI that plays complete games of Starcraft.
MIT License
6 stars 3 forks source link

Refactor PlayerModel/LearnedPlan/BuildOrder #236

Closed BryanSWeber closed 2 years ago

BryanSWeber commented 2 years ago

It seems to make sense that the Learning Manager selects a build.

The build should include Maximums unit counts that are currently contained in the PlayerModel. The build should stay within the LearningManager and not be a separate singleton build.

Inspiration should be taken from bots that work well- McraveZ was suggested, permission was granted.

BryanSWeber commented 2 years ago

Now use UCB to select build order. Uses values for build parameters determined by several months of GA on Basil. Trimmed to only 6 build orders: 1H muta 2H muta, 2H lurker, 4H before pool, 5pool, 7pool. After build order completes, bot resumes so-called freestyle play.

Tested against a handful of peer bots on fighting spirit. Improvements are statistically significant, p=0.011 based on overall win percentage. I still do not consider map-based complications important, since the gap in general functioning between bots is typically massive. Still, they are beginning to become become relevant (some maps it does not take the proper natural, which is alarming). Some statistically significant drop against Tyr and ICE has occurred, likely from the changes in ready_to_fight. However, the change increases parsimony and improves readability and therefore is acceptable in the long run. Expected wins is calculated from a dump of Basil performances over several months.

Bot Name        Games       Wins        Expected Wins (Based on BASIL History)
Willbot         69      37          37.18333333
WuliBot         122     67          51.85
Dave Churchil       131     62          51.14741036
Megabot         65      44          43.99239544
TyrProtoss      125     49          88.27319588
ICEBot          61      28          39.21428571
ZurZurZur       75      58          6.370656371
BryanSWeber commented 2 years ago

Not changed: The build should include Maximums unit counts that are currently contained in the PlayerModel. We still have universal maximums in the PlayerModel. There is a good deal to refactor and it's not clear that this transition is parsimonious. If it is done, it will involve a MAJOR gutting of PlayerModel and rethinking what a "build" is entirely (ex: is a build a unit maximum? A minimum? Or a static sequence of units?).