玩扫雷的数学解法
凸优化
1. 定义
该部分的定义是为了将扫雷的已知情况数据化、符号化,方便将其抽象成一个数学问题。
- m=扫雷区域高度。
- n=扫雷区域宽度。
- 第i∈{0,1,…,m−1}行,第j∈{0,1,…,n−1}列的格子称为第i×c+j号格子。
- 扫雷区域状态:b=(b0,b1,…,bn)T,其中bi表示第i号格子周围地雷的个数。
- 扫雷解向量:x=(x0,x1,…,xn)T,其中xi∈[0,1]表示第i号格子有雷的概率。
- 格子相邻关系R,iRj表示i号格子与第j号格子相邻。写成关系矩阵的形式Amn×mn=[aij],
aij={10iRielse
2. 算法
Ax=b去掉bi的值未知的行,去掉xi=0的列,构成线性约束:
A′x=b′
mins.t.12||(x−121)||2A′x=b′x≥0x≤1
3. 推导过程
4. 改进
在加入一个等式约束条件:
1Tx=总累数