文末获取历年美赛数学建模论文,交流思路模型
接下来讲解马尔可夫链在2024年C题中的运用
1. 马尔科夫链的基本原理
马尔科夫链是描述随机过程的一种数学模型,其核心特征是无记忆性。
简单来说,系统在某一时刻的状态只取决于当前状态,而与之前的状态无关。
3. 为什么选择马尔科夫链分析网球比赛?
网球比赛中,每次得分可以视为一个随机事件,其得分结果由当前比赛状态决定:
- 无记忆性:下一分的得分结果不依赖于之前的比分序列。
- 有限状态:比赛的得分范围有限(如 (0,0)(0,0)(0,0) 到 (4,4)(4,4)(4,4))。
- 动态变化:每次得分改变比分状态,符合状态转移的特征。
因此,马尔科夫链是分析比赛动量效应及胜率分布的理想工具。
import numpy as np
# 定义基本参数
max_points = 4 # 一局比赛获胜需要的分数
p_A = 0.6 # 球员A基本得分概率
p_B = 0.4 # 球员B基本得分概率
momentum_factor = 0.1 # 动量因子
# 状态总数:得分从 (0, 0) 到 (max_points, max_points)
num_states = (max_points + 1) * (max_points + 1)
# 初始化转移矩阵
P = np.zeros((num_states, num_states))
# 定义状态索引函数
def state_index(a, b):
return a * (max_points + 1) + b
# 构建转移矩阵
for a in range(max_points + 1):
for b in range(max_points + 1):
current_state = state_index(a, b)
# 检查吸收状态
if a == max_points or b == max_points:
P[current_state, current_state] = 1
continue
# 正常转移状态
# 动量调整得分概率
prob_A = p_A + (momentum_factor if a > b else 0)
prob_B = p_B + (momentum_factor if b > a else 0)
prob_A, prob_B = prob_A / (prob_A + prob_B), prob_B / (prob_A + prob_B)
# A得分
next_state_A = state_index(a + 1, b)
P[current_state, next_state_A] = prob_A
# B得分
next_state_B = state_index(a, b + 1)
P[current_state, next_state_B] = prob_B
# 初始状态分布
initial_state = np.zeros(num_states)
initial_state[state_index(0, 0)] = 1
# 模拟比赛
steps = 50
state_distribution = initial_state
for _ in range(steps):
state_distribution = np.dot(state_distribution, P)
# 提取最终吸收状态的概率
absorption_probabilities = state_distribution.reshape((max_points + 1, max_points + 1))
print("吸收状态概率分布:")
print(absorption_probabilities)