战棋游戏中的简单策略方法:基于群表示论的思想

20 篇文章 11 订阅
本文探讨了一种将群表示论应用于战棋游戏策略算法的方法。通过建立棋盘操作与群的对应关系,利用群的性质简化计算,并通过群同态描述战斗结果。作者提出了一种弱群表示,用于描述棋局状态变化,并通过计算群元素的同态值寻找最优策略。算法中包含了剪枝策略以提高效率,整个过程类似深度优先搜索。
摘要由CSDN通过智能技术生成

战棋游戏中的简单策略方法:基于群表示论的思想

最近在开发一款自娱自乐的基于上世纪30年代历史背景的战棋游戏,需要为其设计一个策略算法,我一开始就想可能用比较传统的动态规划,恰逢本周周一周二中科院数学所的田野老师来我们组讲授Galois Representation,对我有一定启发,忽然发现这个算法亦可用群表示论的形式来表述,其直观性会更良好,计算起来可能更加方便;


背景

考虑一个静态棋盘,我们把战争过程简化为以军事单位为棋子的对弈,称之为战棋游戏(图片是EasyTech的欧陆战争2);

在这里插入图片描述

那么假设AI是一位指挥官,它需要充分考虑己方军事单位的状态、战斗力、行动能力和敌手的可能行为来决策行动;


群表示及其在战棋策略中的应用

下面先回顾一些基本概念:

定义1.1 一个群是一个集合 G G G带有一个"二元运算",即一个映射 G × G → G G \times G \rightarrow G G×GG,称为乘法 ( a , b ) ∈ G × G (a,b) \in G \times G (a,b)G×G在此映射下的像记作 a ⋅ b a \cdot b ab a b ab ab,称为 a a a b b b的积,满足条件:
i) ( a b ) c = a ( b c ) (ab)c=a(bc) (ab)c=a(bc)对任意 a , b , c ∈ G a,b,c\in G a,b,cG成立(称为"乘法结合律");
ii) 存在(唯一的) e = e G ∈ G e=e_{G}\in G e=eGG使得 a e = e a = a ae=ea=a ae=ea=a对任意 a ∈ G a\in G aG成立( e e e称作单位元);
iii) 对任意 a ∈ G a\in G aG,存在(唯一的) b ∈ G b\in G bG使得 a b = b a = e ab=ba=e ab=ba=e( b b b称作 a a a的逆元,记 b = a − 1 b=a^{-1} b=a1);

在这里插入图片描述
(各种各样的群,群就是一组操作的集合以及它们的操作对象构成的一个代数结构!!!)

两个群之间的映射如果和群运算相容,则称为同态;详细说:

定义1.2 设 G , G ′ G,G' G,G为群.一个映射 f : G → G ′ f:G\rightarrow G' f:GG称作同态,如果 f ( a b ) = f ( a ) f ( b ) f(ab)=f(a)f(b) f(ab)=f(a)f(b) ∀ a , b ∈ G \forall a,b \in G a,bG成立;

群是个抽象的结构,我们当然自然地希望能够在一个方便熟悉的计算工具上等价地计算、研究它,这就是群表示的motivation;

定义1.3 设 G G G是任一群, V V V是域 F F F上的向量空间.如果存在群同态 ρ : G → GL ( V ) , \rho:G \rightarrow \text{GL}(V), ρ:GGL(V),其中 GL ( V ) \text{GL}(V) GL(V)是一般线性群,即 V V V上全体可逆线性变换的乘法群,则称 ( V , ρ ) (V,\rho) (V,ρ) G G G的一个 F F F-线性表示,称为 F F F-表示 V V V F F F-表示 ρ \rho ρ.

V V V是有限维的,将 dim ⁡ F V \operatorname{dim}_{F}V dimFV称为该表示的维数或次数,记为 deg ⁡ ρ \operatorname{deg}\rho degρ;将 V V V称为表示空间.

Ker ⁡ ρ : = { g ∈ G ∣ ρ ( g ) = 1 V } \operatorname{Ker} \rho:=\left\{g \in G \mid \rho(g)=1_{V}\right\} Kerρ:={gGρ(g)=1V},称为表示 ρ \rho ρ的核.若Ker ρ = { 1 } \rho=\{1\} ρ={1},则称 ρ \rho ρ是忠实表示.

那么回到战棋策略的问题,我们现在考虑一种"弱"一些的表示,也就是不太满足群表示中一定用矩阵表示的要求,当然,我们先从最基本的下棋操作开始,引入群工具:

假设当前己方所处的棋盘位置坐标为 p s = ( x , y ) p_s=(x,y) ps=(x,y),那么有两个基本操作:

m ( Δ p ) , a ( Δ p ) m(\Delta p),a(\Delta p) m(Δp),a(Δp)

分别代表向 Δ p \Delta p Δp方向移动或者向 Δ p \Delta p Δp方向攻击敌手,可见这两种(但是 Δ p \Delta p Δp有多种选择)基本操作是生成元:那么己方的行动空间就是有限生成群:

G s = < m ( Δ p ) , a ( Δ p ) > G_s = <m(\Delta p),a(\Delta p)> Gs=<m(Δp),a(Δp)>

