本文共三个部分:

  1. 我用python玩炉石传说(1)-----炉石卡牌相关度分析的手动打分器
  2. 我用python玩炉石传说(2)-----炉石卡牌套牌爬取器及自动分析卡牌相关度
  3. 我用python玩炉石传说(3)-----炉石卡牌套牌自动构建算法

引言:

前面两部分已经完成了卡牌之间的相关度分析,现在需要完成我们的最终目的,构建一个套牌deck。

最初,想用最简单的方法,即选择相关度最高的来完成构建,例如:首先选择情势反转,最相关的是阿兰纳斯蛛后,最选择与蛛后最相关的,地狱烈焰,然后依次进行,直至选满30张卡牌。

但实际发现这样构建出的套牌,虽然看似相关度高,但实际非常分散与自闭(由于缺少尘与卡牌,所以并没有完全按选出的卡牌实测)。表现出非常卡手,或是combo往往难以达成,提前拆散,可以想象为自行车链条,每个节点高度相关,成链式。但如果某张卡牌不得不出于解场,除掉后,相关性就中断了。也就是虽然combo很多,但combo与combo之间的耦合度很低,套牌构建不完善。

所以需要一种能发现最佳套牌的算法。需要两个‘器件’,迭代器以及打分算法

autobuild.py

一,卡组记录类

class BDeck:cardinfo = Nonecorrmat = Nonedef __init__(self, dicklist: list, cardnum: int, score: float):self.dicklist = dicklistself._cardnum = cardnumself._score = scoredef __len__(self):return len(self.dicklist)def __lt__(self, other):return self.score < other.scoredef appid(self, idn: int):self._score = self._score + self._newscore(idn)self._cardnum = self._cardnum + self.cardinfo.id2cardmaxnum(idn)self.dicklist.append(idn)def _newscore(self, idn):newscore = 0.0for n, i in enumerate(reversed(self.dicklist), 1):s = self.corrmat.get_rmatrix[idn, i]newscore += s / nreturn newscore

类中记录卡组的卡牌,以及卡组的得分,卡牌数量。

func appid:为添加新卡进入卡组时,自动计算其总得分

分数计算方法改进:不只是计算新加入的卡牌与其之前的卡牌相关度得分(4-5),还要计算其与之前所有加入卡牌的相关度累加得分(1-5, 2-5,,,),其中会对其卡牌距离做一定的衰减,例如 1-5会除于其相距距离5,2-5除4。可以理解成,我们希望新加入的卡牌,能与之前的卡牌有一定的相关耦合关系,成为一个体系,而不是又节外生枝发展出另一个体系(例如,本来是ZOOLOCK的,但发展到后来又出现了handlock卡牌)。但是,我们知道一个卡组里不可能全部都与一张卡牌相关,那样耦合的过于紧密,类似于全部聚类在了一起,那样只要1卡牌出完,那整个体系就崩溃了,所以加入衰减使卡牌加入顺序相隔越远的,所受影响会越小。(但实际上最后实验效果还是出现了多分支)

二,遍历所有卡牌组合的递归算法

def recursion_trave(deck: BDeck, spreed, deep):if deep < 1:spreed = 20elif deep == 1:spreed = 15elif deep == 2:spreed = 10elif deep == 3:spreed = 5elif deep == 4:spreed = 5elif 5 <= deep <= 6:spreed = 5elif 7 < deep <= 15:spreed = 3lastcard = deck.dicklist[-1]scope = RM.get_rmatrix[lastcard, :]scope[deck.dicklist] = 0scopesort = np.argsort(scope)[::-1]maxscoredeck = deckfor i in range(spreed):if scope[scopesort[i]] > 0:idn = scopesort[i]else:breaknextdeck = deepcopy(deck)nextdeck.appid(idn)if nextdeck.cardnum < 30:nextdeck = recursion_trave(nextdeck, spreed, deep)maxscoredeck = max(maxscoredeck, nextdeck)return maxscoredeck

选定一张核心牌1,然后遍历其所有与之相关的卡牌(2,3,4,5,6),进一步,再分别遍历与(1-6)相关的(1-6-7,1-6-8,1-6-9.。。。),无限递归进行下去,直至加入卡牌数量达到30张。就这样遍历了基本所有可能性,然后总结出得分最高的卡组。

代码链接:https://github.com/GladosAI/hearthstone-card-correlation-analys

实验效果

莫瑞甘的灵界
烈焰小鬼
虚空行者
怪盗天才
残酷集结
双生小鬼
巨型小鬼
小鬼狱火
拉法姆的阴谋
恶魔法阵
至暗时刻
伊瑟拉
恶狼大法师
凯恩·血蹄
人偶大师多里安
邪能领主贝图格
情势反转
阿兰纳丝蛛后

(默认是除了传说,其他都带两张,自己缺卡没试过,估计不行,算法还要改进,有条件的朋友可以试试)

(我个人觉得 换掉伊瑟拉 为一个效果不错的亡语或巨人 可能还能玩。恶狼大法师还是太卡,也换掉。把卡牌风格向zoo上靠,可能还救得活,毕竟反转+人偶大师/邪能 也能铺场)

这是算法自己生成的,有个问题,在恶魔法阵前本是恶魔zoo术的,后来由于至暗时刻与恶魔法阵与阴谋算是combo,导致后面节外生枝为另一个体系反转术。这里使用的是第二章里的相关度数据,来自400个构建好的卡组,估计使用自己手动打分会比较好,因为更加全面客观。

