pluto README

The project's README from github.com/tscmoo/pluto. As one markdown file: README.md.

Pluto

Pluto is a StarCraft: Brood War AI. A single neural network, trained by self-play reinforcement learning, plays the whole game — macro and micro, all three races; there is no scripted play. It plays 1v1 melee through BWAPI (https://bwapi.github.io/).

Status: binary releases. This repo hosts binary releases of Pluto. The current one is the model that played the CoG 2026 StarCraft AI Competition (md07x02_cog2026_2578600_int8mv), with CPU inference — no GPU needed. Grab it from the Releases page.

Requirements

Install

Unpack the release zip into your StarCraft folder's bwapi-data/AI/ (the usual place for bots), so the files land like this:

bwapi-data/AI/pluto.dll                 32-bit BWAPI module
bwapi-data/AI/pluto/pluto_infer.exe     64-bit CPU inference engine
bwapi-data/AI/pluto/pluto_weights.bin   network weights (int8)

Point bwapi.ini at the DLL as usual: ai = bwapi-data/AI/pluto.dll

Register the bot as Zerg, Terran, Protoss, or Random — it plays all of them. It announces itself in chat on game start: "Pluto online (md07x02_cog2026_2578600_int8mv). gl hf!"

The binaries are unsigned, so Windows SmartScreen or antivirus software may warn on first run.

How it runs

On game start, pluto.dll launches pluto_infer.exe (found next to the DLL) and talks to it over shared memory. No network connections are made and no files outside the StarCraft folder are touched. The engine process exits with the game.

The model takes one step every 6 game frames. The DLL gives the engine up to 40 ms in the frame it observed and, if the answer isn't in by then, waits for it at the next frame — so every decision is acted on exactly when the model was trained to expect it. On a slow CPU the game runs slower; the bot does not play worse. A step takes ~20 ms on a current desktop CPU and ~60 ms on a 2021 6-core (i5-12500T) with 200 units on the map, up to ~3x that in big late-game fights. When the stalls stay long for a sustained stretch, Pluto says so once in chat ("Pluto: this machine can't keep up ... sorry about the pace") and notes it in its game record.

If the engine cannot start (missing files, unsupported CPU) or dies mid-game, the bot reports the reason in game chat and in the logs ("Pluto: quitting in 10 seconds"), then exits the StarCraft process. This looks like a crash, and is meant to: it is an error, not a game. Check pluto.log and pluto_infer.log in the StarCraft folder.

Files written

pluto.log          DLL log     (StarCraft folder)
pluto_infer.log    engine log  (StarCraft folder)
bwapi-data/write/pluto_bandit_<opponent>.txt
                   per-opponent build-order stats and the running
                   record against that opponent

The bot picks its opening with a bandit over the per-opponent win/loss counts; every build is listed with its mask and name, so you can edit the numbers to steer it. The file is re-read every game (from write/ or read/, whichever is newer, so the usual write/ -> read/ copy between games works too); if you edit it, bump the seq line so your copy wins and keep the closing end line. Below the stats, the file keeps one JSON line per game: a start record (opponent, map, chosen build), an end record (result, frame timing, the model's win-probability trajectory) and any error or resign events.

Notes

pluto (tscmoo/pluto)

Searching Database…

265 ·GitHub
Что это?Pluto — AI-бот для StarCraft: Brood War: единая нейросеть, обученная end-to-end обучением с подкреплением в играх против самой себя, которая играет и макро, и микро за все три расы, без скриптовой логики.
Это обучаемый фреймворк или готовый к игре бот?Этот репозиторий содержит только бинарные релизы уже обученной модели (той самой, что использовалась на соревновании CoG 2026); это готовый к запуску бот, а не код для обучения.
Как установить и запустить его?Распакуйте zip из релиза в bwapi-data/AI/ вашей папки StarCraft, чтобы pluto.dll, pluto/plutoinfer.exe и pluto/plutoweights.bin легли на свои места, затем в bwapi.ini укажите в строке ai= путь к pluto.dll и зарегистрируйте бота как Zerg, Terran, Protoss или Random.
Что нужно помимо самого бота?Нужны StarCraft: Brood War 1.16.1 с BWAPI 4.4.0, 64-битная Windows или Wine и процессор x86-64 с AVX2 (AVX-VNNI примерно удваивает скорость); GPU не требуется, так как инференс идёт на CPU.
Что может пойти не так при запуске?Бинарники не подписаны, поэтому SmartScreen или антивирус могут ругаться при первом запуске; а если движок инференса не стартует или умирает посреди игры, бот намеренно роняет процесс StarCraft вместо того, чтобы корректно сдаться, — смотрите pluto.log и plutoinfer.log.
Ему нужна именно Windows?Он работает нативно на 64-битной Windows или через Wine на Linux; 32-битный процесс игры и 64-битный движок инференса запускаются как отдельные процессы.
Он стучится в сеть или трогает чужие файлы?Нет — движок инференса общается с DLL только через разделяемую память, не создаёт сетевых подключений и не трогает файлы вне папки StarCraft.
Как Pluto выбирает, с каким билд-ордером начинать?Он использует алгоритм бандита поверх статистики побед/поражений по каждому противнику, хранящейся в текстовом файле (plutobandit), выбирая билды по их зафиксированному результату против конкретного соперника; статистику можно править вручную, чтобы направлять его выбор.
Что происходит, если Pluto считает, что проигрывает?Когда его собственная оценка вероятности победы держится на уровне поражения около 10 секунд, он пишет «gg» в чат и покидает игру — это отдельно от падения движка посреди игры, которое считается ошибкой, а не поражением.
Можно ускорить инференс на моей конкретной машине?Да — один запуск plutoinfer.exe --bench (около 2–4 минут) тестирует число потоков на вашем железе и сохраняет лучший вариант в plutoconfig.json.
Можно наблюдать уверенность модели в реальном времени во время матча?Да — если задать переменную окружения BWRLDRAW=1, во время игр на экране рисуется график вероятности победы модели.
Creator
tscmoo
Size
<0.1 MB
Stars
265
Age
3mo
Commits · 90 Days