【数学建模笔记 07】数学建模的对策论

07. 对策论

定义

对策论亦称竞赛论或博弈论,是研究具有斗争或竞争性质现象的数学理论和方法。

基本要素:

  • 局中人:在一个对策行为中,有权决定自己行动方案的对策参加者,通常用 I I I​ 表示局中人集合;

  • 策略集:一局对策中,可供局中人选择的一个实际可行的完整行动方案称一个策略,每个局中人 i , i ∈ I i,i\in I i,iI 都有自己的策略集 S i S_i Si​;

  • 赢得函数 (支付函数):一局对策中,各局中人所选定的策略形成的策略组称一个局势,即若 s i s_i si 是第 i i i 个局中人的一个策略,则策略组
    s = ( s 1 , s 2 , … , s n ) , s=(s_1,s_2,\dots,s_n), s=(s1,s2,,sn),
    就是一个局势。全体局势的集合可用各局中人策略集的笛卡尔积表示,即
    S = S 1 × S 2 × ⋯ × S n , S=S_1\times S_2\times\dots\times S_n, S=S1×S2××Sn,
    对任意局势 s ∈ S s\in S sS,局中人 i i i 可以得到一个赢得 H i ( s ) H_i(s) Hi(s),称赢得函数。

零和对策 (矩阵对策)

零和对策是一类特殊的对策问题,只有两名局中人,每个局中人都只有有限个策略可供选择。在任一纯局势下,两个局中人的赢得之和总是等于 0。

设局中人 1、2 的策略集
S 1 = { α 1 , … , α m } , S 2 = { β 1 , … , β n } . S_1=\{\alpha_1,\dots,\alpha_m\},S2=\{\beta_1,\dots,\beta_n\}. S1={α1,,αm},S2={β1,,βn}.
当局中人 1 选定策略 α i \alpha_i αi,局中人 2 选定策略 β j \beta_j βj 后,就形成局势 ( α i , β j ) (\alpha_i,\beta_j) (αi,βj)。对任一局势 ( α i , β j ) (\alpha_i,\beta_j) (αi,βj),记局中人 1 的赢得为 a i j a_{ij} aij,称
A = ( a 11 a 12 … a 1 n a 21 a 22 … a 2 n ⋮ ⋮ ⋱ ⋮ a m 1 a m 2 … a m n ) A=\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=a11a21am1a12a22am2a1na2namn
为局中人 1 的赢得矩阵,由于对策零和,因此局中人 2 的赢得矩阵就是 − A -A A

因此记零和对策为
G = { S 1 , S 2 ; A } . G=\{S_1,S_2;A\}. G={S1,S2;A}.

稳定解和最优纯策略

G = { S 1 , S 2 ; A } G=\{S_1,S_2;A\} G={S1,S2;A}​ 为矩阵对策,其中 S 1 = { α 1 , … , α m } , S 2 = { β 1 , … , β n } S_1=\{\alpha_1,\dots,\alpha_m\},S2=\{\beta_1,\dots,\beta_n\} S1={α1,,αm},S2={β1,,βn}​, A = ( a i j ) m × n A=(a_{ij})_{m\times n} A=(aij)m×n​​,若等式
max ⁡ i min ⁡ j a i j = min ⁡ j max ⁡ i a i j = a i ∗ j ∗ \max_i\min_ja_{ij}=\min_j\max_ia_{ij}=a_{i^*j^*} imaxjminaij=jminimaxaij=aij
成立,则称 ( α i ∗ , β j ∗ ) (\alpha_{i^*},\beta_{j^*}) (αi,βj) G G G​ 的稳定解, a i ∗ , b j ∗ a_{i^*},b_{j^*} ai,bj 分别为局中人 1、2 的最优纯策略。

如何理解上述定理?

对于前者 max ⁡ i min ⁡ j a i j \max_i\min_ja_{ij} maximinjaij​,表示局中人 1 在策略中坏中取优,即计算所有策略的最坏结果,再从中挑选最好的一个策略。

对于后者 min ⁡ j max ⁡ i a i j \min_j\max_ia_{ij} minjmaxiaij​,表示局中人 2 同样坏中取优,只不过局中人 2 的赢得矩阵为 − A -A A,因此先取大再取小,原式可以化为
max ⁡ j min ⁡ i − a i j . \max_j\min_i-a_{ij}. jmaximinaij.
如果两者相等,说明存在一个形势,当局中人 1 取其最优纯策略时,局中人 2 取其他策略都比取其最优纯策略时收益小 (同样,局中人 1 的收益大);反之亦然。即对于任意 i , j i,j i,j,有
a i j ∗ ≤ a i ∗ j ∗ ≤ a i ∗ j . a_{ij^*}\le a_{i^*j^*}\le a_{i^*j}. aijaijaij.

