Trembling Hand Perfect Equilibrium

foundations
equilibrium-refinement
trembling-hand-perfection
nash-equilibrium
Implement Selten’s trembling hand perfection refinement to eliminate unreasonable Nash equilibria by requiring robustness to small probability mistakes, with applications to coordination games and weakly dominated strategies.
Author

Raban Heller

Published

May 8, 2026

Modified

May 8, 2026

Keywords

trembling hand perfection, Selten, equilibrium refinement, perturbed game, weakly dominated strategies, coordination game, R

Introduction & motivation

Nash equilibrium is the cornerstone solution concept of non-cooperative game theory. A strategy profile is a Nash equilibrium if no player can improve their payoff by unilaterally changing their strategy. However, the Nash equilibrium concept is often criticized for being too permissive: in many games, there are multiple Nash equilibria, and some of them rely on strategies that seem unreasonable or implausible when examined carefully. The challenge of selecting among multiple equilibria and eliminating the “unreasonable” ones has driven the development of equilibrium refinement theory, one of the most important research programmes in game theory since the 1970s.

Reinhard Selten, who shared the 1994 Nobel Memorial Prize in Economics with John Nash and John Harsanyi, introduced the concept of trembling hand perfect equilibrium in his seminal 1975 paper. The basic intuition is disarmingly simple: what if players occasionally make mistakes? In a real strategic interaction, no player can be absolutely certain that their opponents will play exactly according to the equilibrium prescription. A hand might tremble – a player might accidentally choose the “wrong” action with some small probability. A robust equilibrium should remain an equilibrium even when we account for the possibility of such trembles. If an equilibrium is destroyed by arbitrarily small perturbations of strategies, it is fragile in a fundamental way and arguably should not be considered a credible prediction of play.

Formally, Selten’s approach works as follows. Consider a finite normal-form game. For any \(\epsilon > 0\), define a “perturbed game” in which every player must assign at least probability \(\epsilon\) to every available action. This ensures that every action profile has positive probability of occurring, no matter what strategies the players intend to use. A Nash equilibrium of the perturbed game is called an \(\epsilon\)-perfect equilibrium. A strategy profile \(\sigma\) in the original game is a trembling hand perfect equilibrium if there exists a sequence of \(\epsilon_k\)-perfect equilibria (with \(\epsilon_k \to 0\)) that converges to \(\sigma\).

This definition has powerful implications. Most importantly, trembling hand perfect equilibria cannot use weakly dominated strategies. A weakly dominated strategy is one that performs no better than an alternative against every opponent strategy and strictly worse against at least one. In a standard Nash equilibrium, a player might rationally play a weakly dominated strategy if their opponent is playing in a way that makes them indifferent. But with trembles, the opponent plays every action with at least probability \(\epsilon > 0\), which means the weakly dominated strategy performs strictly worse in expectation than the dominating strategy. As \(\epsilon \to 0\), the player must continue to avoid the dominated strategy, and so the limiting equilibrium excludes it.

Consider the classic example of the Battle of the Sexes game with an additional “outside option” for one player. This game has Nash equilibria where a player chooses a weakly dominated action, sustained by the belief that the opponent will play a specific strategy. Trembling hand perfection eliminates these equilibria because the tremble forces the player to face the possibility that the opponent deviates, and under that possibility, the dominated action is strictly suboptimal.

The concept also distinguishes between “normal form perfection” and “extensive form perfection.” Normal form trembling hand perfection, which we focus on here, requires the equilibrium to be robust to trembles in the normal (strategic) form of the game. Extensive form perfection (also due to Selten, 1975) requires robustness to trembles at every information set in the game tree. Extensive form perfection is a stronger requirement and is closely related to sequential equilibrium, another important refinement concept introduced by Kreps and Wilson in 1982.

In this tutorial, we implement the perturbation approach computationally. For a given game and a sequence of decreasing \(\epsilon\) values, we compute the Nash equilibrium of each perturbed game by iterating best responses within the constrained strategy space. We then track how the equilibrium strategies change as \(\epsilon \to 0\), identifying which Nash equilibria of the original game survive as trembling hand perfect and which are eliminated. We apply this to a coordination game and to a game with a weakly dominated strategy, demonstrating the refinement in action.

Mathematical formulation

