分享--魔改支持百变怪和额外升级n件工作服功能的计算器

前两个帖子被系统给吞掉了,早上发了个吐槽被删的帖子,当时误以为是被吧务操作的,后来发现是系统干的。刚刚经小吧主建议,把上个帖子删掉,这里改个标题重新发一下哈


昨晚肝到凌晨四点,在上一版的基础上又加上了支持额外升级n件工作服的功能(由上一个帖子的吧友@Johnny、Qian提议),以及修复了吧友@我就水亿贴反馈的初始化后勾选百变怪会卡主的问题


v3.2.6 2020.4.21
1. 百变怪的备选集合中排除升级得到的工作服、智慧产物
2. 新增可配置最多升级n件工作服的功能
3. 目前select是默认初始化时将tg{1101-3336}[0,1]范围的key对应的值都设为0,而百变怪会根据select的值为0来筛选出未选择的集合,因此在这里如果为None,将其过滤掉,避免程序不运行
3.1 bug来源:@我就水亿贴 贴吧网友的反馈
4. ui细节调整
5. 增加推荐使用步骤及免责声明
6. 增加一件发布脚本
7. 增加加入升级工作服功能后,剪枝时的精确计数,后因性能问题回滚


由于发链接会被吞楼,因此将链接改用base64编码再发出
链接: aHR0cHM6Ly9wYW4uYmFpZHUuY29tL3MvMS1JOHBNSzZfeVBINXFVNFNXTk1Wb2c=
提取码: 238m


解码步骤:百度搜索base64编码,打开站长工具的搜索结果,在右边的框里完整复制连接后面那一串东西,包括最后的=,点击解密,在左侧就能看到链接啦

楼主 风之凌殇  发布于 2020-04-21 12:54:00 +0800 CST  
二楼备用

楼主 风之凌殇  发布于 2020-04-21 12:54:00 +0800 CST  
发现是被系统吞,而不是被吧务给干掉,心情好了不少,有动力继续改了=、=目前个人使用过程中感觉启动实在是太慢了,虽然之前稍微优化过一点,把启动时尝试读取6749个图片降到了351个,但是还是很慢,怀疑是初始化的逻辑中有些操作写的不是很高效,准备今晚使用Python的性能调试工具定位一下启动时的性能问题,争取能做到秒开

楼主 风之凌殇  发布于 2020-04-21 12:55:00 +0800 CST  
魔改到第六版后整体的界面功能说明图




楼主 风之凌殇  发布于 2020-04-21 12:56:00 +0800 CST  
发一下历史版本的改动
v3.2.1 2019.4.14
1. 存档读档功能增加支持选择速度、武器、职业选择、输出时间、称号选择、宠物选择、冷却补正等信息,无需每次读档后再手动设定后才能进行计算,现在读档后可以直接点计算
2. 启动时自动读取首个存档,无需再自己去点一次读档才能去进行其余操作
3. 性能优化:
3.1. 调整读取装备图片的流程,通过遍历文件夹来实现加载所需的图片,而不是穷举所有可能,最后导致启动时要卡顿两秒,根据测试,目前读取图片共使用0:00:01.780298秒, 总共尝试加载6749个, 有效的加载为351个
3.2. 国内环境无法访问他那个更新版本的google网盘地址,所以直接移除相关代码
4. 干掉了在总组合数目超过5亿种时不允许玩家运行的限制,同时将遍历组合的流程由先生产所有改为使用生成器去遍历,使得在组合数非常大时内存也不会溢出,经测试即时点亮所有图标,新版本也能够正常计算
5. 增加计算预计剩余时间的功能,在计算栏中将初始化右侧已显示的当前总组合数移除,改为预计剩余计算时间,这样可以更容易知道进度
6. 初始状态设为停止状态,在成功开始计算时设为计算状态,结束计算时和按停止时设为停止状态
7. 保证职业列表按照excel表中的行顺序排列
8. 未选择职业或武器直接点计算时弹出错误框,使得更加易用

楼主 风之凌殇  发布于 2020-04-21 12:56:00 +0800 CST  
v3.2.3 2019.4.19
1. 修复状态栏中剪枝时未计入后续组合中的百变怪的组合而导致算的增加的无效组合数低于实际剪枝数目
2. 修复下方统计总数时因将神话装备算入百变怪备选集合而导致总数与上方计得数字不一致的问题
3. 添加无提前剪枝和最宽泛上限的剪枝方案
3.1 测试数据无提前剪枝用时123s
3.2 测试数据最宽泛上限剪枝用时9s
3.2.1 每个剩余装备按1点增益计算,若目前序列尚无神话,且后续序列存在神话,则额外加一点
3.2 测试数据任意现有装备下新增若干个装备剪枝用时8.99s
3.2.2 当前已有装备不受限制,预先计算任意新增k个装备所能得到的最大增益,若目前序列尚无神话,且后续序列存在神话,则额外加一点

楼主 风之凌殇  发布于 2020-04-21 12:57:00 +0800 CST  
v3.2.4 2020.4.19
1. 将保存结果的结构体由列表改为最小堆(存储O(n),排行O(1)),原先的排行消耗太大(存储O(n*logn),排行O(n^2)),尤其是在点亮全部装备的时候尤为显著

楼主 风之凌殇  发布于 2020-04-21 12:57:00 +0800 CST  
v3.2.5 2020.4.20
1. 修复奶系职业切换排序标准时右侧搭配不刷新的问题
2. 输出结果界面额外汉化
3. 输出界面排版优化

楼主 风之凌殇  发布于 2020-04-21 12:57:00 +0800 CST  
最后发一下这一周魔改的git提交日志,纪念一下<_<





