接上篇,我们接着聊。
分数系统的打分公式,是根据情况自己定义的,但也有一些方式来帮助构建出比较合理的公式来,公式的推导就是一个函数的拟合过程,我们可以先取几个样点,然后试着找到一条函数曲线,尽可能的去使样点落在我们的这条函数曲线上。在中学的时候的实验课上,大家应该都做过这种事情。在AI中,我们的打分公式,一般不会很复杂,可能是简单的直线,或者分段的折线,有时也会是二次,或三次的曲线。有了这样一个基本曲线,接着再用测试样例去修正,一般就可以得到一个比较符合需求的打分公式了。
在分数系统中,如果有多个因素需要考量,比如我们上个例子中的EC和HP,这就引出了分数如何组合的问题。就像我们先前对Retreat和Shoot的打分方式。常用的做法是,针对每个因素单独引入打分公式,并且归到[min, max]的分数区间中,然后再对所有的得分组合后,得到一个最终得分。对每个因素单独打分的好处是,我们可以跟专注于单个因素的影响,方便我们构建打分公式,并且可以方便的移除和添加新的因素,而且也能更好的复用我们的打分公式。分数的组合一般可以有两种:
1. 加权平均,s = (k1*s1 + k2 * s2 + … + kn * sn)/(k1 + k2 + … + kn)
2. 因子连乘,s = s1 * s2 * … * sn ( 0 <= si <= 1.0 )
这两种方式有各自的适用范围,第一种方式,我们除了对打分公式要细心调整外,还需要对加权因子加以调整。第二种方式必须保证每个因子被归到[0,1]之间,因为用到了乘法的原因,所以体现了一种并且的关系,一旦有一个因子为0,则整个分数就会是0。
分数系统是一种模糊逻辑,他不像基于规则的系统那样逻辑非常清楚,所以,在分数系统中,有时会出现一种“意外点”,但对AI来说,出现一些意外点,也不是不可接受,有时这样也更显得AI很真实,AI也会犯错的嘛。一旦使用了分数系统,debug的过程就变成了不断调整公式和数值的过程。如果设计的好的话,AI程序员可以提供出一套调节分数的接口,这样design也可以参与其中了。
当然,有时分数系统是会和规则系统联合使用的,用来处理一些意外情况。我常觉得,在AI中,规则系统就是用来修bug的。
好了,就聊到这儿,欢迎大家留言
相关:
—> 基于分数系统(Scoring System)的AI设计(1)
————————————————————————
作者:Finney
Blog:AI分享站(http://www.aisharing.com/)
Email:finneytang@gmail.com
本文欢迎转载和引用,请保留本说明并注明出处
————————————————————————
如果想把这个方法运营到篮球游戏的AI决策上,博主有什么好建议吗,感觉难点还挺多的。
如果没帧都这样计算一次,是不是计算量太大了
打分逻辑主要运用在决策部分,决策部分的更新频率不需要很高,比如降到一秒5~10次,另外,仅为持球队员做打分逻辑是一个可选的方案,其余队员采用二元的基于规则的逻辑就行了
博主觉得这样扩展这个模型是不是更好。
为各个行为建立一个“转移模型”,即一个行为实施后游戏世界或特征会改变成什么样子。
评分函数直接对世界状态打分而不是对行为(评分函数不知道这个状态怎么来的,只是知道它更喜欢这个状态)
ai遍历一遍或启发式搜索一下行为空间,生成对应的新世界模型,然后打分。这样就可以将行为目标解耦而且更有扩展性了
可以啊,只是对于世界状态打分需要更好的抽象打分模型,还有一个担心就是,在实际开发中,世界状态的变化太快(可能别人也在往里面堆东西),导致评分不准,这个需要极强的项目组员的贯彻力和对系统的理解力,对于行为打分就相对独立一点