Let \(\Gamma = (N, (S_i)_{i \in N}, (u_i)_{i \in N})\) be a finite \(n\)-player normal-form game where player \(i\) has strategy set \(S_i = \{s_i^1, \ldots, s_i^{m_i}\}\) and payoff function \(u_i: \times_{i \in N} S_i \to \mathbb{R}\).

A mixed strategy for player \(i\) is \(\sigma_i \in \Delta(S_i)\), the probability simplex over \(S_i\).

For \(\epsilon > 0\), the \(\epsilon\)-perturbed game restricts each player’s strategy set to:

\[ \Delta^\epsilon(S_i) = \left\{ \sigma_i \in \Delta(S_i) : \sigma_i(s_i^k) \geq \epsilon \quad \forall k = 1, \ldots, m_i \right\} \]

A strategy profile \(\sigma^\epsilon = (\sigma_1^\epsilon, \ldots, \sigma_n^\epsilon)\) is an \(\epsilon\)-perfect equilibrium if it is a Nash equilibrium of the perturbed game, meaning for each player \(i\):

\[ u_i(\sigma_i^\epsilon, \sigma_{-i}^\epsilon) \geq u_i(\sigma_i', \sigma_{-i}^\epsilon) \quad \forall \sigma_i' \in \Delta^\epsilon(S_i) \]

A strategy profile \(\sigma^*\) is a trembling hand perfect equilibrium (THPE) if there exists a sequence \((\epsilon_k)_{k=1}^\infty\) with \(\epsilon_k \to 0\) and corresponding \(\epsilon_k\)-perfect equilibria \(\sigma^{\epsilon_k}\) such that:

\[ \sigma^{\epsilon_k} \xrightarrow{k \to \infty} \sigma^* \]

Key theorem (Selten 1975). Every finite game has at least one trembling hand perfect equilibrium. Moreover, if \(\sigma^*\) is a THPE, then no player uses a weakly dominated strategy with positive probability in \(\sigma^*\).

R implementation

We implement the perturbation approach for two games: (1) a 3x3 game with a weakly dominated strategy that has a non-perfect Nash equilibrium, and (2) a coordination game. For each epsilon in a decreasing sequence, we compute the NE of the perturbed game using iterated best response within the constrained simplex.

set.seed(2024)

# === Game 1: 3x3 game with weakly dominated strategy ===
# Row player payoffs
U1 <- matrix(c(
  2, 1, 0,
  1, 2, 0,
  0, 0, 0
), nrow = 3, byrow = TRUE)

# Column player payoffs
U2 <- matrix(c(
  1, 0, 0,
  0, 1, 0,
  0, 0, 0
), nrow = 3, byrow = TRUE)

cat("=== Game 1: Weakly Dominated Strategy ===\n")
=== Game 1: Weakly Dominated Strategy ===
cat("Row player payoffs:\n"); print(U1)
Row player payoffs:
     [,1] [,2] [,3]
[1,]    2    1    0
[2,]    1    2    0
[3,]    0    0    0
cat("Column player payoffs:\n"); print(U2)
Column player payoffs:
     [,1] [,2] [,3]
[1,]    1    0    0
[2,]    0    1    0
[3,]    0    0    0
cat("\nNote: Strategy 3 for both players is weakly dominated.\n")

Note: Strategy 3 for both players is weakly dominated.
cat("Nash equilibria include (s3, s3) with payoff (0,0),\n")
Nash equilibria include (s3, s3) with payoff (0,0),
cat("but this requires both players to play a weakly dominated strategy.\n\n")
but this requires both players to play a weakly dominated strategy.
# --- Best response in perturbed game ---
best_response_perturbed <- function(opp_strategy, payoff_matrix, epsilon) {
  n_actions <- nrow(payoff_matrix)
  expected_payoffs <- payoff_matrix %*% opp_strategy

  # In the perturbed game, allocate (1 - n_actions * epsilon) to best responses
  free_mass <- 1 - n_actions * epsilon
  if (free_mass < 0) free_mass <- 0

  # Put all free mass on the best response(s)
  br <- rep(epsilon, n_actions)
  best_actions <- which(expected_payoffs == max(expected_payoffs))
  br[best_actions] <- br[best_actions] + free_mass / length(best_actions)

  return(br)
}

# --- Compute epsilon-perfect equilibrium via iterated best response ---
compute_eps_perfect <- function(U1, U2, epsilon, max_iter = 500, tol = 1e-10) {
  n1 <- nrow(U1); n2 <- ncol(U1)

  # Start from uniform
  sigma1 <- rep(1/n1, n1)
  sigma2 <- rep(1/n2, n2)

  for (iter in 1:max_iter) {
    sigma1_new <- best_response_perturbed(sigma2, U1, epsilon)
    sigma2_new <- best_response_perturbed(sigma1, t(U2), epsilon)

    # Damped update for convergence
    alpha <- 0.3
    sigma1_next <- alpha * sigma1_new + (1 - alpha) * sigma1
    sigma2_next <- alpha * sigma2_new + (1 - alpha) * sigma2

    if (max(abs(sigma1_next - sigma1)) < tol &&
        max(abs(sigma2_next - sigma2)) < tol) {
      sigma1 <- sigma1_next
      sigma2 <- sigma2_next
      break
    }
    sigma1 <- sigma1_next
    sigma2 <- sigma2_next
  }

  return(list(sigma1 = sigma1, sigma2 = sigma2))
}

# --- Trace the path as epsilon -> 0 ---
epsilons <- c(0.2, 0.15, 0.1, 0.07, 0.05, 0.03, 0.02, 0.01,
              0.005, 0.002, 0.001, 0.0005, 0.0001, 0.00001)

path_df <- data.frame()
for (eps in epsilons) {
  eq <- compute_eps_perfect(U1, U2, eps)
  path_df <- rbind(path_df,
    data.frame(epsilon = eps,
               player = rep(c("Row Player", "Col Player"), each = 3),
               strategy = rep(paste0("s", 1:3), 2),
               probability = c(eq$sigma1, eq$sigma2)))
}

cat("=== Epsilon-Perfect Equilibria Path (Game 1) ===\n")
=== Epsilon-Perfect Equilibria Path (Game 1) ===
path_wide <- path_df |>
  filter(player == "Row Player") |>
  pivot_wider(names_from = strategy, values_from = probability) |>
  select(-player)
cat("Row player strategies as epsilon -> 0:\n")
Row player strategies as epsilon -> 0:
print(round(path_wide, 6))
# A tibble: 14 × 4
   epsilon    s1    s2      s3
     <dbl> <dbl> <dbl>   <dbl>
 1 0.2     0.4   0.4   0.2    
 2 0.15    0.425 0.425 0.15   
 3 0.1     0.45  0.45  0.1    
 4 0.07    0.465 0.465 0.07   
 5 0.05    0.475 0.475 0.05   
 6 0.03    0.485 0.485 0.03   
 7 0.02    0.49  0.49  0.02   
 8 0.01    0.495 0.495 0.01   
 9 0.005   0.498 0.498 0.005  
10 0.002   0.499 0.499 0.002  
11 0.001   0.500 0.500 0.001  
12 0.0005  0.500 0.500 0.0005 
13 0.0001  0.500 0.500 0.0001 
14 0.00001 0.500 0.500 0.00001
# Final THP equilibrium (smallest epsilon)
final_eq <- compute_eps_perfect(U1, U2, min(epsilons))
cat("\n=== Trembling Hand Perfect Equilibrium (Game 1) ===\n")

=== Trembling Hand Perfect Equilibrium (Game 1) ===
cat(sprintf("Row player: (%.6f, %.6f, %.6f)\n",
            final_eq$sigma1[1], final_eq$sigma1[2], final_eq$sigma1[3]))
Row player: (0.499995, 0.499995, 0.000010)
cat(sprintf("Col player: (%.6f, %.6f, %.6f)\n",
            final_eq$sigma2[1], final_eq$sigma2[2], final_eq$sigma2[3]))
Col player: (0.499995, 0.499995, 0.000010)
cat("Strategy 3 (weakly dominated) gets only epsilon probability.\n")
Strategy 3 (weakly dominated) gets only epsilon probability.
# === Game 2: Coordination game ===
U1_coord <- matrix(c(3, 0, 0, 2), nrow = 2, byrow = TRUE)
U2_coord <- matrix(c(3, 0, 0, 2), nrow = 2, byrow = TRUE)

cat("\n=== Game 2: Coordination Game ===\n")

=== Game 2: Coordination Game ===
cat("Payoff matrix (symmetric):\n")
Payoff matrix (symmetric):
cat("        L     R\n")
        L     R
cat(sprintf("  T   (%d,%d) (%d,%d)\n", U1_coord[1,1], U2_coord[1,1],
            U1_coord[1,2], U2_coord[1,2]))
  T   (3,3) (0,0)
cat(sprintf("  B   (%d,%d) (%d,%d)\n", U1_coord[2,1], U2_coord[2,1],
            U1_coord[2,2], U2_coord[2,2]))
  B   (0,0) (2,2)
cat("Pure NE: (T,L) with payoff 3 and (B,R) with payoff 2.\n")
Pure NE: (T,L) with payoff 3 and (B,R) with payoff 2.
cat("Both are trembling hand perfect (no weakly dominated strategies).\n\n")
Both are trembling hand perfect (no weakly dominated strategies).
path_coord <- data.frame()
for (eps in epsilons) {
  eq <- compute_eps_perfect(U1_coord, U2_coord, eps)
  path_coord <- rbind(path_coord,
    data.frame(epsilon = eps,
               player = rep(c("Row", "Col"), each = 2),
               strategy = rep(c("T/L", "B/R"), 2),
               probability = c(eq$sigma1, eq$sigma2)))
}

cat("=== Both Pure NE Survive as THPE ===\n")
=== Both Pure NE Survive as THPE ===
eq_TL <- compute_eps_perfect(U1_coord, U2_coord, 1e-5)
cat(sprintf("Near (T,L): Row = (%.6f, %.6f), Col = (%.6f, %.6f)\n",
            eq_TL$sigma1[1], eq_TL$sigma1[2], eq_TL$sigma2[1], eq_TL$sigma2[2]))
Near (T,L): Row = (0.999990, 0.000010), Col = (0.999990, 0.000010)

Static publication-ready figure

The static figure shows how strategy probabilities evolve as the tremble parameter epsilon decreases toward zero, revealing which equilibria survive as trembling hand perfect.

p_thp <- ggplot(path_df |> filter(player == "Row Player"),
                 aes(x = epsilon, y = probability, color = strategy)) +
  geom_line(linewidth = 1) +
  geom_point(size = 2) +
  scale_x_log10(labels = scales::label_number()) +
  scale_color_manual(values = okabe_ito[1:3],
                      labels = c("s1 (undominated)", "s2 (undominated)",
                                 "s3 (weakly dominated)")) +
  labs(title = "Trembling Hand Perfection: Strategy Probabilities as Epsilon -> 0",
       subtitle = "Game with weakly dominated strategy s3; Row player's mixed strategy",
       x = expression(paste("Tremble parameter ", epsilon, " (log scale)")),
       y = "Probability",
       color = "Strategy") +
  theme_publication() +
  theme(legend.position = "right")

p_thp
Figure 1: Figure 1. Strategy probabilities in epsilon-perfect equilibria as epsilon approaches zero (Game 1). The weakly dominated strategy s3 receives only the minimum required probability epsilon, confirming that the Nash equilibrium (s3, s3) is eliminated by trembling hand perfection. The surviving equilibrium concentrates probability on the undominated strategies s1 and s2. Data: computed (CC BY-SA 4.0).

Interactive figure

The interactive version allows precise inspection of probability values at each epsilon level, making it easy to verify that the weakly dominated strategy converges to zero probability.

path_df$text <- paste0("Epsilon: ", signif(path_df$epsilon, 4),
                        "\nStrategy: ", path_df$strategy,
                        "\nProbability: ", round(path_df$probability, 6),
                        "\nPlayer: ", path_df$player)

p_thp_int <- ggplot(path_df |> filter(player == "Row Player"),
                     aes(x = epsilon, y = probability, color = strategy, text = text)) +
  geom_line(linewidth = 0.8) +
  geom_point(size = 2) +
  scale_x_log10(labels = scales::label_number()) +
  scale_color_manual(values = okabe_ito[1:3]) +
  labs(title = "THPE Path: Row Player",
       x = "Epsilon (log scale)", y = "Probability",
       color = "Strategy") +
  theme_publication()

ggplotly(p_thp_int, tooltip = "text") |>
  config(displaylogo = FALSE)
Figure 2

Interpretation

The computational results vividly demonstrate how trembling hand perfection operates as an equilibrium refinement. In Game 1, which features a weakly dominated strategy s3 for both players, the standard Nash equilibrium concept admits the strategy profile (s3, s3) as an equilibrium with payoff (0, 0). This is a Nash equilibrium because neither player can improve by deviating: if the column player plays s3, the row player gets 0 regardless of their own strategy, so s3 is a (weak) best response. However, this equilibrium is fragile in a fundamental way.

When we introduce even a tiny tremble parameter epsilon, forcing each player to place at least epsilon probability on every action, the equilibrium structure changes dramatically. With trembles, the column player places at least epsilon probability on s1 and s2, which means the row player now faces a positive probability of the column playing a non-s3 strategy. Against a mixture of s1 and s2 (even with very small probabilities), strategies s1 and s2 yield strictly positive expected payoffs for the row player, while s3 always yields 0. Therefore, in the perturbed game, s3 is strictly dominated and receives only the minimum required probability epsilon. The same logic applies to the column player.

As we trace the path of epsilon-perfect equilibria from large epsilon toward zero, we see the probability on s3 declining steadily. It never rises above epsilon; in fact, it is exactly at its lower bound at every step. The probabilities on s1 and s2, meanwhile, converge to a well-defined limit that constitutes the trembling hand perfect equilibrium. This limit places all meaningful probability on the undominated strategies and assigns zero probability to the weakly dominated s3. The Nash equilibrium (s3, s3) is thus eliminated: no sequence of epsilon-perfect equilibria converges to it, because for any epsilon > 0, s3 is never a best response in the perturbed game.

The coordination game (Game 2) provides an instructive contrast. Here, neither player has a weakly dominated strategy. Both pure-strategy Nash equilibria – (T, L) with payoff 3 and (B, R) with payoff 2 – survive as trembling hand perfect equilibria. This is because each pure strategy is a strict best response in the neighbourhood of the corresponding equilibrium. If the column player plays L with probability close to 1 (placing only epsilon on R), the row player strictly prefers T. Similarly, if the column player plays R with probability close to 1, the row player strictly prefers B. The perturbation does not destabilize either equilibrium because the trembles are small enough that the best response remains unchanged.

This illustrates an important point: trembling hand perfection is a refinement, not a selection criterion. It eliminates equilibria that are unreasonable (those relying on weakly dominated strategies or implausible beliefs), but it does not select a unique equilibrium when multiple reasonable equilibria exist. In the coordination game, both (T, L) and (B, R) are perfectly reasonable, and trembling hand perfection correctly preserves both. To select among perfect equilibria, one needs additional criteria such as Pareto dominance, risk dominance (Harsanyi and Selten, 1988), or evolutionary stability.

The computational approach we have implemented – tracing epsilon-perfect equilibria as epsilon varies – also reveals how the equilibrium correspondence behaves near its limits. For games where the set of trembling hand perfect equilibria is a strict subset of Nash equilibria, there is typically a “phase transition” at some critical epsilon below which certain equilibria disappear. Above this threshold, the perturbed game may support equilibria near the non-perfect Nash equilibria of the original game; below it, only the perfect equilibria survive. Our logarithmic spacing of epsilon values is designed to capture this transition region.

A practical limitation of the normal-form trembling hand perfection concept is that it does not account for the sequential structure of extensive-form games. In games with sequential moves, the extensive form provides additional information about which actions are taken at which information sets, and the appropriate refinement is extensive-form perfection, which requires optimality at every information set given the possibility of trembles. Extensive-form perfection is strictly stronger than normal-form perfection and is closely related to sequential equilibrium. However, for simultaneous-move games (the setting of this tutorial), normal-form and extensive-form perfection coincide.

References

Back to top

Reuse

Citation

BibTeX citation:
@online{heller2026,
  author = {Heller, Raban},
  title = {Trembling {Hand} {Perfect} {Equilibrium}},
  date = {2026-05-08},
  url = {https://r-heller.github.io/equilibria/tutorials/foundations/trembling-hand-refinement/},
  langid = {en}
}
For attribution, please cite this work as:
Heller, Raban. 2026. “Trembling Hand Perfect Equilibrium.” May 8. https://r-heller.github.io/equilibria/tutorials/foundations/trembling-hand-refinement/.