What about Torch Up again?

The challenge to manage a computer cluster to run some experiments, from ideas, the systems to build and control datasets, the distributed programming, the building of the actual cluster, handling the gpus, the building of a system that use that cluster and actually manage to do "X", ..is actually quite fun!

In [2]:
from IPython.display import Image
Image("luna.jpeg")
Out[2]:

Systems that learn by exploring the environment in a competitive setting against other entities similar in skill than them, competing against each other and incrementally improving this way.

We use human data to explore the science of what learning can help us achieve, human data is used as steping stone to help us for pragmatic reasons go faster towards our goals then we might be able to starting solely from self-play.

Components based on human data can help understand the system such that then you can build the more principled version later that does it for itself.

In our constructivistic adventure we are NOT exploring a reinforcement learning path, ...

Our approach is more around the telephone switchboard and the brain analogy found in very old cybernetic and reductionist books and vision this is all quite vage and this still about the missing torch-up results! not the place nor the time, lets focus on what we actually have..

Optional challenge maps updates

Eight new maps have been added to the optional challenge pool, previously only sparkle was available as Island challenge.

Focus is hard, even harder if you focus on the wrong things.. we hope to present you a competitive modern benchmark for Brood War AI, the current map pool is composed of eigthteen 1v1 maps from old kespa days, current ladder and modern tournaments.

Some words on available team maps

New versions of Iron Curtain and Fastest Possible are also available for 1.16.1 in the download, we plan to support team games starting on an eventual season 3 or in the form of an upcoming online ladder.

(4) Sparkle   (3) Reap the Storm   (2) Hitchhiker
   
(3) Neo Sylphid   (4) Colosseum II   (2) Match Point
   
(4) Empire of the Sun   (3) Core Breach   (2) New Bloody Ridge
   

Optional 2v2 and 3v3 challenge

Team league maps and the future.. bwheadless.exe only support 1v1 games without dive and hack into its source code.. hopefully season 3?

(4) Iron Curtain   (8) Fastest Possible
 

Luerl updates

We got a brand new logo for Luerl the language of our favorite game simulator, watch the history unfold!

API updates

Starting our favorite distributed data base to store from our API calls to game replays.

# luna -u riak start                                                         
7b76fab9-d6bf-413f-c1d3-3b8d654b8933
Starting unit riak

INFO:    instance started successfully
Done... In the pipe, five by five.
In [24]:
import requests as req
In [25]:
import ujson as json

OPTIONS

In [26]:
r = req.options('http://127.0.0.1:58008/games')
In [27]:
json.loads(r.content)
Out[27]:
{'Allow': ['HEAD', 'GET', 'POST', 'PATCH', 'DELETE', 'OPTIONS'],
 'POST': {'description': 'Create new game',
  'parameters': {'address': 'str',
   'away': 'str',
   'away_building_score': 'str',
   'away_crashed': 'bool',
   'away_is_winner': 'bool',
   'away_razing_score': 'int',
   'away_timed_out': 'bool',
   'away_unit_score': 'str',
   'bots': 'str',
   'created_at': 'str',
   'created_by': 'str',
   'game': 'int',
   'history': 'list',
   'home': 'str',
   'home_building_score': 'str',
   'home_crashed': 'bool',
   'home_is_winner': 'bool',
   'home_razing_score': 'int',
   'home_timed_out': 'bool',
   'home_unit_score': 'str',
   'labels': 'list/str',
   'last_update_at': 'float',
   'last_update_by': 'str',
   'map': 'str',
   'replay': 'str',
   'session': 'str',
   'status': 'str',
   'uuid': 'str'}}}

GET games

In [42]:
r = req.get('http://127.0.0.1:58008/games/')
In [43]:
r.status_code
Out[43]:
200

Pagination

In [30]:
r = req.get('http://127.0.0.1:58008/games/page/2')
In [31]:
r.status_code
Out[31]:
200
In [32]:
json.loads(r.content)
Out[32]:
{'count': 8, 'page': 2, 'results': []}

GET game

In [33]:
r = req.get('http://127.0.0.1:58008/games/4c489b26-4c20-4764-9e1a-4bc8e69185c3')
In [34]:
a = json.loads(r.content)
In [35]:
a
Out[35]:
{'uuid': '4c489b26-4c20-4764-9e1a-4bc8e69185c3',
 'game': 1,
 'session': '6de0965e-8155-4d96-884c-dd9bc9f76eee',
 'bots': 'Locutus:Letabot',
 'map': '\\(4\\)Gladiator1.1.scx',
 'home_is_winner': False,
 'home_crashed': True,
 'home_timed_out': False,
 'away_is_winner': False,
 'away_crashed': False,
 'away_timed_out': False,
 'created_at': '2020-04-27T15:58:09.278718',
 'status': 'deleted'}

PATCH

In [36]:
data = {'home_crashed': True}
In [37]:
r = req.patch('http://127.0.0.1:58008/games/4c489b26-4c20-4764-9e1a-4bc8e69185c3', json.dumps(data))
In [38]:
r.status_code
Out[38]:
200
In [39]:
r.content
Out[39]:
b'{"message": "update completed successfully"}'

DELETE

In [40]:
r = req.delete('http://127.0.0.1:58008/games/4c489b26-4c20-4764-9e1a-4bc8e69185c3')
In [41]:
r.status_code
Out[41]:
204

Creating a complete tournament test round

If you want to know more about how are we using this API to generate a complete round of test games, pairing the bots, scheduling the maps or anything in between, there is an available notebook with all details, in general we are using Python 3, Erlang and Lua to hack our way around things.

While we wait toguether for this to end as a meme and actually get to a good port having some published results, hopefully this serve to update any curious one of our progress, goals and current state.