I'm getting reasonably confident in Golem's ability to evaluate the "winningness" of a deck and suggest appropriate buys. In most cases. Here are the big things I still need to fix:
- Its endgame is dumb. This makes some sense, because playing the endgame is about expanding out the probabilistic game tree and maximizing your chance of ending with the most VP, not about making your deck look more like an ideal deck. An amusing example is that it appears to have kind of learned the Penultimate Province Rule, but incorrectly: I saw it decide a Duchy was better than a Province when there were two Provinces left in the supply. When it was ahead on points.
- It tends to severely undervalue silver when it has a chapel, so that if it were paired with a reasonable card-playing strategy, it would often have to hold onto its coppers for quite a while to avoid killing the deck. I don't know why it does this.
The remaining flaws are API problems that don't affect the underlying deck-fitness function:
- It doesn't know when piles are Embargoed and there currently isn't a way to tell it.
- It doesn't plan ahead when it should know how many coins it's going to have. If you want Golem to buy the right cards with a 4/3 opening, it's better to ask it in the 3/4 order so it doesn't waste its $4 buy on a $3 card it wants exactly one of, or a Chapel.
- Don't tell it it has 4 or more buys, because it will consider the possibilities exhaustively. A somewhat greedy search would be better -- for example, find the best choice with 2 buys, buy the best single card of those two, and re-evaluate until all the buys are used or until the appropriate buy is none.
Other people might be able to make the progress I'm not making on actually playing turns intelligently if they had access to Golem, so I plan to put it up on a server with a JSON API soon. Would this help?
My guess is that's more helpful than expecting other people to actually run the code, as it depends on some rather experimental software, but if people want to get involved in the development of Golem itself I could also work on explaining how to get its dependencies.