If you have a few minutes to spare, consider filling in my “Vote for Candy” survey to rank your favorite candies as part of my latest project, especially if you are a resident of a smaller US state. Click/tap here to go to the survey. This tab will stay open.
Gift cards will be given to random participants.
July 30, 2017
Last week I wrote an article on teaching an AI to play Machi Koro using neural networks. A few major findings from that article were
Afterwards, I looked at some more in-depth statistics by simulating 10,000 games and processing the data. The main questions I wanted to answer with visualizations are
The most common build orders all start with the shopping mall, which increases the amount of coins certain properties generate, and is the second-cheapest. The most popular victory path involves building the radio tower, which lets you reroll your dice once per turn, second. This is also the most expensive building, but it is notable that the computer found it worthwile to pursue immediately after building a shopping mall.
Going forward, I will be only looking at the top 10 most frequent build orders, which also have more than 100 examples out of the 10,000 simulations.
In general, the first victory building is often built around a player's seventh through tenth turn (25-40 turns overall). The fastest victories involve building the radio tower as one of the first two buildings, but 60% of the builds focus on shopping malls first. It is likely that players with major windfalls earlier on wait a couple more turns to buy a radio tower, which would likely ensure their victory if no one else has.
Below is a GIF of the frequencies of what properties a player had at various stages of the game with different build orders. While the builds in general are useful for applying them to strategy, seeing the differences between different build paths can also be useful in a game where all of a certain property has been taken, and an alternate needs to be chosen.
Major takeaways from the image(s):
In case you want to see the code used: