Ultimate Tic Tac Toe [Puzzle discussion]

If we remove the number of small boards without considering something else, there will be even more draws, no?

Agree… It is just a copy-paste from AI Games… Lets be original. Change some rule…

And, if it is to copy AI Games, please, copy the Time Bank feature… Or this will be more one game for C/C++ developers only…

I’m afraid that would also require massive changes in their platform :confused:

As far as I know uTTT was not invented by aigames, so it doesn’t really matter if it’s a copy or not, just like it doesn’t matter for Tron.

I think the biggest issue is, from my understanding, the ranking system throws away draws instead of feeding them to TrueSkill, which makes proper ranking difficult in draw-heavy games.

I also think it’s the only reason a draw-heavy game can be considered an issue at all, as it can naturally happen a lot with more ‘classic’ games like this or chess. I would much rather fix the ranking than try to add an arbitrary rule to an already well-established game (imagine changing chess to deal with draws), with little knowledge of the impact it will have on the game balance.

That being said, I don’t have any idea for better ‘rules’ at the moment, and my experience with the game is very limited (I started my bot barely a day ago), so I would trust Daporan’s experience with the game if he thinks the new rule isn’t good. Maybe we can also conduct further experiment with variants in a demo playground before bringing it to the official game?

3 Likes

Why are draws not fed to TrueSkill?

(and me was rejoicing of drawing DaFish sometimes :smiley: score update is lagging enough that it’s confusing and not always obvious what’s happening)

That’s something we configure for each game and for this game they are not thrown away.

1 Like

Good to know, thanks! Sorry for the misunderstanding.

This is great !

Out of curiosity, what are the games where draws are thrown away, and what was the reasoning behind it ?

I don’t remember which games do not take into consideration the draws but I can give you one example: Tron. In this game, the starting position is random and not symmetrical. Sometimes this leads to a huge advantage to one player (imagine if you’re in a corner of the map and the other can quickly block you). For this reason, it has been decided to throw away draws to only consider the games where there’s a clear winner.

1 Like

Hi, how to know when a new game started?
When I play first, if there is 81 valid actions or opponent’s row and col are -1 -1, I know its a new game. How to know if a new game started when I am the second player?
Thanks

opponent’s row != -1 and it’s the first time you enter in your loop.

1 Like

I know that but it is every time I enter in the loop when I don’t play first! How to know a new game started when I play second? (We don’t have the current game state on each loop.)

Your program isn’t restarted on each game turn, you can store values in variables declared outside of the main loop. Basically, you can create a variable called “turn” outside from the loop, increment it inside the loop and test its value to know if it’s the first turn or not.

Yes you’re right. Thanks for your answer.

I got ‘Invalid output’ error today while there were no any output from my bot, and in the chat
eulerscheZahl told me, that for timeout in this game there is ‘Invalid output’ error also. If it is true, is it possible to fix it, because it is not obvious, wjile we have Timeout error in other games?

1 Like

The victory conditions was updated:

You’ve won on 3 aligned smaller tic-tac-toe boards. If nobody managed to get 3 marks aligned, the player that won the most smaller tic-tac-toe boards wins.

So, the rules will not change anymore?

At the moment, the game can still be a draw if both players get as many marks on the big grid.

It is possible to introduce a new rule, stating the following : "If the grid is full and the game is drawn according to current rules, the winner is the player who has the most marks on all undecided small grids."

This new rule would guarantee that no game can be drawn.

I’m curious to have your thoughts about it ?

Why is a draw something to correct? You’re giving a huge advantage to the first player that way.

3 Likes

Just small story about how I tried to win UTTT with Neuron Network and fail.

I just decided to write this story for community (as Thibaud said – community is important :wink: ) – maybe somebody find something interesting for him.

Currently I started learning a bit about NN so I want to try to check my knowledge on some case. I just written very simple MCTS bot for UTTT which moved to middle of Gold – so I decided to test NN (specifically speaking – Convolution Neural Network - CNN) on this game.

What I wanted to do?

I planned to implement following steps (I name it for myself PMAG – Poor Man AlphaGo :wink: ):

  1. Gather games replays from my bot and top players’ bots
  2. Extract moves from these replays
  3. Using moves – calculate states before every move
  4. Create 2 sets of pairs: (game state, move) – one for winner, second for loser
  5. Use pairs from winner to train CNN
  6. Implement trained CNN in the bot and run it on CG
  7. Repeat from step 1

I expected that, after each iteration, my bot will be better and better.

What I done?

  1. I written small script in Python and gather around 2000 UTTT replays
  2. Using another Python script I extracted lists of moves with information which player win
    3-4) Using simulator from my current C++ bot I calculated states and generated *.png for each state and put them in directory {win/lost}/{next_move}
  3. I written script in Python, using #Keras and #TensorFlow to train small CNN (very basic – just to start – I planned to improve it letter) and train this CNN.

As you see I just went according to plan. It was Friday evening, I have had all weekend – I was in good mood.

And in this moment I realized that it is source size limit on CG. I know about it, of course, but never before my code rich the limit – so my knowledge was only theoretical. Now I saw that my very basic NN has around 50 k floats – what mean around 200 kB – and even more because I have to code bytes using base64 or base83.

But maybe source code limit is not so strict?

I tested and even file 100.3 kB was too long. So limit is 100 kB and is very strict. So instead of improving my basic NN – I have to simplify it . So I returned to point 5) and trained even simplest NN. So from now all my decision for implementing bot was dictated by source size limit:

I decided to implement bot in Python (not in current C++ bot) because:
a. for golf Python is better – code is smaller
b. in Python they are function for base64 and base83 – another decrease of source code
c. in Python it is float16 (in C++ I will have to implement myself such library)

When I finally have my program working on CG I run it – and have had 0% win rate in Gold. Checked and of course found big bug (I wrongly implemented conversion from NN output to moves).

After bugfix – bot start winning. Sometime. Very rarely  It finish as last in Gold. With rank around 14.0. So probably it was good enough to first half of Silver. But no more.

So I fail.

I still have few ideas what I can change – but I’m afraid that source code limit will not give me possibility to even write NN program better than my current, basic MCTS. Maybe it is intentional from CG – to protect good programmers from lazy ones and his NN bots :wink:

If not – maybe it is possible to increase source size limit? Or implement another solution – give possibility to upload data (for example 10 MB for each login) and let bots to use data from owner account?

And if somebody is curious do my NN was realy basic it was:

conv -> batchnorm -> relu -> conv -> batchnorm -> relu -> conv -> relu -> dense -> relu -> drop -> dense -> softmax.

Really basic, no inception, no ResNet, no deep.

18 Likes

Are we going to have ‘Legend’ league opened for UTTT?