混合策略

然而很多时候,等式
max ⁡ i min ⁡ j a i j = min ⁡ j max ⁡ i a i j \max_i\min_ja_{ij}=\min_j\max_ia_{ij} imaxjminaij=jminimaxaij
并不成立,此时不存在稳定解和最优纯策略。引入混合策略。

设局中人 1 选用策略 α i \alpha_i αi​ 的概率为 x i x_i xi​,局中人 2 选用策略 β i \beta_i βi​ 的概率为 y i y_i yi,记
x = ( x 1 , … , x m ) T , y = ( y 1 , … , y n ) T x=(x_1,\dots,x_m)^T,y=(y_1,\dots,y_n)^T x=(x1,,xm)T,y=(y1,,yn)T
则局中人 1 的期望赢得为
E ( x , y ) = x T A y . E(x,y)=x^TAy. E(x,y)=xTAy.
则有向量 x ‾ , y ‾ \overline{x},\overline{y} x,y 使得等式
x ‾ T A y ‾ = max ⁡ x min ⁡ y x T A y = min ⁡ y max ⁡ x x T A y \overline{x}^TA\overline{y}=\max_x\min_y x^TAy=\min_y\max_xx^TAy xTAy=xmaxyminxTAy=yminxmaxxTAy
成立,此时 ( x ‾ , y ‾ ) (\overline{x},\overline{y}) (x,y) 即为稳定解。

线性规划求稳定解

对于
max ⁡ x min ⁡ y x T A y , \max_x\min_y x^TAy, xmaxyminxTAy,
将混合策略 y y y 看作纯策略 j j j,可以化为
max ⁡ x min ⁡ j ∑ i = 1 m a i j x i . \max_x\min_j\sum_{i=1}^ma_{ij}x_i. xmaxjmini=1maijxi.
u = min ⁡ j ∑ i = 1 m a i j x i u=\min_j\sum_{i=1}^ma_{ij}x_i u=minji=1maijxi,则 x ‾ \overline{x} x 即为线性规划问题
max ⁡ u , \max u, maxu,

