07. 对策论
定义
对策论亦称竞赛论或博弈论,是研究具有斗争或竞争性质现象的数学理论和方法。
基本要素:
局中人:在一个对策行为中,有权决定自己行动方案的对策参加者,通常用
表示局中人集合;
策略集:一局对策中,可供局中人选择的一个实际可行的完整行动方案称一个策略,每个局中人
都有自己的策略集 ;
赢得函数
(支付函数):一局对策中,各局中人所选定的策略形成的策略组称一个局势,即若
是第 个局中人的一个策略,则策略组
就是一个局势。全体局势的集合可用各局中人策略集的笛卡尔积表示,即 对任意局势 ,局中人
可以得到一个赢得 ,称赢得函数。
零和对策 (矩阵对策)
零和对策是一类特殊的对策问题,只有两名局中人,每个局中人都只有有限个策略可供选择。在任一纯局势下,两个局中人的赢得之和总是等于
0。
设局中人 1、2 的策略集 当局中人 1 选定策略 ,局中人 2 选定策略 后,就形成局势 。对任一局势 ,记局中人 1 的赢得为
,称 为局中人 1 的赢得矩阵,由于对策零和,因此局中人 2
的赢得矩阵就是 。
因此记零和对策为
稳定解和最优纯策略
设
为矩阵对策,其中 ,,若等式 成立,则称 为 的稳定解, 分别为局中人 1、2
的最优纯策略。
如何理解上述定理?
对于前者 ,表示局中人 1
在策略中坏中取优,即计算所有策略的最坏结果,再从中挑选最好的一个策略。
对于后者 ,表示局中人 2
同样坏中取优,只不过局中人 2 的赢得矩阵为 ,因此先取大再取小,原式可以化为 如果两者相等,说明存在一个形势,当局中人 1
取其最优纯策略时,局中人 2 取其他策略都比取其最优纯策略时收益小
(同样,局中人 1 的收益大);反之亦然。即对于任意 ,有
混合策略
然而很多时候,等式 并不成立,此时不存在稳定解和最优纯策略。引入混合策略。
设局中人 1 选用策略
的概率为 ,局中人 2 选用策略
的概率为 ,记 则局中人 1 的期望赢得为 则有向量 使得等式 成立,此时
即为稳定解。
线性规划求稳定解
对于 将混合策略 看作纯策略
,可以化为 记 ,则 即为线性规划问题
的解,同理
即为线性规划问题
的解。
例子与 Python 代码
对赢得矩阵 求局中人 1、2 的混合策略。
选取局中人 1,化为线性规划问题
选取局中人 2,化为线性规划问题
使用 Python 求解上述问题,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
|
import numpy as np import cvxpy as cp
A = np.array([[3, 0, 2, 0], [0, 2, 1, 5], [1, 2, 3, 4]])
A1 = A.copy().T A2 = A.copy()
x = cp.Variable(A1.shape[1]+1) y = cp.Variable(A2.shape[1]+1)
con1 = [ A1 @ x[:-1] >= x[-1], sum(x[:-1]) == 1, x[:-1] >= 0, ] con2 = [ A2 @ y[:-1] <= y[-1], sum(y[:-1]) == 1, y[:-1] >= 0, ]
obj1 = cp.Maximize(x[-1]) obj2 = cp.Minimize(y[-1])
p1 = cp.Problem(obj1, con1) p2 = cp.Problem(obj2, con2) p1.solve(solver='GLPK_MI', verbose=True) p2.solve(solver='GLPK_MI', verbose=True)
print('x =', x.value[:-1]) print('y =', y.value[:-1]) print('x exp =', x.value[-1]) print('y exp =', y.value[-1])
|
输出如下:
1 2 3 4
| x = [ 0.25 -0. 0.75] y = [ 0.5 0.5 -0. -0. ] x exp = 1.5 y exp = 1.5
|
于是有