# Gambler's Ruin problem simulation

Detailed problem statement can be found here Gambler's Ruin

General solution to the problem is;

$$1- a_1 = a_1 \sum\limits_{i = 1}^{k-1} \left(\frac{1 - p}{p}\right)^i$$

For a fair game of $$p = \frac{1}{2}$$, $$a_1 = \frac{1}{k}$$

and, for an unfair game of $$p \neq \frac{1}{2}$$

$$a_1 =\frac{\left(\frac{1-p}{p}\right)-1}{\left(\frac{1-p}{p}\right)^k-1}$$

Below is the python implementation of the simulation of a fair game of probability $$\frac{1}{2}$$, with player 1 balance of $98 & player 2 balance of$2

# -*- coding: utf-8 -*-

import numpy as np

number_of_simulations = 1000

# Create an array of wins of length equal to number_of_simulations
wins = [False] * number_of_simulations

# Fair Game
prob = 0.5
p1_balance = 98
p2_balance = 2

for i in range(number_of_simulations):
p1b = p1_balance
p2b = p2_balance

# Play until p1 or p2 is getting ruined
while p1b > 0 and p2b > 0:
p1_win = np.random.uniform(0, 1) < prob

p1b = p1b + 1 if p1_win else p1b - 1

p2b = p2b - 1 if p1_win else p2b + 1

# Set to True, if p1 still not ruined
wins[i] = p1b > 0

prob_p1_wins = sum(wins)/number_of_simulations

print(f'Player 1\'s probability of wining is: {prob_p1_wins}')

Output is;

Player 1's probability of wining is: 0.979

On repeatedly running the above simulation for the player 1 balance ranging from 1 to 99, we will see that probability increases as the initial amount increases;