s . t . { ∑ i = 1 m a i j x i ≥ u , j = 1 , 2 , … , n , ∑ i = 1 m x i = 1 , x i ≥ 0 , i = 1 , 2 , … , m . s.t.\left\{\begin{aligned} &\sum_{i=1}^ma_{ij}x_i\ge u,j=1,2,\dots,n,\\ &\sum_{i=1}^m x_i=1,\\ &x_i\ge 0,i=1,2,\dots,m. \end{aligned}\right. s.t.i=1maijxiu,j=1,2,,n,i=1mxi=1,xi0,i=1,2,,m.

的解,同理 y ‾ \overline{y} y 即为线性规划问题
min ⁡ v , \min v, minv,

s . t . { ∑ j = 1 n a i j y j ≤ v , i = 1 , 2 , … , m , ∑ j = 1 n y j = 1 , y j ≥ 0 , j = 1 , 2 , … , n . s.t.\left\{\begin{aligned} &\sum_{j=1}^na_{ij}y_j\le v,i=1,2,\dots,m,\\ &\sum_{j=1}^n y_j=1,\\ &y_j\ge 0,j=1,2,\dots,n. \end{aligned}\right. s.t.j=1naijyjv,i=1,2,,m,j=1nyj=1,yj0,j=1,2,,n.

的解。

例子与 Python 代码

对赢得矩阵
A = ( 3 0 2 0 0 2 1 5 1 2 3 4 ) A=\begin{pmatrix} 3&0&2&0\\ 0&2&1&5\\ 1&2&3&4 \end{pmatrix} A=301022213054
求局中人 1、2 的混合策略。

选取局中人 1,化为线性规划问题
max ⁡ u , \max u, maxu,

s . t . { 3 x 1 + x 3 ≤ u , 2 x 2 + 2 x 3 ≤ u , 2 x 1 + x 2 + 3 x 3 ≤ u , 5 x 2 + 4 x 3 ≤ u , x 1 + x 2 + x 3 = 1 , x i ≥ 0 , i = 1 , 2 , 3. s.t.\left\{\begin{aligned} &3x_1+x_3\le u,\\ &2x_2+2x_3\le u,\\ &2x_1+x_2+3x_3\le u,\\ &5x_2+4x_3\le u,\\ &x_1+x_2+x_3=1,\\ &x_i\ge 0,i=1,2,3. \end{aligned}\right. s.t.3x1+x3u,2x2+2x3u,2x1+x2+3x3u,5x2+4x3u,x1+x2+x3=1,xi0,i=1,2,3.

选取局中人 2,化为线性规划问题
min ⁡ v , \min v, minv,

s . t . { 3 y 1 + 2 y 3 ≤ v , 2 y 2 + y 3 + 5 y 4 ≤ v , y 1 + 2 y 2 + 3 y 3 + 4 y 4 ≤ v , y 1 + y 2 + y 3 + y 4 = 1 , y i ≥ 0 , i = 1 , 2 , 3 , 4. s.t.\left\{\begin{aligned} &3y_1+2y_3\le v,\\ &2y_2+y_3+5y_4\le v,\\ &y_1+2y_2+3y_3+4y_4\le v,\\ &y_1+y_2+y_3+y_4=1,\\ &y_i\ge0,i=1,2,3,4. \end{aligned}\right. s.t.3y1+2y3v,2y2+y3+5y4v,y1+2y2+3y3+4y4v,y1+y2+y3+y4=1,yi0,i=1,2,3,4.

使用 Python 求解上述问题,代码如下:

#! /usr/bin/env python
# -*- coding: utf-8 -*-
# @ author: Koorye
# @ date: 2021-7-25
# @ function: 使用 cvxpy 包进行矩阵对策混合策略求解

# %%

import numpy as np
import cvxpy as cp

# %%

# 赢得矩阵
A = np.array([[3, 0, 2, 0],
              [0, 2, 1, 5],
              [1, 2, 3, 4]])

# %%

# 不等式约束形如 A * x <= b
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])

输出如下:

x = [ 0.25 -0.    0.75]
y = [ 0.5  0.5 -0.  -0. ]
x exp = 1.5
y exp = 1.5

于是有
x ‾ = ( 0.25 , 0 , 0.75 ) , y ‾ = ( 0.5 , 0.5 , 0 , 0 ) , E ( x ‾ , y ‾ ) = 1.5. \overline{x}=(0.25,0,0.75),\overline{y}=(0.5,0.5,0,0),E(\overline{x},\overline{y})=1.5. x=(0.25,0,0.75),y=(0.5,0.5,0,0),E(x,y)=1.5.

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数学建模是一门重要而又有趣的学科,它是将数学的方法与现实问题相结合的过程。在进行数学建模的过程中,笔记的记录是非常重要的,可以帮助我们更好地理解问题、掌握建模方法,并且方便后期的复习和总结。 我想将我的数学建模笔记手写在CSDN上,主要出于以下几个原因。首先,手写笔记能够培养我对数学建模概念的理解和记忆能力。通过亲自动手书写数学模型、公式和解题步骤,我可以更好地掌握知识点,避免只是机械地复制粘贴或者直接照抄书中的内容。 其次,通过手写笔记,我可以更好地记录自己在建模过程中的思考和想法。数学建模是一个灵活而创造性的过程,每个人对问题的理解和解决方式不尽相同。在手写笔记中,我可以更加自由地表达自己的思路和想法,将自己独特的见解与他人分享。 此外,手写笔记也可以提高我对数学建模问题的整体把握能力。在手写过程中,我需要整理和提炼一些关键的概念和知识点,并将它们以更简洁、更清晰的方式呈现出来。这种整合和概括的过程可以帮助我更好地理解问题的本质和解决思路,并将其与其他相关知识进行联系,形成一个更完整的知识体系。 最后,将数学建模笔记手写在CSDN上,可以与其他同学和科研者进行交流与讨论。CSDN是一个专注于计算机科学与技术的知识分享平台,拥有众多对数学建模感兴趣的读者和作者。通过将自己的笔记分享在CSDN上,可以获得更多人的意见和建议,从而不断完善自己的建模能力。 总而言之,数学建模笔记的手写在CSDN上,不仅可以帮助我提升对数学建模的理解和记忆能力,还可以促进思考、整理和交流能力,对于提升自己的数学建模能力具有重要意义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值