注意己方的状态和战斗力参数组合 θ s = ( H s , m s , A s , D s ) \theta_s=(H_s,m_s,A_s,D_s) θs=(Hs,ms,As,Ds)也就是(己方生命值,己方行动力,己方攻击力,己方防御力),我们有模拟战斗过程的计算函数 f ( ⋅ ) f(\cdot) f()计算己方和敌手的伤亡:

Δ H s = f ( A e , D s , H s , H e ) Δ H e = f ( A s , D e , H s , H e ) \begin{array}{ll} \Delta H_s=f(A_e,D_s,H_s,H_e) \\ \Delta H_e=f(A_s,D_e,H_s,H_e) \end{array} ΔHs=f(Ae,Ds,Hs,He)ΔHe=f(As,De,Hs,He)

也就是战斗结果和己方的参数和敌手参数均有关,我们不妨写作:

Δ H s , Δ H e = F ( θ s , θ e ) \Delta H_s,\Delta H_e = F(\theta_s,\theta_e) ΔHs,ΔHe=F(θs,θe)

下面考虑群同态: ρ s : G s → π \rho_s:G_s \rightarrow \pi ρs:Gsπ(稍后证明其它是个同态)
ρ ( g s ) = Δ H s − Δ H e \rho(g_s) = \Delta H_s-\Delta H_e ρ(gs)=ΔHsΔHe,也就是计算己方决策 g s g_s gs带来的双方战斗伤亡之差,很显然己方的目标是使得 ρ ( g s ) \rho(g_s) ρ(gs)尽可能大(注意 ∀ Δ H ≤ 0 \forall \Delta H \le0 ΔH0);

ρ s : G s → π \rho_s:G_s \rightarrow \pi ρs:Gsπ显然满足对 ∀ g 1 , g 2 ∈ G s \forall g_1,g_2 \in G_s g1,g2Gs满足:

ρ s ( g 1 g 2 ) = ρ s ( g 1 ) + ρ s ( g 2 ) \rho_s(g_1g_2)=\rho_s(g_1)+\rho_s(g_2) ρs(g1g2)=ρs(g1)+ρs(g2)
(比如, ρ s ( m ( Δ p 1 ) a ( Δ p 2 ) ) = ρ s ( m ( Δ p 1 ) ) + ρ s ( a ( Δ p 2 ) ) \rho_s(m(\Delta p_1)a(\Delta p_2))=\rho_s(m(\Delta p_1))+\rho_s(a(\Delta p_2)) ρs(m(Δp1)a(Δp2))=ρs(m(Δp1))+ρs(a(Δp2)),这是因为两步之间是独立的;)

最优策略

好的,现在就是最重要的事情,如何高效地找到最优策略???
我们把AI的决策分为3步:

i) 计算己方行动的决策空间;
ii) 计算己方的每一个决策下敌手的决策子空间;
iii) 选取使得 Δ H s − Δ H e \Delta H_s-\Delta H_e ΔHsΔHe最大化的策略;

在这里插入图片描述

现在假设己方已经选取了决策 g s g_s gs,那么敌手同样有一个群表示 ρ e : G e → π \rho_e:G_e \rightarrow \pi ρe:Geπ,那么可以计算其决策子空间: ρ e ( g e ∣ g s ) \rho_e(g_e|g_s) ρe(gegs)(也就是给定己方决策 g s g_s gs后敌手的可能决策及其伤亡情形);

但是敌手也有多种决策,我们只能假设其选取每一种决策是等概率事件,最终的伤亡情形只能取一个期望:

E [ ρ e ( g e ∣ g s ) ] = ∑ g e ∈ G e P ( g e ∣ g s ) ρ e ( g e ∣ g s ) \mathbb{E} [\rho_e(g_e|g_s)]= \sum_{g_e \in G_e} \mathbb{P}(g_e|g_s)\rho_e(g_e|g_s) E[ρe(gegs)]=geGeP(gegs)ρe(gegs)

最终的目标函数就是(我们只需要选取使得下式取最大值的策略即可):

max ⁡ g s T ( g s ) = max ⁡ g s ρ s ( g s ) + E [ ρ e ( g e ∣ g s ) ] \max_{g_s}T(g_s) = \max_{g_s} \rho_s(g_s) + \mathbb{E} [\rho_e(g_e|g_s)] gsmaxT(gs)=gsmaxρs(gs)+E[ρe(gegs)]

剪枝策略

剪枝策略,属于算法优化范畴;通常应用在DFS和BFS搜索算法中;剪枝策略就是寻找过滤条件,提前减少不必要的搜索路径;

在这里插入图片描述
如图所示,假设我们在计算 T ( g s ) T(g_s) T(gs)的过程中,一开始就记录一个最小的目标函数值 T bad ( g s ) T_{\text{bad}}(g_s) Tbad(gs)(遇到更小则更新,易见在如下策略中,更新只会发生在完全计算到叶子节点);那么如果中间过程有 T ′ < T bad ( g s ) T'<T_{\text{bad}}(g_s) T<Tbad(gs),那么该分支对应的策略可以立即抛弃不必再计算;

后记

事实上我们可以发现每一步计算都不会出现重复计算某个 ρ s ( g s ) \rho_s(g_s) ρs(gs)的情形,再加上剪枝策略的应用,实在很像深度优先搜索,其实你可以理解为群表示语言下的BFS算法;但是我会继续改进这个算法,我相信代数语言下的算法还有更多威力尚未发掘;

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值