极小极大遗憾
极小极大遗憾(minimax regret)是在状态概率未给定时,选择最坏遗憾最小的决策准则。某个状态下的遗憾,是所选方案与“若事先知道该状态就能取得的最好结果”之间的差距。它衡量错失的机会,而不是收益本身的高低,也不是对人的后悔情绪作心理测量。
使用这一准则仍须给定可行方案、可能状态和每种组合的收益或损失。不指定概率,不能消除状态集合和模型数值带来的判断。[1]
从收益表到遗憾表
设决策集合 和状态集合 都非空且有限,收益 越大越好。对每个状态先计算事后最好收益 方案 a 在状态 s 下的遗憾定义为 。极小极大遗憾选择 由于两集合有限,最大值、最小值都能取得,但最优方案可能不唯一。M 是按列求出的基准,不能每一行用自己的最好状态当基准。
例如,下表是三个方案在三种状态下的教学收益,所有收益用同一个可加单位表示,不对应实际投资回报。
| 方案 | 状态一 | 状态二 | 状态三 |
|---|---|---|---|
| A | 8 | 7 | 1 |
| B | 4 | 6 | 6 |
| C | 0 | 4 | 10 |
| 各列最好收益 | 8 | 7 | 10 |
逐列用最好收益减去各项,再取每行最大值:
| 方案 | 状态一遗憾 | 状态二遗憾 | 状态三遗憾 | 最大遗憾 |
|---|---|---|---|---|
| A | 0 | 0 | 9 | 9 |
| B | 4 | 1 | 4 | 4 |
| C | 8 | 3 | 0 | 8 |
因此选择 B。它不在任何一列获得最高收益,却把最坏的机会损失限制在四;A 在两个状态下最好,但遇到第三种状态时会错失九。
与最坏收益和期望收益的区别
最大最小收益准则求的是 ,直接保护最坏收益;极小极大遗憾保护的是相对同状态最好结果的差距。两者在某些表中恰好选择同一方案,在另一些表中不同。
考虑只有两种状态的变式:A 的收益为 ,B 为 。最坏收益分别是二和四,最大最小收益选择 B。但事后最好收益为 ,两行遗憾分别为 、,故极小极大遗憾选择 A。前者更关注收益最低时拿到多少,后者更关注相对已知状态下最好方案少拿多少。
若状态概率 已确定,最小化期望遗憾与最大化期望收益则完全等价,因为 第一项与 a 无关。这个代数等价不适用于把期望换成最大值;不能把“最大遗憾最小”称为“平均收益最大”。[1]
允许随机化的决策
若实际问题允许先抽签选方案,可令 、,在每个固定状态下比较期望遗憾。需要说明时间顺序:状态可以针对已知的抽签分布,但不能看完实际抽签结果再改变。此时优化为 它等价于线性规划:引入变量 z,最小化 z,并对每个 s 加上约束 ,再加概率非负和总和为一。每个状态给出一个仿射函数,取最大值形成凸的分段线性目标;有限数据与紧的概率单纯形保证最优值存在。
在刚才的两方案变式中,令以概率 p 选 A,其余选 B。两状态的期望遗憾为 一条随 p 上升,一条随 p 下降。若 p 小于交点,降低最大项要增大 p;若大于交点,则要减小 p。故最小的上包络在交点取得: 它小于最佳纯方案 A 的最大遗憾二。但 只约束固定状态下对抽签取平均的遗憾,不保证每次实际抽签损失都不超过该值。若状态可以在看见抽签结果后选择,这一保证就不成立。
随机化是否可行由问题决定。对一次不可分割的设施建设,抽签并不等同于同时建设六分之五个 A;对可多次重复或能随机分配的任务,才可能有合适的实施解释。
单位变换与可行集
若给每个状态的全部方案都加同一个数 ,新基准也加上 ,遗憾保持不变。若所有收益统一乘以 ,所有遗憾同乘该数,最优选择也不变。因此一致的货币换算不会改变结论;逐方案任意改变尺度则不具有这种性质。
可行方案集合却会改变基准。例如最初只有 A 的 、B 的 ,最大遗憾分别为三和四,选择 A。加入 C 的 后,两状态基准变为 ,A、B、C 的最大遗憾分别为八、五、八,选择变成 B,虽然新方案 C 本身没有被选择。原因是 C 提高了第一状态的事后基准。这个现象说明评估时须说明候选集,也不能把任意拼出的情景和备选项当成中性的背景。[1]
若方案 B 在每个状态的收益都不低于 A,则 对所有 s 成立,A 不可能在最大遗憾上严格优于 B;两者仍可能因最大项相同而并列。
精确计算纯方案
以下 Python 函数输入一个非空矩形收益表,元素为整数或 Fraction,返回遗憾表、每行最大遗憾以及全部最优行编号。不改写输入,采用有理数运算避免教学算例中的浮点比较误差;有小数时可先明确转换为 Fraction("0.1") 等精确值。
from fractions import Fraction
def minimax_regret(payoffs):
rows = [tuple(row) for row in payoffs]
if not rows or not rows[0]:
raise ValueError("payoff table must be nonempty")
states = len(rows[0])
if not all(len(row) == states for row in rows):
raise ValueError("payoff table must be rectangular")
if not all(type(x) is int or isinstance(x, Fraction)
for row in rows for x in row):
raise ValueError("use integer or Fraction payoffs")
u = [tuple(Fraction(x) for x in row) for row in rows]
best = [max(row[s] for row in u) for s in range(states)]
regret = [tuple(best[s] - row[s] for s in range(states))
for row in u]
worst = [max(row) for row in regret]
optimum = min(worst)
choices = [i for i, value in enumerate(worst) if value == optimum]
return regret, worst, choices
table = [(8, 7, 1), (4, 6, 6), (0, 4, 10)]
regret, worst, choices = minimax_regret(table)
print(regret)
print(worst, choices)
返回的最优编号为一,即从零编号的 B 行。算法先逐列求基准,再逐行求最大差,最后比较各行最大值,与定义逐步对应。若有 m 个方案、k 种状态,按有理数运算次数计,时间为 ,因保留表格而使用 额外空间;位运算成本还与数值长度有关。一个方案时所有遗憾为零;一个状态时,这一准则恰好选择该状态下收益最大的方案。
若输入的是越小越好的损失 ,应使用 ,也可先把收益设为 。直接对损失使用“列最大值减当前值”,会把比较方向颠倒。
一次分析应同时给出状态集合、收益或损失的单位、逐状态基准和最大遗憾。若未来能持续观察并调整选择,多臂老虎机问题等学习模型会进一步计算信息的价值;本篇准则本身没有描述这种学习过程。
参考文献
- ↑ 1.0 1.1 1.2 Edward Anderson、Stan Zachary,2022,Minimax decision rules for planning under uncertainty,§1—3,arXiv:2203.01420,关于遗憾定义、与最坏成本准则的区别,以及对状态和方案集合的敏感性。