楼主 风之凌殇  发布于 2020-04-21 12:57:00 +0800 CST  
v3.2.7 2020.4.21
1. 增加支持更多春节宠物、称号和国庆称号,并尽可能将每个词条都考虑进来
2. 修复夜语黑瞳武器55技攻变成55速度的问题
3. 修复update_count和update_count2在tkinter.mainloop启动前就调用tkinter相关组件而导致计算倒计时的功能挂掉的bug
4. 增加每个词条的枚举,而不是使用magic number来访问- -
5. 汉化data中的部分装备名称





楼主 风之凌殇  发布于 2020-04-23 06:18:00 +0800 CST  



楼主 风之凌殇  发布于 2020-04-23 06:18:00 +0800 CST  
=。=顺带说下昨天折腾提升启动性能的结果。通过打性能日志,得到启动过程中主要耗时的步骤如下






可以看到其中读取data.xlsx、保存图片、初始化gui框架等占了大头,通过查询各个接口的文档,发现了一些优化点。
1. 启动时读取data.xlsx是为了获取各个装备的信息,但不会写入该文件,因此可以在load_workbook时可以通过设置readonly字段,大幅提高读取性能,改动后整体处理data.xlsx的时间由0.35s降到了0.21s左右
2. 移除不必要的一些数据读取
3. 干掉一些不需要的imports


最终优化后,大概可以稳定在1.07s左右(指从程序开始从第一行执行计时,点击程序到打包程序加载完所需环境这段时间没法控制)


楼主 风之凌殇  发布于 2020-04-23 10:32:00 +0800 CST  
一些没法优化的点:
1. 读取图片之前的版本中已经改为仅读取必要的部分,暂时没法缩减了
2. 初始化tkinter gui框架好像至少得这么多时间,也没法优化了
3. 点击运行程序到python打包程序加载完成,正式执行脚本第一行内容之前这一段时间程序这边完全没法控制,python作为解释语言本身的机制使得这段时间就得这么长。理论上可以通过使用jit实现的Python解释器来加快本身的运行效率=、=不过打包后应该没办法了

结论:目前看来,如果真的要实现秒开,只能另起炉灶,使用编译型语言来重写一遍,
这样最终运行效率和启动效率会大幅提供。目前暂定后续有空的话可以试试用golang来重写这个计算器,使用golang语言的跨平台gui框架fyne来实现界面,封装计算伤害和搜索可行解的部分为单独的库。理论上之后就能实现一份代码同时编译桌面、安卓、iOS版本的计算器了-。-

楼主 风之凌殇  发布于 2020-04-23 10:43:00 +0800 CST  
@给QQ一巴掌与中速慢速及过滤条件有关的代码如下


楼主 风之凌殇  发布于 2020-04-23 12:47:00 +0800 CST  


经@给QQ一巴掌提醒,发现修改国服特色的代码时,把这边的基础属强给忽视了,导致计算结果少了基础属强,我重发一下这个版本

楼主 风之凌殇  发布于 2020-04-23 15:57:00 +0800 CST  


楼主 风之凌殇  发布于 2020-04-23 16:10:00 +0800 CST  
看来分享还是能攒人品的啊,2000把没出神话的我今天终于出神话啦,还是成套的给我


楼主 风之凌殇  发布于 2020-04-23 20:09:00 +0800 CST  
v3.2.8 2020.4.26
# 新增功能
1. 增加装备跨界功能,因计数部分太复杂,不再维护
2. 增加选择多个武器的功能,因计数部分太复杂,不再维护
3. 增加区域展示更加方便阅读的当前搭配,如天擎3水果2这种
4. 结果栏中增加查看名称按钮,点击即可查看当前搭配的各部位装备名称,不用再看图认出装备了
5. 增加当前用时,方便看花了多少时间了
6. 在显示当前组合数的地方,在前面加上装备的收集进度
7. 把结果界面的层级不设置最顶端,这样出结果后切换其他角色时不需要额外折腾
8. 增加多选列表组件
9. 增加与贝奇邂逅称号(因为我的奶妈在用这个<_<)
10. 汉化data.xlsx
11. Data.xlsx增加首行,表示各列的中文含义,同时冻结第一行与前两列,这样编辑具体数值时容易定位

楼主 风之凌殇  发布于 2020-04-26 01:45:00 +0800 CST  


楼主 风之凌殇  发布于 2020-04-26 01:46:00 +0800 CST  
2. 经韩械反馈,属强多出来了80点,应该是之前他在data.xlsx中补正的数值我这边重新计算了一遍- -,暂时先在国服特色的函数中减去一定数值,保证两边属强计算结果一样

3. 经贴吧网友@飞花逐月反馈,在五个散件防具、两首饰、两特殊这种类似的情况下,原版只会给出唯一的史诗组成的搭配,而略过了实际战力更高的传说普雷搭配。
为了计算结果更精确,永远将100传说防具、普雷首饰、普雷特殊加入备选方案
4. 经贴吧网友@萌萌的汉堡包反馈,在特定组合下选择百变怪计算奶量时程序会无法计算,提示时间很长,经排查,是之前遇到过的一个bug,只是修复了输出职业的那边,奶这边没有改。
具体原因:目前select是默认初始化时将tg{1101-3336}[0,1]范围的key对应的值都设为0,而百变怪会根据select的值为0来筛选出未选择的集合,
因此在获取装备属性切片时,如果因为这件装备时间不存在,导致切片为None而空指针访问程序无法正常执行。这种情况,直接判断空指针返回就可以了

楼主 风之凌殇  发布于 2020-04-26 01:46:00 +0800 CST  

楼主:风之凌殇

字数:4219

发表时间:2020-04-21 20:54:00 +0800 CST

更新时间:2020-05-08 13:17:33 +0800 CST

评论数:1260条评论

帖子来源:百度贴吧  访问原帖

 

热门帖子

随机列表

大家在看