I considered parallelizing my solution as well, but the problem is that it only gives a linear speedup, while the problem space increases exponentially. I decided to focus on pruning the search tree instead, and that seemed to work pretty well (after much thinking).
* https://github.com/brianberns/Hearts
* https://github.com/brianberns/MinGptSharp
The math is a bit over my head, but this formulation seems more difficult than the one I'm familiar with. For example, x^2 is represented as 0::0::2 instead of 0::0::1 (because 2! = 2) and x^3 is represented as 0::0::0::6 instead of 0::0::0::1 (because 3! = 6). Is there a benefit to that?
I implemented the same thing myself in F#. [1]
[0]: https://citeseerx.ist.psu.edu/document?repid=rep1&type=pdf&d...