我用python玩炉石传说(3)-----炉石卡牌套牌自动构建算法相关推荐

  1. 利用浏览器缓存抓取网络资源:【炉石传说】所有卡牌png图片地址

    有的时候我们在网络上看到很好的资源,想要抓取,却苦于没有好的手段.今天我就来介绍一下通过chrome浏览器缓存抓取的方法. 大家都知道,浏览器把网页展示给我们看的时候,会先将页面上的所有图片等资源下载 ...

  2. 我用python玩炉石传说(2)-----炉石卡牌套牌爬取器及自动分析卡牌相关度

    本文共三个部分: 1,我用python玩炉石传说(1)-----炉石卡牌相关度分析的手动打分器 2,我用python玩炉石传说(2)-----炉石卡牌套牌爬取器及自动分析卡牌相关度 3,我用pytho ...

  3. 计算机网络之危机四伏,炉石传说最后的爆牌贼 奥术巨人危机四伏流分享

    炉石 传说最后的爆牌贼 奥术巨人危机四伏流分享 虽然由于 海盗 战和青玉德盛行,使得爆牌贼生存环境更为恶劣,但是在外服还是有人在最后坚持标准爆牌套路,下面一起来看看 奥术巨人危机四伏爆牌贼. 炉石传说 ...

  4. 炉石传说服务器维护有补偿吗,炉石传说维护(炉石传说维护公告全文及具体补偿方案 炉石数据回档怎么补偿?)...

    炉石传说维护(炉石传说维护公告全文及具体补偿方案 炉石数据回档怎么补偿?),哪吒游戏网给大家带来详细的炉石传说维护(炉石传说维护公告全文及具体补偿方案 炉石数据回档怎么补偿?)介绍,大家可以阅读一下, ...

  5. 整活插件 炉石传说_炉石传说:国服再搞大动作?官方插件神秘新功能压力测试开启...

    一入酒馆深似海,从此萌新变大神.大家好,我是酒馆店小二!据说点了关注的炉友,天天都能开橙卡,月月都能上传说哦~ 今天小二从营地看到了一则比较新奇的新闻,是关于炉石传说官方插件的.据悉,<炉石传说 ...

  6. 整活插件 炉石传说_炉石新bug的经验和金币补偿!新版本落差最大的三张橙卡,两张生不逢时...

    先来说一下官方最新的热修补丁: 修复了某些玩家任务日志空白且无法收到任务的bug,受影响的玩家将在不久后获得经验补偿: 修复了英雄对决模式没有经验的bug,受影响的玩家将在不久后获得缺失经验的补偿: ...

  7. 炉石传说 java_炉石传说 java实现

    试题编号: 201609-3 试题名称:炉石传说 时间限制:1.0s 内存限制:256.0MB 问题描述: 问题描述 <炉石传说:魔兽英雄传>(Hearthstone: Heroes of ...

  8. 炉石传说|炉石战棋|整活脚本

    先放脚本内容: ::https://baijiahao.baidu.com/s?id=1665560383633884294&wfr=spider&for=pc ::https://w ...

  9. 睿卡潮玩云卡展圆满落幕 卡牌收藏背后是体育文化的积淀

    一张在1997-1998赛季发行.由美国篮球明星迈克尔·乔丹亲笔签名的球星卡,近日在美国被拍出270万美元"天价":2018年,中超联赛首次发行官方球星卡,这是时隔20年后国内足球 ...

最新文章

  1. 入门|机器学习中常用的损失函数你知多少?
  2. Asp.net 操作cookie大全
  3. wxWidgets:wxAUI 概述
  4. Raft当初为什么会被命名为Raft?
  5. [POJ2420 A Star not a Tree?]
  6. Codeforces 899D Shovel Sale
  7. 原生JavaScript对CSS进行格式化和压缩
  8. iview select 内存泄漏_Vue遇到的内存泄漏排查处理
  9. 如何在Eclipse中从XSD生成XML
  10. Netlink 0002 -- 什么是Netlink
  11. 141.3. 单机安装 CentOS 5 + hadoop-0.20.0
  12. Ubuntu下网络调试助手 NetAssist(实际这个我启动不了)
  13. tftp协议给服务器上传数据,TFTP连接过程详解
  14. 文件系统测试工具IOZONE
  15. winpe查看不到linux硬盘,winpe不显示硬盘?教你轻松搞定pe下不显示硬盘问题
  16. Linux xampp apache启动失败解决办法
  17. python 学习笔记2
  18. ztree树与列表名字获取
  19. 【Robot】Rookit简介
  20. Halcon一些功能算子

热门文章

  1. 微信小程序实现搜索功能
  2. python如何升级到指定版本_python如何升级?
  3. 大数据分析实习生面试题库
  4. 计算机Word2010在线做题,计算机WORD题库及答案.doc
  5. 即时通讯工具微信 v2.7.1.82 绿色便携版
  6. KMP算法:最长字符串匹配算法
  7. 树莓派3B摄像头的详细使用教程(拍照+录像+监控)
  8. PHP,HTML里面的EQ、NE、GT、LT、GE、LE分别代表含义
  9. 运行python文件、电脑突然黑屏_电脑突然黑屏怎么回事
  10. 命令行下开启与关闭windows防火墙关端口(转)