电子CCG卡牌模型探讨:用对局模型寻找出牌“最优解”
卡牌模型可以说是卡牌类游戏里一个经久不衰的话题,尤其是玩家中又诞生了“模型有用论”和“模型无用论”2种观点,彼此之间更是互相说服不了对方。
我个人算是半个“模型无用论”的支持者,为什么说是半个呢?因为其实我并不是觉得模型本身没有用,而是认为绝大多数讨论卡牌模型的话题中(尤其是以玩家为主的环境中)所讨论的“模型”本身的概念就出现了偏差,真正的卡牌模型远比玩家嘴里的卡牌模型更加的深入和复杂,绝大多数讨论场合下所提出的“大一统”模型是并不存在的,因此围绕这个不存在的模型进行讨论显然是缘木求鱼。
(本文中涉及到部分炉石传说和昆特牌中的游戏规则)
1 什么是卡牌模型
“模型”其实是现在很多场合下被用坏了的一个词,不说别的,各种航模比赛里的飞机模型,机器学习技术里的识别模型,安全对抗里的防御模型,这些都是完全不同的概念。绝大多数人也并不关心到底“模型”一词到底是什么意思,只要能让自己的表述更加高大上(常见于各种科研项目),或者表达出自己也说不清楚的意思(那种“你懂的”的感觉)就行了。
虽然别的“模型”咱不好说,但卡牌模型是可以有一个比较明确的定义的,那就是“一套能够计算卡牌价值的公式或方法”。具体而言,输入卡牌的相关信息,输出能够体现卡牌价值的数字,这就是一个模型了。
对于“输出能够体现卡牌价值的数字”,相信绝大多数卡牌游戏玩家是没有什么异议的,因为大家平时争论不休的就是卡牌价值的问题,所谓“超模”就是指卡牌价值超过了其应该有的价值,反之亦然。
真正的问题在于“输入卡牌的相关信息”,到底输入什么信息?
模型无用论的核心观点就是,“要计算卡牌的价值,必须考虑游戏中的具体情况”,输入信息中应当包含诸如“当前场面”“对手状态”“自己状态”等等与具体对局状态相关的信息,再不济也得包含诸如“当前主流卡组”“当前热门卡牌”等等与游戏环境相关的数据,抛开这些动态变化的信息,只考虑卡牌牌面信息(费用、攻击力、血量)去计算卡牌价值是没有意义的。
反过来,模型有用论则认为,“即使不考虑那些动态变化的信息,计算出的卡牌价值也是能说明问题的”。
谁对谁错?还是都有道理?
其实问题的关键在于,卡牌游戏中的模型并不只有1个。
正如之前2篇文章所说,电子CCG有收集、构筑、对局3个步骤,实际上在这3个步骤中所使用到的“模型”是有巨大差距的,想提出一个“大一统模型”必然会碰壁,因为3个步骤中使用的模型本身就不是为了同一个目的而存在的:
对局过程中所使用的模型是为了是计算出一个最好的出牌、行动方式,也就是俗称的“最优解”;
构筑过程中所使用的模型是为了评估卡牌强度,使得构建出的套牌强度尽量高
收集过程中所使用的模型是为了体现玩家获得的卡牌与付出的金钱、金币、时间等资源之间的价值关系
大部分玩家之间的讨论将对局模型和构筑模型进行了融合,同时又抛弃了收集模型(也就是“稀有度≠强度”),因此最后的模型自然有些“四不像”的感觉,最长见的情况就是“如果xxx就赚了x费,如果xxx则亏了x费”或者“必须xxx才能超模,这个难度比较大,因此只能打x分”
当然可能对于玩家来说,大家只是希望来一场卡牌之间的battle,2张卡比个高低或者评价一下卡牌强度,因此只要能揉出一个模型,给卡牌定个性打个分就OK了,至于到底定性打分的过程是不是系统、科学、合理,定性打分的结果到底多大的“实用价值”,无所谓了,就和很多游戏、动漫、电影里喜欢弄出战斗力数值或者lv评级一样。
2 对局中的模型
2.1是什么
对局中使用的模型其实不能说是“卡牌模型”,而是“对局模型”,其存在的目的是让玩家对自己的出牌策略进行评估,计算得到当前场面下能够获得最大利益的出牌方式,也就是所谓的最优解。
实际上绝大多数玩家脑中是有这么一个“模型”存在的,只是平时并没有将它非常正式、规范地进行归纳
比如同样是造成3点伤害的法术,放给一个9/3(9攻3血的随从)肯定比放给一个3/3价值更大,而同样是冻结(下个回合无法行动),冻结一个8攻的随从肯定比冻结一个2攻的随从更划算。
这些大多数玩家心中的“游戏常识”其实就是一个评估出牌价值的模型,玩家会在出牌的时候不自觉地计算不同出牌方法最后的“收益”或者“价值”,选择自己心中觉得价值更高的那个思路进行游戏。
当然可能上述2个例子太过简单了,下面举一个稍微复杂一点的例子:
对方场面上有一个1/1,而我方是一个2/1,轮到我方回合,我方出了一个3/3,后面是否要用2/1和对方的1/1互换呢?还是用2/1打脸(攻击敌方英雄)
其实这就是一个评估【己方2/1+3/3+2点打脸伤害,对方1/1】和【己方3/3】哪一种情况对己方来讲收益更高、价值更大的问题。再简化一点,就是比较【己方2/1+2点打脸伤害,对方1/1】的整体价值是大于0还是小于0
如果是一个刚接触游戏的新手,肯定会觉得不应该互换,根据“游戏常识”,【己方2/1,对方1/1】的价值肯定是大于0的,毕竟2/1肯定比1/1强,再加上2点打脸伤害,整体更是应该大于0了。
但是如果是一个有一点游戏经验的玩家,可能他会分析,对方下个回合可能会出一个“2/2,使一个友方单位攻击力+2”,这样就对方的1/1就变成了3/1,就可以换掉我的3/3,岂不是很亏?明明如果换了就能够在下个回合获得【己方3/3,对方2/2】,不换就是【己方2/1,对方2/2】,这中间的价值的差距2点打脸伤害是弥补不了的。
但是上述分析还停留在“感性”、“感觉”和“经验”的层面,显得十分不客观、精确,那么是否存在一个真正系统、严谨、精确的对局模型能够很好评估游戏对局中不同出牌方法的价值呢?
我的答案是:有,但不可能覆盖游戏对局中的所有元素,也不可能直接用于指导玩家如何出牌,尤其是对于机制复杂的游戏机制和博弈过程而言。
首先可以肯定的是,部分CCG是可以有十分客观精确的对局模型的,典型的例子就是昆特牌。
昆特牌由于其特殊的“战力比大小定输赢”的机制,任何一张牌打出后的收益都可以通过战力的增减来进行评估,如果一张牌打出后A相对于B的战力差多了15点,那么这一手出牌的收益就是+15,比如新手金卡杰洛特:
15点战力,朴实无华。
由于昆特牌中双方的手牌数量可以近乎认为是相同的,因此游戏对局的核心就是通过合理地出牌,最大程度地使得自己出牌获得比对方更多的战力,如果我打出一张牌获得了15的战力,而对方打出一张牌只获得了10的战力,那么我就赚了5点战力。
围绕这一核心思想,再充分利用不同卡牌之间的效果联动,就形成了昆特牌的对局模型的关键:评估一张牌的战力价值。
例如“间谍帝国”套牌中的2张卡牌:
其初始都只有6点战力,相比于其他战力12的铜卡而言是“亏”了6点战力的,但由于其可以和“间谍单位”互动,每有一个间谍单位+2战力或对敌方造成2点伤害(在昆特牌中造成伤害等同于战力-2),因此如果能成功触发效果3次,这2张卡就“达标”了,如果超过3次那就赚了,这在“长局”(出牌回合较多的局)中是很容易达成的。
自然,对方也会围绕这个点展开对抗,阻碍你完成这种互动,例如直接放弃跟牌阻止你通过后续出牌互动来赚战力将长局变短局,例如使用伤害牌直接解掉近卫军等等。
可以说,由于昆特牌的游戏机制特点,游戏的对局过程和“对局模型”或者说“战力模型”是密不可分的,一张牌打出后是否达标、赚了多少?亏了多少?都是玩家一直关注的问题。而玩家的对局目标也正是充分利用自己的手牌,让自己获得更多的战力,让对方获得更少的战力。
但是即使是如此适合套用对局模型的游戏,也依然存在一些评价起来较为复杂的情形。
例如落雷术:
9点伤害,朴实无华,和其他12点战力的铜卡比显然亏3点战力,但是如果能够除去一个目前低战力但有增长潜力的敌人(例如前文中的近卫军),那就有可能赚了。
那么如果用落雷术打死一个近卫军铁卫,到底是赚了还是亏了呢?
答案显然是——不好说
如果对方上铁卫时没触发特效(造成2点伤害),那么一卡换一卡,不赚不亏
如果对方已经触发过特效,那么一卡换一卡,对方还造成过伤害,亏
如果不处理对方这张卡,可能反复触发特效获得更大的战力差,那么这次击杀阻止了对方赚战力差,赚
如果我现在把落雷术用了导致没了解牌,被对方用后续更有威胁的卡赚了更多的战力差,亏
2.2 能干什么
因此我们发现一个问题,一张卡打出后的价值,其实是和很多因素挂钩的,其中某些因素是确定的,例如当前的对局场面;某些因素是未知的,例如对方的手牌、后续策略等等。如果真的将目光拉长到一整局游戏中,想计算一次出牌操作的最终收益,那必须等到游戏结束才知道收益到底是多少,是“赚了”还是“亏了”。
显然这种“事后诸葛亮”的事情对于进行中的游戏是没啥意义的,就像前面所说,对局模型是的目标是让玩家计算不同出牌策略之间的收益差,从而选取收益较高的一种出牌策略。
所以,对局模型可以评估“当下的价值”,而难以评估“将来的价值”。
换句话说,在对局模型中,一些在当下实打实的效果的价值是可以计算的,例如造成了X点伤害、击杀了一个x/x的怪物等等,但一些与后续出牌相关、产生联动的效果,只能等到后续效果真正产生时再进行计算,其收益应当被归到后续出牌的过程中。
还是以“间谍帝国”为例,在场上没有间谍时打出“近卫军铁卫”只有6战力的收益,但后续每打出一个间谍都能够额外获得2战力的收益,这2战力应该被计算在打出间谍的回合,用来评估打出间谍这一手出牌的收益,从而进行抉择是打出间谍牌,还是打别的牌。
如果和其他白板的铜色卡对比,打出6战力的近卫军铁卫这一回合我就实打实地亏了6点战力,这亏的部分必须通过后续打出间谍牌的回合赚回来。而对方则需要考虑如何阻止我赚回这些亏掉的战力,从而展开博弈。
同样回到之前要不要用2/1换1/1的的例子中,假设我们已经建立了一个对局模型F,能够评估不同攻防随从、打脸伤害之间的价值,那么用2/1换1/1的打法获得的价值为【-F(2/1)+F(1/1)+F(3/3)】,而打脸的打法价值为【F(3/3)+F(2脸伤)】,前者显然大于后者。
但如果选择前者,而对方下回合使用2/2加攻击力的随从完成了以小换(BO)大,那么对方将会获得【-F(1/1)+F(3/3)+F(2/2)】的巨大收益,而选择后者虽然没有获得更高的价值,看上去“亏”了,但如果能逼迫对方裸上2/2使他“亏”得更多,那还是划算的,因为总体计算下来我获得的价值是高于他的,虽然我俩都没有达到“平均水平”。
但也有可能对方上3/3获得正常价值,那相比而言他就获得了比我更高的价值,我就真的“亏”了。
通过上述分析可以看出,对局模型能够帮助我们认识“当下”不同出牌策略之间的收益高低关系,但“后续”收益整体而言到底是赚是亏是无法评判了,需要玩家根据自身当前对局的分析和估计(例如对方是否有加攻击力的2/2随从)来做出最终的选择。
而卡牌游戏的对局,正是对战的双方围绕自己如何获得更高的收益、阻止对方获得更高的收益展开博弈的过程。
例如一方手上有AOE法术时故意卖脸,意图在当下获得较低的收益,换取在后续回合获得超高的收益,从而在整体上超过对方的收益。而对方则在识破这一意图后通过buff或者其他手段阻止其通过AOE获得超高的收益,从而稳固自己在收益上的领先。
2.3 怎么来的
但这里就引入一个更为重要的问题了——到底如何获得这个对局模型F呢?如何通过数值化的方式评估1/1、1/2、2/2、3/3、打脸伤害等等之间的价值呢?
只能说:
1.模型构建方式、构建结果因游戏而异
2.模型并不能覆盖全部游戏元素
3.模型并不一定绝对准确
首先说第一条——模型构建方式、构建结果因游戏而异
既然对局模型是为了评估不同出牌策略的收益,是玩家做出决策的依据,那么评估模型一定适合游戏的“获胜方式”紧密相关的。
例如昆特牌里对局胜利的条件是己方战力总和高于对方,而每一张牌都是和战力紧密挂钩的,因此几乎所有卡牌的效果都可以直接与战力产生关联,而且其关联效果非常直白明了,赚取了多少战力差一目了然。
炉石传说的胜利条件大多数情况下是“将对方英雄血量扣至0或以下”,但炉石传说中大多数卡牌并不直接和英雄血量产生互动,而是需要经过攻击来进行,而且如果随从不被消灭,就可以反复攻击。
显然这2个游戏的对局模型会有很大的差异,这种差异不仅仅体现在不同随从的价值不同,更体现在炉石传说的模型需要有一个将随从攻击/血量转换到和游戏胜利条件直接相关的“英雄血量”上的方式,例如一些炉石模型中会默认随从下回合一定会被解。而昆特牌则没有这个必要,几乎所有卡牌的效果都直接和战力挂钩,不需要中间的转换过程,因此昆特牌的模型会显得更加“简单、直观”。
而第二条——模型并不能覆盖全部游戏元素
复杂的卡牌游戏中的元素也是很复杂和丰富的,一些特殊的元素或者效果并不一定能很好地用“数值”的形式进行评估,更不提数值化评估其对游戏目标的贡献了。
例如炉石传说里骑士DK技能招的2/2,集齐4个直接获胜,但只要集不齐和普通2/2就没有区别,那前3个2/2如何计算其价值呢?
再例如炉石和影之诗里都有的“再来一回合”的效果,这种打破游戏本身规则的效果同样也会对已经构建好的模型造成巨大的冲击
最后一条——模型并不一定绝对准确
纳尼?搞了半天不一定准确你还说个P啊!
但是不幸的是,这一点确实如此,因为说到底卡牌模型(包括对局模型、构筑模型和收集模型)的构建过程是很不科学的
科学研究中的模型总结都要遵循这样的步骤:
1.根据观察到的群体A总结规律,形成模型X
2.用非A的群体去测试X是否适用,如果不适用,不断修正,直到目前能观测到的所有现象都可以通过模型X取描述和解释
3.当新的观测结果出现时,判断X是否有误,如果有误,推翻或继续修正
而我们看看炉石模型在进行这些步骤里,“模型是否适用”是一项无法判断的行为,因为当一个随从的放入模型里超出预期或低于预期时,我们就用“这张卡超模了”“这张卡太弱了”来解释。
你觉得这是一项很有说服力的说明方法么?
《炉石传说》数学模型的一切?
https://www.zhihu.com/question/50773783
卡牌游戏的模型构建过程中,对模型的“验证”和“测试”是难以进行的,且不说拿不到真实后台数据的玩家群体,即使是官方设计师,也不能直接通过后台数据来评估模型是否正确,中间还是需要一个人工分析和理解的过程。
例如从后台数据中发现,大多数玩家在某一个同样的场合下选择了从模型看来价值更低的一种打法,那么是否可以认为模型对这一打法的评估有错?并不见得,可能这一手就是得故意亏一点,好在后来赚一发大的。
个人认为,以后机器学习技术在游戏领域得到广泛使用之后,可能会出现较为科学的模型构建方法,因为AI的出牌策略正是取决于不同决策之间的“价值比较”,选取价值较高的一种打法,因此其天生就需要一个“靠谱”的对局模型。
虽然现在AI,应该说是脚本,的出牌策略基本是写死的决策树,但未来通过强化学习(AI左右互搏)构建一个能够评估不同场面、不同出牌策略的模型,既是构建游戏AI的必要过程,其可信度也要比人为拍大腿构建出的模型更高。
2.4有什么用
既然前面说了对局模型既复杂又不全面甚至根本不准确,那这模型有P用啊?
其实还是有用的,主要体现在2方面
一方面对对局模型的学习正是玩家逐渐掌握游戏基本玩法的过程,实际上每个玩家从新手到老手的成长过程就是自己在脑中训练出一个对局模型的过程。老手比新手厉害的地方就在于能够更加准确地评估不同出牌方式之间的价值差异。
因此虽然对局模型本身对于玩家来说并不是一个可以“照着模型算,跟着结果出牌”的教科书,但学习模型的过程能够更好地帮助玩家认识游戏的基本玩法,对决策判断的大方向有一个基本的认识。
不过一定要注意的一点是,任何一个复杂的卡牌游戏,即使能建立起非常精确可信的对局模型,其模型的复杂程度都绝对不适合玩家作为游戏过程中的“指导”,即你不要指望先建立一个模型,然后按照这个模型去指导自己在游戏里做出抉择从而自己当甩手掌柜,因为这个模型所包含的输入条件太多太复杂了,与其将这一大堆条件扔到模型里去算,不如自己根据自己脑中模糊的经验模型去做决定。
而如果希望将这个模型简化到“可实用”的程度,那么其准确程度又会大打折扣,想靠它打高端局是不现实的了。
另一方面则是对游戏设计者而言,设计一个卡牌游戏绝对不是一拍大腿的过程,想要保证自己设计的游戏过程有趣、好玩,那么建立一个良好的对局模型就是其基础,根据模型逐步设计完善整个游戏、补充不同的卡牌效果,才能保证整个游戏不会随着卡牌数量的增多而崩溃。
举个例子,我们假设现在炉石里只有2/1和1/2这2种随从,其价值是否相等呢?
答案是不等,无论是先手还是后手,下2/1都比1/2有更大的价值,因为这2种随从在“随从交换”上具有相同的价值,都只能1换1,但在“打脸”上2/1的价值更大,因此如果在设计时要么给2/1加上负面效果,要么给1/2加上正面效果。
实际上炉石里也正是如此,一些炉石模型里提出身材=费用*2+1,或者费用=sqrt(攻击*血量)-1的理论,但是实际上我们会发现,攻击和血量并不是可以互相互换的属性,炉石里有大量1/3的随从,甚至大部分还带有正面效果,但一个3/1的随从都没有,唯一的一个3/1“尘魔”其负面效果爆炸成为了板凳卡。
当然上述纯属我脑补,炉石的对局模型远比上述复杂,设计师到底有没有使用对局模型来指导卡牌设计我们外人也说不清。但是我认为,一个成熟、复杂、庞大的卡牌游戏,其背后必定存在一套设计逻辑和意图,虽然不一定准确,更可能是动态变化的,但是这种根据模型进行推敲、设计,从而保证全局不崩的思路是重要且有效的。
4 结语
最近些毕业论文和找工作也挺忙的,写得断断续续的,有时候都忘了前面的思路了。
本来想直接写完3个模型的,结果没想到光对局模型就写了这么多,于是就觉得还是拆开写得了……
后面2个模型其实和对局模型有一定的相似或者关联,希望能写得快点吧。