📌  相关文章
📜  博弈论(范式博弈) |第 2 组(纯策略游戏)(1)

📅  最后修改于: 2023-12-03 14:50:29.841000             🧑  作者: Mango

博弈论(范式博弈) |第 2 组(纯策略游戏)

博弈论是一种数学工具,用于研究决策者之间的策略和行为。其中,范式博弈就是一类常见的博弈,也是博弈论研究的重要对象。本文将介绍第 2 组范式博弈——纯策略游戏,探讨其数学模型和求解方法。

数学模型

在纯策略博弈中,每个参与者都必须在有限的策略集合中作出决策,而这些决策不受随机性的影响,只有确定性的结果。具体地,一个纯策略博弈可以描述为一个 4 元组 $(N, A, u, \tau)$,其中:

  • $N$ 表示参与者的集合,$N={1,2,\cdots,n}$;
  • $A=\times_{i\in N}A_i$ 表示每个参与者可取的策略集合,且 $A_i$ 是参与者 $i$ 的可取策略集合;
  • $u=(u_1,u_2,\cdots,u_n)$ 表示每个参与者的效用函数,其中 $u_i:A\to\mathbb{R}$,即效用函数将每个参与者可能的策略组合映射为其对应的效用值;
  • $\tau$ 表示一些其他信息,比如参与者的动态信息(例如游戏的回合数)等。
求解方法

在纯策略博弈中,我们通常关注的是纳什均衡(Nash Equilibrium)。它是指策略组合 $(a_1^, a_2^, \cdots, a_n^)$,其中 $a_i^\in A_i$,满足以下两个条件:

  1. 对于任意参与者 $i$,均有 $u_i(a_1^, a_2^, \cdots, a_n^)\geq u_i(a_1^, a_2^, \cdots, a_i', \cdots, a_n^)$,即在其他参与者保持策略不变的情况下,当前参与者的效用不能更高;
  2. 没有任何一名参与者可以通过更改自己的策略使得自己的效用提高。

通常情况下,我们可以采用迭代删除劣势策略的方法求解纳什均衡。具体地,每次迭代中,若存在某个参与者发现自己的某一个策略从未被选中过,并且其在所有其他参与者选择了某个策略 $a_{-i}$ 的情况下,其选中该策略并不劣于其他策略,则可以将该策略删除。不断进行这样的迭代,直到不能再删除任何一个策略为止,此时剩下的策略组合就是纳什均衡。

代码实现

下面是 Python 代码实现迭代删除劣势策略的算法:

def iterated_elimination(game):
    # 输入一个二维列表 game,其中 game[i][j] 表示参与者 i 选取策略 j 时对应的效用值
    n = len(game)
    m = len(game[0])
    dominated = set()  # 被支配的策略集合
    while True:
        changed = False
        for i in range(n):
            if i in dominated:
                continue
            for j in range(m):
                if j in dominated:
                    continue
                better = True
                for k in range(n):
                    if k == i:
                        continue
                    if game[k][j] > game[i][j]:
                        better = False
                        break
                if better:
                    for k in range(n):
                        if k == i:
                            continue
                        if game[i][j] < game[k][j]:
                            break
                    else:
                        dominated.add(j)
                        changed = True
        if not changed:
            break
    return [i for i in range(m) if i not in dominated]

代码中,我们维护一个 dominated 集合,表示已经被支配的策略集合。所有参与者在剩余策略中选择一个效用最高的策略作为其当前最优策略,如果某个策略在其他参与者保持策略不变的情况下始终不优,则被称为被支配的策略。在每次循环中,我们尝试找到所有被支配的策略,并将其从候选策略集合中剔除。当剩余的策略集合不再发生变化时,返回其作为纳什均衡。