永夜传说吧 关注:29贴子:1,685
  • 12回复贴,共1

利用程序模拟研究星杯前期场况趋势

只看楼主收藏回复

1L


1楼2015-10-20 22:57回复
    最近闲来无事,自己写了一个程序,并设计了简单AI,来模拟星杯前期的局面状况。
    先说说为什么要干这个事吧。。
    星杯的前期其实是比较简单的,因为大部分角色在没提炼前其实和白板差不多,即便一个角色前期手里有功能牌能用,通常等队友提炼完一起爆发效率也更高。所以星杯的前期其实和白板乱打差不多,比的是获取星石的速度。
    然而由于攻击的复杂性,我们不好直接回答类似于:“星杯第一回合两方能打出多少星石”这种问题。即便用纸笔去算概率,也不好下手。这个时候只能依靠程序帮忙了。
    这里我通过编写一套AI,进行大量游戏局数的模拟,可以得出一些比较可信的结论。


    2楼2015-10-20 23:03
    回复
      2025-08-04 19:46:20
      广告
      不感兴趣
      开通SVIP免广告
      环境设定
      谈AI前先谈环境设定。由于法术牌功能各异,比较复杂,而且前期双方主要以攻击打石为准,放法术的情况不多(圣盾其实很有用,但是限于AI的复杂度问题,我们这里舍弃了)。所以在我们这里,手牌只有普通攻击牌,暗灭,圣光和其它法术牌。在使用其它法术牌时,只会弃掉这张法术牌而不会触发其它任何事,相当于空放。
      对于前期,我们可以给出一个价值理论:宝石=2价值,水晶=1价值,士气=1价值。我们的这套AI,在不那么复杂的前提下,主要遵循这个价值体系来。


      3楼2015-10-20 23:11
      回复
        AI
        接着谈AI的设计。角色主动行动只能购买、攻击和空放法术。由于购买直接+3价值,所以我们规定角色能购买时比购买。
        如果不能购买,那么该如何攻击呢?打对方空门肯定是首选,大概率掉宝石+2价值。由于打高牌有空门对手还有可能获得士气加成,故在能打空门的时候,谁牌多打谁。
        反之,如果无法攻击空门,那我们就尽可能在不打队友空门系的同时,用自己最多的那一系砍。并且攻击手牌最少的对手,以增大获得星石的几率。
        最次的选择就是空放法术。卡法也没办法。
        当然4光是可以声明无法行动的。
        顺便一提我们不考虑战绩区的上限,也不考虑合杯。


        4楼2015-10-20 23:16
        回复
          AI 2
          接着说应战。由于被打中要掉星石,我们规定能应战一定应战。先用普通斩,没有的话用暗灭,还没有就圣光,都没有只能无奈被打中。
          应战攻击,如果刚好能打对手的空门就去打空门,谁牌多打谁。如果打不了空门那就去勾牌少的。总之这样做提高价值的期望高。
          最后说说啥叫空门。我们规定被普通系攻击打中则获得该系空门。下次摸牌后,上个空门便取消。一个人只能拥有一个空门。


          5楼2015-10-20 23:18
          回复
            模拟
            好了AI规定好后,我们就可以开始模拟了。
            大家先都起手摸4张牌,红first进行主动行动(绝大多数情况都是砍一刀,起手4法术的概率为0.004)……这个行动平均能有多少收益?
            10000次模拟结果显示:
            己方产宝石率:0.32
            己方产水晶率:0.12
            味方产水晶率:0.25
            己方收益期望-味方收益期望:0.5
            很明显,由于只有主动攻击能打宝石,所以单就一次行动来讲,似乎概率上总是赚的。但如果考虑多个回合呢?
            顺便我们可以看出,起手这第一次攻击最终真正打中某人的概率为0.69,也就是说有0.31概率,这一刀都终结到了圣光上,虽然圣光只占牌堆的11/150 = 0.136。


            6楼2015-10-20 23:29
            收起回复
              多个回合的情况
              座次有10种,我们这里先来考虑大三连,即RRRBBB这种座次。很多人觉得这个座次很极端,所以也很能说明问题。
              我们的游戏只进行一轮(所有角色都行动一次)
              模拟10000次的结果(不用质疑1w次是否充分,事实上,1w次模拟和10w次模拟,各个数值其实只有小数点后第二位有差别。所以1w次模拟的结果是可信的)
              红方获得宝石数:1.43
              红方获得水晶数:0.98
              红方损失士气数:0.42
              蓝方获得宝石数:1.92
              蓝方获得水晶数:1.50
              蓝方损失士气数:0.64
              红方价值-蓝方价值:-1.28
              有意思的结果出来了,我们发现红方获得的价值期望反而低于蓝方!其实这也是可以理解的,因为价值主要来源于购买,由于起手4牌,相比先动,后动能购买的几率更高,并且后动可以利用先动试探出的空门信息。所以蓝方获得价值收益高于红方这并不意外,蓝方相对红方,宝石和水晶的获取期望都多0.5个,相差半次购买的量。
              除了上述计算外,我们还计算了每一次模拟,双方价值差的绝对值,并对此取平均。
              价值差绝对值:3.56
              这是什么意思呢?它告诉我们,即使蓝方比红方有优势,但是实际打下来,红方比蓝方价值更高的可能性其实并不低,双方真正一轮打下来,价值差距通常为3~4之间,即相差2~3个星石的样子。
              当然,这是因为攻击的随机性太强了。蓝方虽说有优势,但是那是建立在庞大对局上说的。真正打下来,红方一边倒的情况并不少。


              7楼2015-10-20 23:44
              回复
                座次的影响?
                不同的座次,对于第一轮,双方的收益有何影响?
                影响还是有的,但是不大。上一些结论:
                1,无论如何,都是蓝方更优
                蓝方最优的座次是 RRBBBR
                红 - 蓝 = -1.45
                蓝方优势最小的座次是 RBBBRR
                红 - 蓝 = -1.19
                RRBBBR,红方2人动完,蓝方3连很有可能2连购买,价值涨的很多,同时加剧红末的倒钩率。
                RBBBRR则是,蓝方普遍行动过早,红方后动优势得以体现。
                但其实相差不多。
                2,价值差绝对值都处于3.6左右
                星杯攻击的高方差可不是座次能够左右的。
                3,不同座次,对星石数的影响小于0.04
                座次对于攻击的影响真的不大,因为星杯又没有距离的概念。所影响的无非是双方利用攻击信息的数量。
                所以,虽然有10种座次,但是其实它们彼此之间是很平衡的。没必要去玩一些座次而不玩另一些。


                8楼2015-10-20 23:55
                回复
                  2025-08-04 19:40:20
                  广告
                  不感兴趣
                  开通SVIP免广告
                  红1不出刀?
                  我在过去有一个经验:那就是如果你是红末位first,即RBBBRR情况的红1,最好起手不要出刀。
                  理由:对方3连,给对手提供信息不好。
                  这个理论对不对?我们通过模拟验证。
                  假设红方1位酱油过了(什么都不干,手牌还为4),剩下5人按照原AI行动,结果如下:
                  红方获得宝石数:1.24
                  红方获得水晶数:1.17
                  红方损失士气数:0.59
                  蓝方获得宝石数:1.43
                  蓝方获得水晶数:0.88
                  蓝方损失士气数:0.26
                  红方价值-蓝方价值:-0.42
                  事实上,如果红1出刀,同样的座次下,红方价值-蓝方价值=-1.19。
                  故红1不出刀可以减少红方损失。
                  当然红1不是什么时候都不出刀。作为大三连RRRBBB的红1如果不出刀,就是这样一番景象:
                  红方获得宝石数:0.86
                  红方获得水晶数:0.77
                  红方损失士气数:0.38
                  蓝方获得宝石数:1.90
                  蓝方获得水晶数:1.36
                  蓝方损失士气数:0.36
                  红方价值-蓝方价值:-2.71
                  与原本的红方价值-蓝方价值 = -1.28相比,红方还要多损失约等于1.5的价值。。
                  可见,面对之后的对手连动,选择不出刀是明智的。但是如果是队友连动,就要积极出刀。


                  9楼2015-10-21 00:03
                  回复
                    程序猿万岁\(≧▽≦)/


                    IP属地:江苏来自Android客户端10楼2015-10-21 13:17
                    回复
                      这个简单程序也太复杂了


                      IP属地:北京来自Android客户端13楼2016-06-18 02:22
                      回复
                        更新,红方首回合没红概率大概10%,而蓝方首轮没红只有大概2.5%。红方首轮没星石大概5%,蓝方只有不到1%。


                        来自iPhone客户端14楼2016-08-22 15:08
                        回复