Scalable Decision Making for Games of Imperfect Information
Organizations: Carnegie Mellon University · NYU Tandon School of Engineering · Stanford University · Massachusetts Institute of Technology
Abstract
Real-world decision-making generally involves hidden information, that is, information that is unknown to one agent but possessed by another. Unfortunately, the presence of large amounts of hidden information renders established reinforcement learning and search approaches ineffective. Even with multimillion-dollar industrial research efforts, top-human-level play at Stratego---a board wargame with hidden information on a massive scale---has remained beyond the reach of artificial intelligence (AI). Here we introduce Ataraxos, an AI for Stratego based on general techniques that we developed for both self-play reinforcement learning and test-time search under hidden information. Ataraxos defeated the most decorated human Stratego player of all time by a large margin---achieving, to our knowledge, the first superhuman result in the game's history---while consuming orders of magnitude less compute and data than previous efforts. Using the same techniques, we built a superhuman AI for Barrage Stratego and state-of-the-art AIs for Hanabi and dou dizhu, all with low cost and high sample efficiency. The success of this approach across adversarial, cooperative and team games establishes a design pattern for reinforcement learning and search that is effective under large amounts of hidden information, a longstanding desideratum of the field of strategic decision-making.
Figures & tables
| Method | Input | Output | Description |
|---|---|---|---|
| CurrentStep | (none) | 64-bit integer | Returns the number of state updates performed by the simulator. |
| ActingPlayer | time step | 0 or 1 | The player acting at the current time step (0 for the red player, 1 for the blue player). |
| ComputeLegalActionMask | time step | (none) | Computes the legal action mask for the acting player at the given time step. The answer is written in a preallocated tensor kept by the rollout buffer. |
| ComputeInfostateTensor | time step | (none) | Computes the information state for the acting player at the given time step. The answer is written in a preallocated tensor kept by the rollout buffer. |
| ComputeRewardPl0 | time step | (none) | Computes the reward for the red player at the given time step. The reward is set to 0 for those boards that are not terminated at the given time step. The answer is written in a preallocated tensor kept by the rollout buffer. |
| ComputeIsUnknownPiece | time step | (none) | Computes a boolean tensor indicating which pieces are unknown to the acting player. The answer is written in a preallocated tensor kept by the rollout buffer. |
| Channel(s) | Description |
|---|---|
| 0–11 | Indicator of whether the piece occupying each square belongs to the player and has type , for each of the 12 types Spy, Scout, Miner, Sergeant, Lieutenant, Captain, Major, Colonel, General, Marshal, Flag, Bomb . |
| 12–23 | For each square, probability that it belongs to the opponent and has type for each of the 12 types , assuming the setup and moves were selected uniformly at random. |
| 24–35 | Same as channels 12–23, but from the point of view of the opponent player. |
| 36 | Indicator of what squares on the board are occupied by hidden pieces of the player. |
| 37 | Indicator of what squares on the board are occupied by hidden pieces of the opponent. |
| 38 | Indicator of what squares on the board are empty. |
| Channel(s) | Description |
|---|---|
| 43–52 | Indicator of whether the piece occupying the square belongs to the player, and has ever threatened a piece of the opponent which, at the time of the threat, was a revealed piece of type . |
| 53 | Indicator of whether the piece occupying the square belongs to the player, and has ever threatened a piece of the opponent which, at the time of the threat, was hidden. |
| Channel(s) | Description |
|---|---|
| 54–63 | Indicator of whether the piece occupying the square belongs to the player, and has ever evaded a threat from an opponent’s piece which, at the time of the threat, was a revealed piece of type . |
| 64 | Indicator of whether the piece occupying the square belongs to the player, and has ever evaded a threat from an opponent’s piece which, at the time of the threat, was hidden. |
| Channel(s) | Description |
|---|---|
| 65–74 | Indicator of whether the piece occupying the square belongs to the player, and has ever been actively adjacent to an opponent’s piece which, at the time of the adjacency, was a revealed piece of type . |
| 75 | Indicator of whether the piece occupying the square belongs to the player, and has ever been actively adjacent to an opponent’s piece which, at the time of the adjacency, was hidden. |
| Channel(s) | Description |
|---|---|
| 76–85 | Same as channels 43–52, but from the point of view of the opponent player. |
| 86 | Same as channel 53, but from the point of view of the opponent player. |
| 87–96 | Same as channels 54–63, but from the point of view of the opponent player. |
| 97 | Same as channel 64, but from the point of view of the opponent player. |
| 98–107 | Same as channels 65–74, but from the point of view of the opponent player. |
| 108 | Same as channel 75, but from the point of view of the opponent player. |
| Channel(s) | Description |
|---|---|
| 109–119 | Indicator of whether the given square was occupied, at the start of the game, by a piece of the player of type that has now been captured. |
| 120–130 | Indicator of whether the given square was occupied, at the start of the game, by a piece of the opponent of type that has now been captured. |
| Channel(s) | Description |
|---|---|
| 131–140 | Whether a piece of the player of type died in this square, due to cause of death 1. |
| 141–150 | Whether a piece of the player of type died in this square, due to cause of death 2. |
| 151–180 | Whether a piece of the player of type died in this square, due to causes of death 3–5 (channels 151–160, 161–170, and 171–180, respectively). |
| 181–190 | Whether a piece of the player of type died in this square, due to cause of death 6. |
| 191–250 | Same as channels 131–190, but for the opponent. |
| Channel(s) | Description |
|---|---|
| 251–261 | Whether the piece in the square belongs to the player, and has ever protected a piece of the player which, at the time of the protection, had revealed type . |
| 262 | Whether the piece in the square belongs to the player, and has ever protected an empty square. |
| 263 | Whether the piece in the square belongs to the player, and has ever protected a piece of the player which, at the time of the protection, was not revealed. |
| Channel(s) | Description |
|---|---|
| 264–274 | Whether the piece in the square belongs to the player, and has ever protected against a piece of the opponent which, at the time of the protection, had revealed type . |
| 275 | Padding channel (all zeros). |
| 276 | Whether the piece in the square belongs to the player, and has ever protected against a piece of the opponent which, at the time of the protection, was not revealed. |
| Channel(s) | Description |
|---|---|
| 277–287 | Whether the piece in the square belongs to the player, and has ever been protected by a piece of the player which, at the time of the protection, had revealed type . |
| 288 | Padding channel (all zeros). |
| 289 | Whether the piece in the square belongs to the player, and has ever been protected by a piece of the player which, at the time of the protection, was not revealed. |
| Channel(s) | Description |
|---|---|
| 290–300 | Whether the piece in the square belongs to the player, and has ever been protected against a piece of the opponent which, at the time of the protection, had revealed type . |
| 301 | Padding channel (all zeros). |
| 302 | Whether the piece in the square belongs to the player, and has ever been protected against a piece of the opponent which, at the time of the protection, was not revealed. |
| Channel(s) | Description |
|---|---|
| 303–354 | Same as channels 251–302, but for the opponent. |
| Channel(s) | Description |
|---|---|
| 355–454 | Starting location of each piece on the board, one-hot encoded. Specifically, channel encodes in position whether the piece currently occupying square started from square , according to a row-major ordering of the squares. |
| Hyperparameter | Value |
|---|---|
| Number of consecutive battleless moves after which a draw is declared | |
| Number of moves after which a draw is declared |
| Hyperparameter | Value |
|---|---|
| Number of parallel environments | per GPU |
| Generated setups per player | per GPU |
| Number of moves between training iterations |
| Symbol | Meaning |
|---|---|
| Setup for which a game was completed. | |
| A prefix of . | |
| Parameters that generated . | |
| Current parameters. | |
| Probability of given under . | |
| Predicted conditional entropy of setup prefix under . |
| Hyperparameter | Value |
|---|---|
| Adam learning rate | |
| Batch size | per GPU |
| Number of epochs per training iteration | |
| Importance ratio clipping parameter | |
| Conditional entropy prediction loss coefficient | |
| Reverse KL to data collection policy loss coefficient |
| Symbol | Meaning |
|---|---|
| A position of the acting player, represented as described in Section S2 . | |
| The sequence of positions subsequent to for the same player. | |
| The parameters that played the move at position . | |
| The current parameters. | |
| Predicted win, loss, draw probabilities at under . | |
| Predicted win, loss, draw probabilities at under . |
| Hyperparameter | Value |
|---|---|
| Importance ratio clipping parameter | |
| Advantage filtering quantile threshold | |
| Advantage filtering magnitude threshold | |
| Exponential moving average smoothing factor | |
| Advantage estimation | |
| Outcome estimation |
| Hyperparameter | Value |
|---|---|
| Adam learning rate | |
| Maximum gradient norm | |
| Batch size | game length |
| Data type | bfloat16 |
| Exponential moving average smoothing factor | |
| Number of environments |
| Hyperparameter | Value |
|---|---|
| Depth | 4 |
| Embedding dimension | 512 |
| Number of heads | 8 |
| Learned positional embedding initialization standard deviation | |
| Feedforward dimension | |
| Total parameters | million |
| Hyperparameter | Value |
|---|---|
| Depth | |
| Embedding dimension | |
| Number of heads | |
| Learned positional embedding initialization standard deviation | |
| Feedforward dimension | |
| Total parameters | million |
| Hyperparameter | Value |
|---|---|
| Encoder depth | |
| Number of decoder blocks | |
| Number of heads | |
| Embedding dimension | |
| Dropout | |
| Learned positional embedding initialization | Kaiming uniform [ 58 ] |
| Hyperparameter | Value |
|---|---|
| Reverse KL to magnet policy loss coefficient | |
| Reverse KL to policy network loss coefficient | |
| Number of rollouts | |
| Rollout depth |
| Hyperparameter | Value |
|---|---|
| Number of consecutive battleless moves after which a draw is declared | |
| Number of moves after which a draw is declared |
| Hyperparameter | Value |
|---|---|
| Number of parallel environments | per GPU |
| Generated setups per player | per GPU |
| Number of moves between training iterations |
| Hyperparameter | Value |
|---|---|
| Adam learning rate | |
| Batch size | per GPU |
| Number of epochs per training iteration | |
| Importance ratio clipping parameter | |
| Conditional entropy prediction loss coefficient | |
| Reverse KL to data collection policy loss coefficient |
| Hyperparameter | Value |
|---|---|
| Importance ratio clipping parameter | |
| Advantage filtering quantile threshold | |
| Advantage filtering magnitude threshold | |
| Exponential moving average smoothing factor | |
| Advantage estimation | |
| Outcome estimation |
| Hyperparameter | Value |
|---|---|
| Adam learning rate | |
| Maximum gradient norm | |
| Exponential moving average smoothing factor | |
| Number of environments |
| Hyperparameter | Value |
|---|---|
| Depth | |
| Embedding dimension | |
| Number of heads | |
| Learned positional embedding initialization standard deviation | |
| Feedforward dimension | |
| Total parameters | million |
| Hyperparameter | Value |
|---|---|
| Depth | |
| Embedding dimension | |
| Number of heads | |
| Learned positional embedding initialization standard deviation | |
| Feedforward dimension | |
| Total parameters | million |
| Hyperparameter | Value |
|---|---|
| Encoder depth | |
| Decoder depth | |
| Number of heads | |
| Embedding dimension | |
| Feedforward dimension | |
| Dropout |
| Hyperparameter | Value |
|---|---|
| Number of rollouts | |
| Rollout depth | |
| Update step size | |
| Magnet policy regularization (step size temperature) | |
| Minimum samples per legal action |
| Hyperparameter | Value |
|---|---|
| Importance ratio clipping parameter | |
| Exponential moving average smoothing factor | |
| Advantage estimation | |
| Discount factor | |
| Adam learning rate | |
| Entropy coefficient |
| Hyperparameter | Value |
|---|---|
| Adam learning rate | |
| Batch size | |
| Number of training steps | |
| Number of parallel environments |
| Hyperparameter | Value |
|---|---|
| Private net | -layer MLP (hidden dim , ReLU) |
| Public net | -layer MLP (hidden dim , ReLU) |
| Public LSTM | -layer LSTM (hidden dim ) |
| Policy head | Linear ( ) |
| Value head | Linear ( ) |
| Total parameters | million |
| Hyperparameter | Value |
|---|---|
| Observation encoder | -layer MLP (hidden dim , ReLU) |
| Sequence | -layer LSTM (hidden dim ) |
| Autoregressive card prediction – Embedding | Linear ( , no bias) |
| Autoregressive card prediction – LSTM | -layer LSTM (input dim , hidden dim ) |
| Autoregressive card prediction – Output | Linear ( ) |
| Total parameters | – million |
| Hyperparameter | Value |
|---|---|
| Number of rollouts | |
| Update step size | |
| Rollout temperature |
| Hyperparameter | Value |
|---|---|
| Importance ratio clipping parameter | |
| Exponential moving average smoothing factor | |
| Advantage estimation | |
| Outcome estimation | |
| Reverse KL to data collection policy loss coefficient | |
| Muon learning rate |
| Hyperparameter | Value |
|---|---|
| Muon [ 60 ] learning rate | |
| WSD scheduler stable ratio | |
| Maximum gradient norm | |
| Time steps collected per iteration |
| Hyperparameter | Value |
|---|---|
| Transformer depth | |
| Embedding dimension | |
| Number of heads | |
| Feedforward depth | |
| Feedforward dimension | |
| Total parameters | million |
| Hyperparameter | Value |
|---|---|
| Transformer depth | |
| Embedding dimension | |
| Number of heads | |
| Feedforward depth | |
| Feedforward dimension | |
| Total parameters | million |
| Hyperparameter | Value |
|---|---|
| Number of rollouts | |
| Update step size | |
| Rollout temperature |
| No. of players | No. of search players | Score | Perfect |
|---|---|---|---|
| 2 | 0 | ||
| 1 | |||
| 2 | |||
| 3 | 0 | ||
| 1 | |||
| 2 |
| Row vs Col | Ataraxos | Policy Network | PerfectDou | DouZero |
| Ataraxos | — | |||
| Policy Network | — | |||
| PerfectDou | — | |||
| DouZero | — |
| P \ L | Ataraxos | Policy Network | PerfectDou | DouZero |
| Ataraxos | ||||
| Policy Network | ||||
| PerfectDou | ||||
| DouZero |