I have a few questions related to the same topic:
Imagine you have a game (e.g. chess), where every time you win you gain some skill rating (SR), and every time you lose, you lose SR. If, however, you go on a winning streak (defined as winninng 2 or more games in a row) the SR you gain from each win increases as a function of how many you've won consecutively up until that point.
Having read multiple forums online, there appears to be 2 common strategies to keep your SR relatively stable and to prevent massive losses of SR during any one gaming session. The two strategies are:
- Stop your gaming session as soon as you lose 1 game
- Stop your gaming session as soon as you lose 2 games in a row
My first question is: is it possible to determine which is the better strategy without simulation?
I have tried setting up a basic simulation of this scenario in Python to answer the question empirically. It looks something like this:
num_sessions = 1000000
sr_per_win = 23
sr_per_loss = 23
sr_streak_multiplier = 3
# Stopping after 1 loss
sr_diff_1_loss = []
for i in range(num_sessions):
cur_sr = 0
win_streak = 0
while True:
game_result = random.randint(0, 1) # Randomly decide game outcome
if game_result: # Win
cur_sr += (sr_per_win + win_streak * sr_streak_multiplier)
win_streak += 1
else: # Lose
cur_sr -= sr_per_loss
break
sr_diff_1_loss.append(cur_sr)
sr_avg_1_loss = sum(sr_diff_1_loss) / len(sr_diff_1_loss)
# Stopping after 2 losses in a row
sr_diff_2_loss = []
for i in range(num_sessions):
cur_sr = 0
win_streak = 0
lose_streak = 0
while True:
game_result = random.randint(0, 1) # Randomly decide game outcome
if game_result: # Win
cur_sr += (sr_per_win + win_streak * sr_streak_multiplier)
win_streak += 1
lose_streak = 0
else: # Lose
cur_sr -= sr_per_loss
win_streak = 0
lose_streak += 1
if lose_streak == 2:
break
sr_diff_2_loss.append(cur_sr)
sr_avg_2_loss = sum(sr_diff_2_loss) / len(sr_diff_2_loss)
There are 2 for
loops, one for each strategy. Each time you win, you gain 23 SR, each time you lose you lose 23 SR. If you go on a win streak, you gain additional SR (on top of the base 23) which is calculated as 3*number of wins in a row. The game outcome is randomly determined.
I get some strange values when I look at the average SR change due to each strategy. For strategy 1, the average SR change is always equal to the multiplier (3). For strategy 2, average SR change is always equal to 3*multiplier (9). This is true regardless of the multiplier value.
So my second question: is there a reason why the average SR change is always a multiple of the win streak multiplier value? Or is there an error in my code?