对策论——矩阵对策要素、结构和模型精解
矩阵对策是一种研究两方对抗问题的数学工具,属于博弈论的分支。博弈论(Game Theory)是一门分析冲突和决策行为的学科,最早由美国数学家约翰·冯·诺依曼(John von Neumann)与经济学家奥斯卡·摩根斯特恩(Oskar Morgenstern)在20世纪40年代发展而成。他们在1944年合著的《博弈论与经济行为》(Theory of Games and Economic Behavior)一书中系统地构建了博弈论的基础框架。博弈论在经济学、政治学、军事战略等领域有着广泛的应用,而矩阵对策是其中一个非常经典且基础的类型,主要研究二人零和博弈中的决策过程。
通用矩阵 | 矩阵对策 |
---|---|
一、引入案例
二人零和博弈是博弈论中最基本、也是最经典的类型之一,它描述了两个参与者在相互竞争中的博弈情形,双方的利益完全对立,一个人赢得多少,另一个人就会失去多少,换句话说,双方的收益总和始终为零。因此,这类博弈被称为“零和博弈”。
一个典型的二人零和博弈的例子是“石头、剪刀、布”游戏。两位参与者同时选择“石头、剪刀”或“布”中的一种,每种选择都有特定的赢或输的规则:石头赢剪刀(石头击碎剪刀);剪刀赢布(剪刀剪断布);布赢石头(布包住石头);如果双方选择相同,则平局。在这个游戏中,两个参与者的目标是尽可能选择让自己获胜的策略。由于这个游戏是零和博弈,一个参与者获胜时,另一个参与者一定输掉相同的分数(即使平局,双方收益也是零)。游戏的收益: 为了分析该博弈,可以构造一个收益矩阵,其中一个玩家的收益是另一个玩家损失的相同数额。假设A和B是两位玩家,A的收益矩阵如下表所示:
B选择石头 | B选择剪刀 | B选择布 | |
---|---|---|---|
A选择石头 | 0 | 1 | -1 |
A选择剪刀 | -1 | 0 | 1 |
A选择布 | 1 | -1 | 0 |
在这个矩阵中,横行表示A的选择,纵列表示B的选择,矩阵中的数字表示A的收益。例如,当A选择“石头”而B选择“剪刀”时,A会赢得1分,而B输掉1分。相应地,当A选择“石头”而B选择“布”时,A会失去1分,而B赢得1分。如果双方选择相同的动作,收益为0,表示平局。
二、矩阵对策概述
矩阵对策作为一种高效的决策分析工具,能够帮助参与者更理性地面对对手的行为,并在各类竞争或对抗环境中,运用数学模型找到最优解决方案。
2.1 矩阵对策的三要素
矩阵对策的基本结构由三大要素构成:局中人、策略集和赢得函数。
- 局中人
局中人是博弈的参与者。在矩阵对策中,通常假设只有两个局中人,他们分别代表博弈的两个对抗方。局中人可以是个人、公司、国家、团队等,具体取决于问题的背景。博弈论中的局中人有时被称为“玩家”或“对手”,每个局中人都有自己明确的目标——即通过选择适当的策略,获得尽可能多的收益。
在矩阵对策中,局中人的数量限制为两人,这使得问题较为简单,符合零和博弈的框架。零和博弈意味着一方的收益就是另一方的损失,因此两方的目标彼此对立。 - 策略集
策略集是指局中人可以选择的策略的集合。在矩阵对策中,每个局中人都有一组可行的策略,且这些策略都是有限的。例如,在市场竞争中,一个公司可以选择不同的价格策略,而在军事对抗中,一方可能会选择不同的进攻或防守方式。
我们可以用一个矩阵来描述两方的策略选择与相应的收益关系。假设有两个局中人,分别为A和B。A的策略集记作$S_A = {A_1, A_2, \dots, A_m} $ ,B的策略集记作\(S_B = \{B_1, B_2, \dots, B_n\}\),其中,\(A_i\)表示局中人A的第\(i\)个策略,\(B_j\) 表示局中人B的第j个策略。对于A和B的每一组策略组合,矩阵中的元素将记录其相应的收益。 - 赢得函数
赢得函数(Payoff Function)描述了局中人根据自己和对手所选策略所获得的收益。对于矩阵对策中的两方来说,赢得函数通常以一个赢得矩阵(Payoff Matrix)的形式呈现。假设局中人A有\(m\)个策略,局中人B有\(n\)个策略,赢得矩阵将是一个m×n的矩阵。矩阵中的元素\(a_{ij}\)表示当A选择策略\(A_i\)而B选择策略\(B_j\)时A的收益。由于是零和博弈,B的收益等于\(-a_{ij}\),即一方的收益就是另一方的损失。赢得矩阵可以表示如下:
其中,矩阵元素\(a_{ij}\)表示局中人A选择策略\(A_i\) ,局中人B选择策略\(B_j\)时,A所获得的收益,B则损失相同的数额。
例1:在“石头、剪刀、布”这个二人零和博弈中,可以通过博弈论中的三个基本要素来详细描述矩阵对策:局中人、策略集、赢得矩阵。
- 局中人(Players)
局中人指参与博弈的双方。在这个例子中,有两个局中人,分别称为 A玩家 和 B玩家。这两位玩家在游戏中彼此对抗,他们的目标是通过选择合适的策略来赢得比赛。- A玩家:第一位参与者,负责选择石头、剪刀或布。
- B玩家:第二位参与者,负责同样的选择,即石头、剪刀或布。
这两位玩家的目标是相互制衡。由于这是一个零和博弈,一个人的胜利意味着另一个人的失败,双方的收益总和为零。因此,A和B是竞争关系。
- 策略集(Strategy Sets)
策略集是指局中人可以选择的行动或决策集合。在“石头、剪刀、布”游戏中,两个玩家的策略集完全相同,各自可以从以下三种动作中选择:- 石头 (Rock)
- 剪刀 (Scissors)
- 布 (Paper)
因此,A玩家和B玩家的策略集可以表示为:\(\text{策略集} = \{\text{石头 (R)}, \text{剪刀 (S)}, \text{布 (P)}\}\)
两位玩家在每一轮博弈中必须从这三个策略中选择一个。两位玩家的策略组合(即A玩家和B玩家分别选择的策略)会决定他们各自的收益或损失。
- 赢得矩阵(Payoff Matrix)
赢得矩阵是博弈的核心部分,它描述了不同策略组合下,局中人获得的收益或损失。在零和博弈中,一方的收益就是另一方的损失,因此A玩家的赢得矩阵可以直接表示B玩家的损失。
对于“石头、剪刀、布”游戏,赢得矩阵描述了A玩家在面对B玩家不同策略时的收益情况。假设A玩家选择横向的动作,B玩家选择纵向的动作。A玩家的赢得矩阵可以用如下方式表示:
A选择\ B选择 | 石头 (R) | 剪刀 (S) | 布 (P) |
---|---|---|---|
石头 (R) | 0 | 1 | -1 |
剪刀 (S) | -1 | 0 | 1 |
布 (P) | 1 | -1 | 0 |
每个位置的值表示A玩家的收益,如果是正值则意味着A获胜,负值则表示A输了。B玩家的赢得矩阵则是A的赢得矩阵取相反数,因为这是一个零和博弈,A的收益就是B的损失。
2.2 矩阵对策的数学模型
两人有限零和对策,又称为矩阵对策。其数学模型为:$$I = (I, II; S_1, S_2, A)\quad 或 I = [S_1, S_2; A] $$,其中策略集$$ S_1 = {\alpha_1, \alpha_2, \ldots, \alpha_m},S_2 = {\beta_1, \beta_2, \ldots, \beta_n}$$分别为局中人I和局中人II的策略集。由于假定对策的结果为零和,所以局中人II的赢得矩阵为-A,将上面要素集成就得到下面的矩阵对策模型结构,参看上面例1。
I策略\II策略 | $$\beta_1$$ | $$\beta_2$$ | ... | $$\beta_n$$ |
---|---|---|---|---|
\(\alpha_1\) | \(a_{11}\) | \(a_{12}\) | ... | \(a_{1n}\) |
\(\alpha_2\) | \(a_{21}\) | \(a_{22}\) | ... | \(a_{2n}\) |
... | ... | ... | ... | ... |
\(\alpha_n\) | \(a_{m1}\) | \(a_{m2}\) | ... | \(a_{mn}\) |
例2:田忌赛马:故事源自古代中国,讲述了齐国的国君齐王与田忌之间的一场赛马比赛。田忌是齐王的臣子,也是一位赛马爱好者。在一次赛马比赛中,田忌的马匹在速度上不如齐王的马匹。然而,田忌并没有直接放弃比赛,而是采取了一种巧妙的策略。田忌的策略是利用自己马匹的相对优势。他将自己的马分为上、中、下三等,然后与齐王的马进行比赛。在第一场比赛中,他用自己的下等马对抗齐王的上等马,结果自然是输了。但在第二场比赛中,他用自己的上等马对抗齐王的中等马,轻松获胜。最后一场比赛,他用中等马对抗齐王的下等马,再次获胜。通过这种策略,田忌最终以两胜一负的成绩赢得了比赛。这个故事体现了智慧和策略的重要性,即使在资源不如对手的情况下,通过巧妙的安排和策略,也有可能取得胜利。
田忌赛马的矩阵对策模型
在田忌赛马的例子中,可以用矩阵对策中的三要素来构建数学模型,即局中人、策略集和赢得矩阵。下面将详细描述这些三要素并解释整个建模过程。
- 局中人(Players)
田忌赛马问题中的局中人是 齐王 和 对手,他们分别为博弈的参与者。齐王和对手各自都有三匹马,按不同的速度分为上、中、下三等。在比赛中,双方的目标都是让自己的马赢得尽可能多的胜利。- 局中人1(S1):齐王
- 局中人2(S2):对手
在博弈中,双方的目标是通过合理选择比赛顺序,使自己获胜的机会最大化,同时使对方的收益最小化。
-
策略集(Strategy Sets)
策略集是指局中人可选择的策略或行动方案。齐王和对手的策略集是他们如何选择将三匹马(上等马、中等马和下等马)排列出赛跑顺序。
假设两位局中人都可以选择将三匹马按照六种不同的顺序进行比赛,每一个排列组合都可以作为一个策略。两人的策略集可以表示为:- 齐王的策略集 S1(α集合): S1 = {α1, α2, α3, α4, α5, α6} 每个 αi 代表一种赛马的排列组合。
- 对手的策略集 S2(β集合): S2 = {β1, β2, β3, β4, β5, β6} 每个 βi 也代表一种赛马的排列组合。
对于齐王和对手,赛马顺序可以有以下六种组合: - 上、中、下 (U, M, L)
- 上、下、中 (U, L, M)
- 中、上、下 (M, U, L)
- 中、下、上 (M, L, U)
- 下、上、中 (L, U, M)
- 下、中、上 (L, M, U)
-
赢得矩阵(Payoff Matrix)
赢得矩阵是对策中双方收益的量化表示。它表明当双方选定某种策略组合后,齐王和对手的得分或胜负情况。齐王赛马问题的赢得矩阵 A 已经给出,参看下表:
β1 (U, M, L) | β2 (U, L, M) | β3 (M, U, L) | β4 (M, L, U) | β5 (L, U, M) | β6 (L, M, U) | |
---|---|---|---|---|---|---|
α1 (U, M, L) | 3 | 1 | 1 | 1 | -1 | 1 |
α2 (U, L, M) | 1 | 3 | 1 | 1 | 1 | -1 |
α3 (M, U, L) | 1 | 1 | 3 | 1 | 1 | 1 |
α4 (M, L, U) | -1 | 1 | 1 | 3 | 1 | 1 |
α5 (L, U, M) | 1 | 1 | 1 | -1 | 3 | 1 |
α6 (L, M, U) | 1 | 1 | -1 | 1 | 1 | 3 |
矩阵的行表示齐王的策略,列表示对手的策略。矩阵中的元素表示在对应的策略组合下,齐王的收益。例如:
-
如果齐王选择策略 α1 (上、中、下)而对手选择策略 β1 (上、中、下),则齐王的收益为3。
-
如果齐王选择策略 α1 而对手选择策略 β5 (下、上、中),则齐王的收益为-1。
-
数学模型的建立
齐王赛马问题可以表示为一个零和博弈。两名局中人在六种策略中选择一个进行对抗,构成了一个 6×6 的赢得矩阵。齐王的目标是通过选择最优的赛马顺序来使自己的总收益最大化,而对手的目标则是最小化齐王的收益。定义矩阵对策为 Γ = {S1, S2; A},其中:- S1 = {α1, α2, α3, α4, α5, α6} 是齐王的策略集。
- S2 = {β1, β2, β3, β4, β5, β6} 是对手的策略集。
- A 是齐王的赢得矩阵(如上所示)。
博弈双方会选择自己的策略来最大化(齐王)或最小化(对手)自己的收益。在零和博弈中,赢得矩阵A中的每个元素表示齐王的收益,对手的损失就是齐王的收益的相反数,因此只需要求出齐王的最优策略就可以得到田忌的最优策略。
三、矩阵对策的求解方法
矩阵对策的求解方法主要是针对双方局中人(玩家)如何在对抗中找到自己的最优策略。在零和博弈中,双方的目标是一个对立关系,赢者的得分就是输者的损失,因此对策求解往往围绕最大化或最小化自己的收益展开。以下将详细讨论几种常见的矩阵对策求解方法,包括极大极小原理、线性规划法、图解法等。
3.1 极大极小原理
极大极小原理是零和博弈中最基础的求解方法。其核心思想是局中人选择自己的策略时,假设对方会采取对自己最不利的策略,因此局中人要保证在最坏的情况下收益尽可能大。在博弈中,局中人A的目标是选择一个策略\(A_i\),使得在所有可能情况下,他的最小收益最大化。这可以用以下公式表示:$$\max_i \min_j a_{ij}$$
其中\(a_{ij}\)表示局中人A选择策略\(A_i\)时,对手B选择策略\(B_j\)时的收益。同样,对手B希望选择策略\(B_j\),使得A的最大收益最小化,表示为:$$\min_j \max_i a_{ij}$$
如果这两个值相等,即:
则称该博弈存在鞍点,此时双方的最优策略都是纯策略。鞍点的存在意味着双方可以通过固定的策略组合,确保各自的收益不会因为对方策略的变化而降低。然而,并不是所有的博弈都存在鞍点。当鞍点不存在时,需要引入混合策略等其他求解方法。
3.2 混合策略
当一个博弈没有鞍点时,即没有纯策略可以保证最优收益,这时需要采用混合策略。混合策略是指局中人以一定的概率分布随机选择策略集中的策略。这种随机化的策略组合可以使局中人的收益期望达到最大化。在混合策略中,局中人A选择策略的概率可以表示为\(p = (p_1, p_2, ..., p_n)\),其中\(p_i\) 表示选择策略\(A_i\)的概率。同样,对手B的混合策略可以用概率向量\(q = (q_1, q_2, ..., q_m)\)表示。混合策略的收益期望值为:
局中人的目标是找到最优的概率分布\(p\)和\(q\),使得其收益期望最大化或最小化。
混合策略的求解通常依赖于线性规划或纳什均衡的相关理论。混合策略保证了在零和博弈中,双方总是能找到一个均衡点,虽然这个均衡点不是通过固定的纯策略实现的,而是通过概率分布。
3.3 线性规划法
线性规划法是解决矩阵对策的重要方法之一,尤其是在处理混合策略时。它将矩阵对策中的最优策略问题转化为线性规划问题,通过线性规划工具来求解最优的混合策略。对于局中人A来说,其目标是最大化其收益期望值,记为\(v\)。为了确保无论对手B采取何种策略,A的收益至少为 \(v\),我们需要保证:
同时,混合策略的概率向量\(p\)满足\(p_i \geq 0\)且\(\sum_{i=1}^n p_i = 1\)。
这样,问题可以转化为一个线性规划问题:
对手B的目标是最小化A的最大收益,因此同样可以通过线性规划来求解其最优混合策略。线性规划法的优势在于可以通过现有的优化算法高效求解,适用于大规模的博弈问题。然而,在求解较小规模问题时,图解法等更直观的方法也可以应用。
3.4 图解法
图解法是一种用于求解二维矩阵对策(即每个局中人只有两个策略)的可视化方法。这种方法利用坐标图形的方式,直观地展示局中人收益随策略变化的关系,从而找到最优策略。在二维矩阵对策中,局中人A的两个策略为\(A_1\)和\(A_2\),对手B的两个策略为\(B_\)和\(B_2\)。我们可以分别计算出A在不同概率选择\(A_1\)和\(A_2\)时的收益,并在图上绘制其收益曲线。同样,我们也可以绘制B的收益曲线。通过观察曲线的交点,我们可以找到双方的混合策略均衡点。这个交点对应的概率值就是双方的最优混合策略。图解法的优点在于直观易懂,适用于简单的二维博弈问题。
3.5 拉普拉斯法
拉普拉斯法是另一种求解矩阵对策的技巧,尤其适用于具有较多负值的赢得矩阵。其基本思想是通过对矩阵中的所有元素进行变换,使其全部为正值,然后再进行标准的极大极小分析。具体来说,拉普拉斯法通过将矩阵中的每个元素加上一个足够大的常数\(C\),使得矩阵中的所有元素都大于零。这个过程并不会改变博弈的本质,但可以简化计算,尤其是在处理极大极小值时更加方便。
例如,如果原赢得矩阵中有负值元素,令矩阵中的每个元素都加上常数\(C\),使得变换后的矩阵中的最小元素为正数。然后,可以根据新的赢得矩阵找到最优策略。
3.6 数值方法
对于复杂的大规模矩阵对策,直接的解析解可能比较困难,此时可以借助数值计算方法。例如,采用蒙特卡洛模拟法或其他数值优化算法来逼近最优解。随着计算机技术的发展,数值方法在解决复杂博弈问题中的应用越来越广泛。
四、矩阵对策练习
4.1 练习1
甲台有 4 个节目(A、B、C、D),乙台有 3 个节目(节目1、节目2、节目3),他们的收视率如下表所示。这个矩阵是甲台的收益矩阵,对应的是甲台选定一个节目,乙台选定一个节目的情况下,甲台的收视率。
甲台\乙台节目 | 节目1 | 节目2 | 节目3 |
---|---|---|---|
节目A | 70 | 45 | 35 |
节目B | 45 | 40 | 50 |
节目C | 55 | 50 | 55 |
节目D | 60 | 45 | 50 |
- 赢得矩阵\(A\)
- Step 1: 找到甲台每个策略的最小收益(行最小值)
所以甲台在四个策略中的最小收益分别是:35, 40, 50, 45,甲台的目标是使自己的最小收益尽可能大,因此甲台会选择这四个数中的最大值。
因此,甲台的最优策略是选择第 3 行的策略(节目 C),因为它的最小收益是 50。
- Step 2: 找到乙台每个策略的最大损失(列最大值)
乙台的目标是使甲台的最大收益尽可能小,因此乙台会选择这三个数中的最小值。
乙台的最优策略是选择第 2 列的策略(节目 2),因为它的最大损失是 50。
- Step 3: 寻找鞍点
通过最大最小原则,甲台的最小收益是 50,乙台的最大损失是 50。因此,我们发现了一个鞍点,即当甲台选择节目 C(策略 3),乙台选择节目 2(策略 2)时,双方都达到了各自的最优结果。这个组合 (C, 2) 就是该矩阵对策的纯最优策略。
def max_min_solution(payoff_matrix):
# 找到甲台每个策略的最小收益(行最小值)
row_mins = [min(row) for row in payoff_matrix]
# 甲台的目标是使自己的最小收益尽可能大
max_of_mins = max(row_mins)
# 找到使得最小收益最大的甲台策略的索引
best_strategy_for_a = row_mins.index(max_of_mins)
# 找到乙台每个策略的最大损失(列最大值)
col_maxs = [max(col) for col in zip(*payoff_matrix)]
# 乙台的目标是使甲台的最大收益尽可能小
min_of_maxs = min(col_maxs)
# 找到使得最大损失最小的乙台策略的索引
best_strategy_for_b = col_maxs.index(min_of_maxs)
return best_strategy_for_a, best_strategy_for_b, max_of_mins
# 赢得矩阵 A
A = [
[70, 45, 35],
[45, 40, 50],
[55, 50, 55],
[60, 45, 50]
]
# 计算最大最小方法的最优策略
best_strategy_a, best_strategy_b, best_outcome = max_min_solution(A)
print(f"甲台的最优策略是选择第 {best_strategy_a + 1} 行的策略,")
print(f"乙台的最优策略是选择第 {best_strategy_b + 1} 列的策略,")
print(f"此时甲台的最大最小收益是 {best_outcome}。")
4.2 练习2
用图解法给出矩阵对策的混合策略均衡,其中赢得矩阵如下所示:
- 列出每个玩家的支付函数:
- 对于玩家A:假设他选择策略1的概率为\(p\),则他选择策略2的概率为\(1 - p\)。
- 对于玩家B:假设他选择策略1、策略2和策略3的概率分别为\(q_1\),\(q_2\) 和\(q_3\)。
- 写出玩家A和玩家B的期望收益函数
玩家A的期望收益:- 当他选择策略1时,期望收益为\(E_A = 2q_1 + 3q_2 + 11q_3\)
- 当他选择策略2时,期望收益为\(E_A = 7q_1 + 5q_2 + 2q_3\)
玩家B的期望损失: - 当他选择策略1时,期望损失为\(E_B = 2p + 7(1 - p)\)
- 当他选择策略2时,期望损失为\(E_B = 3p + 5(1 - p)\)
- 当他选择策略3时,期望损失为\(E_B = 11p + 2(1 - p)\)
- 绘制图形:
- 在\(E_A\) 和\(p\) 的坐标系中绘制玩家A的收益函数。
- 找到这些函数的交点,确定最优概率\(p\) 和\(q\)。
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import linprog
# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 定义支付矩阵
P = np.array([
[2, 3, 11],
[7, 5, 2]
])
# 构建图解法中的线性方程组
# 对于A的支付函数,绘制在E_A 和 p 的坐标系中
p = np.linspace(0, 1, 500)
A_payoff1 = 2 * p + 7 * (1 - p)
A_payoff2 = 3 * p + 5 * (1 - p)
A_payoff3 = 11 * p + 2 * (1 - p)
# 计算每个p值的最小支付
min_payoff = np.minimum(np.minimum(A_payoff1, A_payoff2), A_payoff3)
# 绘制图形
plt.plot(p, A_payoff1, label='2p + 7(1 - p)')
plt.plot(p, A_payoff2, label='3p + 5(1 - p)')
plt.plot(p, A_payoff3, label='11p + 2(1 - p)')
plt.fill_between(p, min_payoff, color='gray', alpha=0.3, label='最小值部分')
# 找到最小值区域中纵坐标最大的点
max_in_min_region_index = np.argmax(min_payoff)
p_star = p[max_in_min_region_index]
E_star = min_payoff[max_in_min_region_index]
plt.axvline(p_star, color='r', linestyle='--', label=f'p* = {p_star:.2f}')
plt.axhline(E_star, color='g', linestyle='--', label=f'E* = {E_star:.2f}')
# 添加标签和图例
plt.xlabel('p (玩家A选择策略1的概率)')
plt.ylabel('收益 (玩家A)')
plt.title('图解法求解混合策略均衡')
plt.legend()
plt.grid(True)
plt.show()
# 通过线性规划求解玩家A和玩家B的混合策略
c = [-1, -1, -1] # 目标函数系数 (最小化负的混合策略)
A_ub = np.array([
[2, 3, 11],
[7, 5, 2]
])
b_ub = np.array([E_star, E_star])
result = linprog(c, A_ub=A_ub, b_ub=b_ub, bounds=(0, 1))
if result.success:
q_star = result.x / np.sum(result.x) # 归一化为概率
q_star = np.round(q_star, 2) # 保留两位小数
print(f'玩家B的最优混合策略: q* = {q_star}')
else:
print('线性规划未能找到最优解')
# 玩家A的混合策略
x_star = np.array([1 - p_star, p_star])
x_star = np.round(x_star, 2) # 保留两位小数
print(f'玩家A的最优混合策略: x* = {x_star}')
E_star = round(E_star, 2) # 保留两位小数
print(f'博弈的值 (E*) = {E_star}')
玩家B的最优混合策略: q* = [0. 0.82 0.18]
玩家A的最优混合策略: x* = [0.73 0.27]
博弈的值 (E*) = 4.45
4.3 练习3
已知矩阵对策的赢得矩阵为
试求其混合策略纳什均衡。
- 局中人1混合策略
联立上面方程,可解得\(x=1/3\)
- 局中人2赢得期望值
联立上面方程,可解得\(y=1/2\)
- 最优混合策略
最优策略为\((x^*=1/3, y^*=1/2)\)
import matplotlib.pyplot as plt
from matplotlib import rcParams
# 定义收益矩阵
A = np.array([[5, 9], [8, 6]])
# 定义变量
p = cp.Variable(2) # 玩家1的混合策略
q = cp.Variable(2) # 玩家2的混合策略
# 约束条件
constraints = [
p >= 0,
cp.sum(p) == 1,
q >= 0,
cp.sum(q) == 1,
p @ A[:, 0] == p @ A[:, 1], # 玩家1对两个策略的期望收益相等
q @ A[0, :] == q @ A[1, :] # 玩家2对两个策略的期望收益相等
]
# 定义问题
problem = cp.Problem(cp.Maximize(0), constraints)
# 求解问题
problem.solve()
# 获取结果
p1, p2 = p.value
q1, q2 = q.value
print("玩家1的混合策略:")
print(f"p1 = {p1:.2f}, p2 = {p2:.2f}")
print("玩家2的混合策略:")
print(f"q1 = {q1:.2f}, q2 = {q2:.2f}")
# 绘制直线图
x = np.linspace(0, 1, 100)
y1 = 5 * x + 8 * (1 - x)
y2 = 9 * x + 6 * (1 - x)
plt.plot(x, y1, label='y1 = 5 * x + 8 * (1 - x)')
plt.plot(x, y2, label='y2 = 9 * x + 6 * (1 - x)')
plt.axvline(p1, color='r', linestyle='--', label='均衡点')
plt.xlabel('p1的概率')
plt.ylabel('期望收益')
plt.title('玩家1的混合策略均衡点')
plt.legend()
plt.grid(True)
plt.show()
4.4 练习4
矩阵对策拓展:甲、乙两家面包店在市场竞争中各自都在考虑是否要降价。市场博弈的结果如下:
- 如果两家都降价,则各家可得3百元的利润。
- 如果都不降价,则各家可得利润5百元。
- 如果一家降价,另一家不降,则降价的一家可得利润6百元,不降价的一家由于剩余损坏等原因而亏损4百元。
依题意,把上述问题表述成如下表格:
甲面包店\乙面包店 | β1(降价) | β2(不降价) |
---|---|---|
α1(降价) | (3, 3) | (6, -4) |
α2(不降价) | (-4, 6) | (5, 5) |
如果甲选择降价(α1),乙的最佳回应是降价(β1),因为β1的收益是3,而不降价(β2)的收益是-4。
如果甲选择不降价(α2),乙的最佳回应是不降价(β2),因为β2的收益是5,而降价(β1)的收益是6。
同样地,如果乙选择降价(β1),甲的最佳回应是降价(α1),因为α1的收益是3,而不降价(α2)的收益是-4。
如果乙选择不降价(β2),甲的最佳回应是不降价(α2),因为α2的收益是5,而降价(α1)的收益是6。
因此,唯一的纳什均衡是两家面包店都选择降价,即(α1, β1)。
import numpy as np
import nashpy as nash
# 定义甲和乙的支付矩阵
payoff_甲 = np.array([[3, 6], [-4, 5]]) # 甲面包店的收益矩阵
payoff_乙 = np.array([[3, -4], [6, 5]]) # 乙面包店的收益矩阵
# 创建博弈
game = nash.Game(payoff_甲, payoff_乙)
# 计算纳什均衡
equilibria = list(game.support_enumeration())
# 输出纳什均衡结果
for eq in equilibria:
strategies_甲, strategies_乙 = eq
print(f"甲面包店的策略:{strategies_甲}")
print(f"乙面包店的策略:{strategies_乙}")
if np.isclose(strategies_甲[0], 1) and np.isclose(strategies_乙[0], 1):
print("纯策略纳什均衡为:两家面包店都选择降价 (α1, β1)")
elif np.isclose(strategies_甲[1], 1) and np.isclose(strategies_乙[1], 1):
print("纯策略纳什均衡为:两家面包店都选择不降价 (α2, β2)")
else:
print("混合策略纳什均衡")
总结
矩阵对策作为博弈论中的重要工具,提供了系统化的方法来分析和解决两方对抗问题。在实际应用中,矩阵对策将复杂的决策过程简化为一个可计算的矩阵,明确展示了每个局中人的策略选择及其相应的收益。通过赢得函数的形式化表达,研究者能够计算并预测最优策略,从而帮助参与者在竞争或对抗中获得最佳结果。
在经济领域,矩阵对策广泛用于企业竞争策略的制定。例如,企业在定价、广告投放或市场进入策略上,通常面对竞争对手的不同决策,矩阵对策模型可以帮助企业找到在激烈市场竞争中的平衡点,降低不必要的损失并提升市场份额。与此同时,军事领域的应用也非常广泛,国家在制定军事战略时,常常面临潜在对手的不确定行动,通过矩阵对策,军事决策者能够制定最优的战术或防御措施。在政治和国际关系中,矩阵对策为各国在谈判与冲突中提供了理性选择的框架。各国在国际事务中的决策不仅关乎自身利益,也牵涉到复杂的对抗与合作问题。矩阵对策通过对每个国家策略的理性推演,帮助各国找到有利的博弈策略,从而避免冲突升级,促进稳定和合作。