Technical Machine: A Pokemon bot

obi

formerly david stone
is a Site Content Manager Alumnusis a Programmer Alumnusis a Senior Staff Member Alumnusis a Smogon Discord Contributor Alumnusis a Researcher Alumnusis a Top Contributor Alumnusis a Battle Simulator Moderator Alumnus
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.
 

Arcticblast

Trans rights are human rights
is a Forum Moderatoris a Tiering Contributoris a Social Media Contributor Alumnusis a Senior Staff Member Alumnusis a Community Contributor Alumnusis a Battle Simulator Moderator Alumnusis a Past SPL Champion
4) ???

5) Skynet
lol

Battle logging actually sounds like a pretty good idea. Being able to look at battles that Technical Machine has been in would not only help you fix bugs / fine tune prediction, but could also provide the opponent with a battle log with which they can evaluate their performance.

As for anonymity, usernames (sans TM) and chat messages could be removed, although that sort of conflicts with my second point about logging.
 

obi

formerly david stone
is a Site Content Manager Alumnusis a Programmer Alumnusis a Senior Staff Member Alumnusis a Smogon Discord Contributor Alumnusis a Researcher Alumnusis a Top Contributor Alumnusis a Battle Simulator Moderator Alumnus
You'd have to compile Technical Machine right now; there are no pre-built binaries at this point. Technical Machine also only runs on Pokemon Online version 1, and I don't know if anyone is running any servers that old.

I am, however, currently working on Pokemon Showdown support.
 
You'd have to compile Technical Machine right now; there are no pre-built binaries at this point. Technical Machine also only runs on Pokemon Online version 1, and I don't know if anyone is running any servers that old.

I am, however, currently working on Pokemon Showdown support.
I still use pokemon online, will Technical machine be able to be used on it when it is finished? I'd much rather prefer doing ai battles (single player) without having to require an internet connection (for something like showdown)
 
Two questions: What exactly is necessary to implement data for pokemon from generation 6 and beyond? Does the AI need to be tweaked or is it just required that one adds new pokemon?

Secondly, is there any way to contact you, David Stone? I have some questions to ask in private.
 

obi

formerly david stone
is a Site Content Manager Alumnusis a Programmer Alumnusis a Senior Staff Member Alumnusis a Smogon Discord Contributor Alumnusis a Researcher Alumnusis a Top Contributor Alumnusis a Battle Simulator Moderator Alumnus
I almost have Pokemon Showdown working. Technical Machine can log into a server and I can watch the chat. I just have to add a library that gives it the ability to make an HTTP POST request to authenticate. The next step after that is finishing up my "other generation" support. Most of it is not too much work, and a lot of it is already done.

You can always just send me a private message on here.
 
Hi I just joined and wondering Can you update it so we can use it on PO v.2? I was thinking it can be a client script but Ill just try to use yours instead of making my own
 

Users Who Are Viewing This Thread (Users: 1, Guests: 0)

Top