How exactly do you handle randomness ? Creating a new branch for every 10% burn chance would be way too expensive with negligible benefits, but evaluating both outcomes seems like an absolute necessity for moves like WoW or Focus Blast.
I actually do branch at every random event, and it is quite expensive, which is why I can only get to a depth of 3 currently. I was considering testing out a version where I "sample" the randomness by running the algorithm a bunch of times and just picking a random variable at each point and acting like that's what will happen. Right now that doesn't seem very useful, but maybe when my depth of search gets to 4-5 without it, that might provide enough of a speed up while still providing enough sampling opportunities to justify it.
What am I considering doing but haven't done is a way to cut off the random search when I know it doesn't matter. For instance, if I evaluate Fire Punch from Electivire against Celebi, then if I were to evaluate CH Earthquake before I evaluate non-CH Earthquake, I could notice that even with a CH on Earthquake, Fire Punch is better than Earthquake, then I don't even bother looking at how much worse a non-CH EQ is. Currently I only do cut-offs like this at the move selection level (if I evaluate Fire Punching their Abomasnow first and I get a score, then I evaluate switching Dragonite into their Abomasnow and I immediately spot that Blizzard would be bad for me, I don't have to keep evaluating all the other moves Abomasnow could possibly make because I assume the opponent uses the best move, so I can stop there).
Why not just use a variation of the team predictor algorithm to have TM build its own team? For example, let it choose a top 15 pokemon at random and then use usage statistics to build the rest of the team for him, with maybe a few extra parameters to make sure it doesn't accidentally build a team with a glaring weakness to ice or something.
This is another idea I've thought of, and what will probably be version 1 of the "I did the entire battle myself" AI. Currently it needs a little bit of help with move set synergy, though.
You sir have intrigued me. So will TM use only popular metagame teams or more a mix of gimmick teams and your everyday common weather team?
It can use really whatever teams it wants. The teams it currently uses have recently expanded. It has a variant of my stall team, a minor variant of my paralysis / Machampions team, a U-turn / Choice item team, and a Baton Pass team.
Using my ultimate vision of the team thief AI, it would use an improved version of any teams that can beat it (and probably delete teams that it uses that lose frequently). One idea would be for Technical Machine to re-evaluate teams every 100 battles (or something along those lines). It would delete every team from its memory that has lost more often than its overall score (or something like that). In other words, if it has an overall win rate of 70%, it would delete any teams it used that lost more than 30% of the games it was used in.
Obviously that's just a rough sketch (since it's just an idea I'm having right now), and it would need some tweaking like "don't delete teams that have been in one battle" or something, and don't delete so many teams that you have fewer than 10 teams, and various rules like that. Perhaps it would even be best to give teams a little wiggle room like "If you perform one standard deviation below the mean, you're cut", after determining the distribution of team wins and using an appropriate statistical measure of standard deviation.
As far as what it has now, the gen 4 teams I have it using are for the most part standard, and I'll probably stick with that for the early pre-built teams in Gen 5. However, I also want TM to have a diverse set of teams to pick from, so I'll probably craft teams representing the top 5 styles or so of play. As an example, I'll probably start out with something like a Rain team, Sun team, Sandstorm team, a stall team, a choice item team, a LO offense team, a BP team, etc. Now, a bunch of those teams could overlap (maybe a stall rain team or something), but I'd probably shoot for about 5 teams that show some variety in teams and cover most of OU.
Right now, what needs to be worked on is the prediction algorithm (and the Life Orb problem) more than anything else.
Well, the Life Orb thing isn't such a big deal. It's probably a 10 minute fix. I'm just working on bigger picture stuff right now in hopes that I'll come up with a better solution by the time I get around to fixing it. As far as prediction goes, I do have a pseudo-prediction algorithm in mind (I outline it on my site at the bottom, under the Yomi Layers section:
http://doublewise.net/pokemon/). However, I don't consider this to be as high priority as implementing Gen 5 and connecting to Pokemon Online, and even once I can do that, I'll probably fix up some other things before I try and add any "prediction" to it. It actually battles pretty well right now as long as it correctly understands the game. It plays more in a style of "I'm going to make it so no matter how well you can predict what I'll do, I'll try and get ahead anyway" instead of a high-risk, high-reward style of "I know what you're going to do and I have the best response".
What I'm currently working on is getting Technical Machine to connect to Pokemon Online. This would make it what I believe to be the first cross-server client. However, I'm having great difficulty deciphering the organization of Pokemon Online's source code, and I took a look at Shanai, but it's written in Lisp which I'm not finding very readable, either. However, I will persevere, and I'm hoping that I'll be connected within a week.
This has also given me an idea for writing a normal client that users would use to connect to Pokemon servers. However, the client would not be limited to any one type of server (any more than Firefox is limited to sites where the author uses Firefox, and Internet Explorer is limited to sites where the author uses IE), and it would possibly have some cool tools built in to it. However, that is much later in the future, after Technical Machine has all gens supported and can connect to all popular servers.