First, just so you know where I’m coming from, I’m a professional programmer, and I’ve studied AI, but I don’t work with AI professionally, so there are limits to my expertise. I defer to anyone who is an expert in AI, but I think currently my expertise is most applicable to this question. That said,
There is a major constraint on the way we currently build AI, that makes its application to deck-building games intractable, at least on our current hardware.
Our general approach to AI—“machine learning”—involves the AI trying some random approach, evaluating it for effectiveness, and then doing so over, and over, and over, refining that randomness towards something better and better.
It is absolutely crucial, in this scheme, to be able to tell how good a given random try was. To learn, the AI needs to know that attempt 1354235 was better, or worse, than attempt 1354236. In a large sense, this is all machine learning requires, which certainly makes it very powerful, but it is a hard requirement. We need to be able to assign a number to how good a try something was, because what the AI is really doing is maximizing that number (or minimizing, whatever).
To my knowledge, no deck-building game out there enables any easy calculation of the general quality of a given deck. What do human “optimizers” of the game (e.g. pros) do? They create a deck and play it a lot, leveraging their considerable experience. Not just to see how it does in a variety of situations—but also to learn how to play it, that is, figure out the optimal strategy for playing the cards the deck makes available.
So here, for each deck, the AI wouldn’t just be able to obtain a number for how good the deck is—they’d have to have some sub-AI that’s training with that deck, learning how to optimize play with that deck. Since machine learning requires thousands or millions of iterations, having each deck iteration itself require thousands of strategy iterations just to learn how good the deck is, is going to be a huge problem. Our computers simply aren’t fast enough to get through all of that in a reasonable amount of time.
And there isn’t really any way around this. If you just program some game-playing ability into the AI, so it doesn’t iterate its strategy, it just tries to play, you aren’t really learning about the potential of each deck the AI comes up with. You’re just learning how well that deck happens to match the strategy you pre-programmed, which is probably not going to be terribly interesting or useful.
The way humans get around this is through heuristics—which roughly means something like “rule of thumb.” We have ideas about what is or isn’t a good idea, we can evaluate at least some options on paper as just not worth considering. Our brains are very heavily optimized for this task, and we do it constantly, considering only a tiny subset of the possibilities before us, based on our experience and understanding, to keep everything manageable. But the power of AI is to avoid these human heuristics, try out things that we never would have considered. We don’t want to influence or narrow the potential solution space—the whole point of this exercise is to explore it more thoroughly than a human can do.
We’re not there yet. When we have working deck-playing AIs for one of these games, where the AI can take a random deck and optimize playing that deck, then we can think about optimizing the deck-building part of things. But ultimately, the only way to know if you’ve built a good deck is to play it, so start there.