对策论——矩阵对策要素、结构和模型精解

矩阵对策是一种研究两方对抗问题的数学工具,属于博弈论的分支。博弈论(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}\),即一方的收益就是另一方的损失。赢得矩阵可以表示如下:

\[\begin{pmatrix} a_{11} & a_{12} & \dots & a_{1n} \\ a_{21} & a_{22} & \dots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \dots & a_{mn} \end{pmatrix}\]

其中,矩阵元素\(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选择石头** 而 **B选择剪刀** 时,石头击败剪刀,A获得1分,而B损失1分。因此对应的值为1。 - 当 **A选择石头** 而 **B选择布** 时,布包住石头,A损失1分,B赢得1分。因此对应的值为-1。 - 当 **A选择石头** 而 **B选择石头** 时,双方平局,没有任何收益,矩阵值为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}$$
如果这两个值相等,即:

\[\max_i \min_j a_{ij} = \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)\)表示。混合策略的收益期望值为:

\[E(A, B) = \sum_{i=1}^n \sum_{j=1}^m p_i a_{ij} q_j \]

局中人的目标是找到最优的概率分布\(p\)\(q\),使得其收益期望最大化或最小化。

混合策略的求解通常依赖于线性规划或纳什均衡的相关理论。混合策略保证了在零和博弈中,双方总是能找到一个均衡点,虽然这个均衡点不是通过固定的纯策略实现的,而是通过概率分布。

3.3 线性规划法

线性规划法是解决矩阵对策的重要方法之一,尤其是在处理混合策略时。它将矩阵对策中的最优策略问题转化为线性规划问题,通过线性规划工具来求解最优的混合策略。对于局中人A来说,其目标是最大化其收益期望值,记为\(v\)。为了确保无论对手B采取何种策略,A的收益至少为 \(v\),我们需要保证:

\[\sum_{i=1}^n p_i a_{ij} \geq v \quad \forall j \]

同时,混合策略的概率向量\(p\)满足\(p_i \geq 0\)\(\sum_{i=1}^n p_i = 1\)

这样,问题可以转化为一个线性规划问题:

\[ \text{max } v\\ \text{s.t. } \sum_{i=1}^n p_i a_{ij} \geq v \quad \forall j \\ p_i \geq 0, \quad \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\)

\[A = \begin{pmatrix} 70 & 45 & 35 \\ 45 & 40 & 50 \\ 55 & 50 & 55 \\ 60 & 45 & 50 \\ \end{pmatrix} \]

  • Step 1: 找到甲台每个策略的最小收益(行最小值)

\[\text{min行} A = \begin{pmatrix} 35, & 40, & 50, & 45 \end{pmatrix} \]

所以甲台在四个策略中的最小收益分别是:35, 40, 50, 45,甲台的目标是使自己的最小收益尽可能大,因此甲台会选择这四个数中的最大值。

\[\max(35, 40, 50, 45) = 50 \]

因此,甲台的最优策略是选择第 3 行的策略(节目 C),因为它的最小收益是 50。

  • Step 2: 找到乙台每个策略的最大损失(列最大值)

\[\text{max列} A = \begin{pmatrix} 70, & 50, & 55 \end{pmatrix} \]

乙台的目标是使甲台的最大收益尽可能小,因此乙台会选择这三个数中的最小值。

\[\min(70, 50, 55) = 50 \]

乙台的最优策略是选择第 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

用图解法给出矩阵对策的混合策略均衡,其中赢得矩阵如下所示:

\[P = \begin{pmatrix} 2 & 3 &11 \\ 7 & 5 & 2 \end{pmatrix}\]

  • 列出每个玩家的支付函数:
    • 对于玩家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

已知矩阵对策的赢得矩阵为

\[\left[ {\begin{array}{*{20}{c}} 5&9\\ 8&6 \end{array}} \right]\]

试求其混合策略纳什均衡。

\[\begin{array}{*{20}{c}} {\begin{array}{*{20}{c}} {}&{{\beta _1}}&{{\beta _2}}&{} \end{array}}\\ {\begin{array}{*{20}{c}} {\begin{array}{*{20}{c}} {{\alpha _1}}\\ {{\alpha _2}} \end{array}}&{\left[ {\begin{array}{*{20}{c}} 5&9\\ 8&6 \end{array}} \right]}&{\begin{array}{*{20}{c}} x\\ {1 - x} \end{array}} \end{array}}\\ {\begin{array}{*{20}{c}} {}&y&{1 - y}&{} \end{array}} \end{array}\]

  • 局中人1混合策略

\[V_{\beta1} = 5x + 8(1 - x) = 8 - 3x \quad V_{\beta2} = 9x + 6(1 - x) = 6 + 3x \]

联立上面方程,可解得\(x=1/3\)

  • 局中人2赢得期望值

\[V_{\alpha1} = 5y + 9(1 - y) = 9 - 4y \quad V_{\alpha2} = 8y + 6(1 - y) = 6 + 2y \]

联立上面方程,可解得\(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("混合策略纳什均衡")

总结

矩阵对策作为博弈论中的重要工具,提供了系统化的方法来分析和解决两方对抗问题。在实际应用中,矩阵对策将复杂的决策过程简化为一个可计算的矩阵,明确展示了每个局中人的策略选择及其相应的收益。通过赢得函数的形式化表达,研究者能够计算并预测最优策略,从而帮助参与者在竞争或对抗中获得最佳结果。
在经济领域,矩阵对策广泛用于企业竞争策略的制定。例如,企业在定价、广告投放或市场进入策略上,通常面对竞争对手的不同决策,矩阵对策模型可以帮助企业找到在激烈市场竞争中的平衡点,降低不必要的损失并提升市场份额。与此同时,军事领域的应用也非常广泛,国家在制定军事战略时,常常面临潜在对手的不确定行动,通过矩阵对策,军事决策者能够制定最优的战术或防御措施。在政治和国际关系中,矩阵对策为各国在谈判与冲突中提供了理性选择的框架。各国在国际事务中的决策不仅关乎自身利益,也牵涉到复杂的对抗与合作问题。矩阵对策通过对每个国家策略的理性推演,帮助各国找到有利的博弈策略,从而避免冲突升级,促进稳定和合作。

参考资料

  1. 数学建模之对策论
  2. 关于矩阵对策的基本定理
posted @ 2024-09-23 21:26  郝hai  阅读(162)  评论(0编辑  收藏  举报