I've made some pretty extensive advancements to Technical Machine's performance. It is now able to search 4 turns ahead, averaging about 10 seconds per turn (down from it taking 20 minutes). Now searching 5 turns ahead is feasible, as it takes about 10 minutes. I have several more optimizations that I could add, but Technical Machine has finally reached the point where memory access is not the bottleneck.
Previously, what slowed TM down the most was simply accessing memory. I've spent a lot of time optimizing my data structures to minimize this cost, and now it hardly shows up in my profiling. The majority of the time now is spent on evaluating positions, which will likely prove harder to optimize. However, some of the optimizations I have planned involve limiting the amount of positions that I have to evaluate at all, so those types of optimizations will always be general-purpose speed up that will work regardless of which part of the routine is slow.
Now that 5 turns is in reach (which was my original goal), this is what I plan to do going forward:
1) Add support for Pokemon Showdown. This step should be fairly straightforward. I already have the basis for new simulators in Technical Machine, and I have an idea for how I will implement this.
2) Add full support for generation 5. Technical Machine right now could probably engage in generation 5 battles, but just wouldn't be as good at them. I still have a few mechanics I need to add in. Mostly, though, I need to improve my ability to take in new types of statistics. This part of the code is almost done, and once it is, Technical Machine will support any metagame that we have usage statistics for. It will also be easily to incorporate other formats of data other than what Antar puts out right now.
3) Have Technical Machine fine tune its own evaluation constants. Right now, it's using a very rough approximation that I put together years ago. I only tuned it once to slightly reduce the value of Stealth Rock, which lead to a dramatic improvement in Technical Machine's ability to evaluate. I know there is still much room for improvement here, but I also know that not I or any other human is capable of tuning them to the degree that Technical Machine is. Therefore, I will be adding an evolutionary algorithm that will automatically change those constants as Technical Machine battles, making it get smarter the more it plays.
4) ???
5) Skynet
Some other ideas that I have, but I don't know when I will implement them, involving automatic logging of battles. Technical Machine currently doesn't log anything. I hope to automatically save TM's logs and possibly upload them to my site for evaluation. I am not sure yet how anonymized I will make the logs.