明日方舟吧 关注:1,796,120贴子:83,438,878

[科普贴/破事氵]简单拆解一下十天帝的强杀计算器

只看楼主收藏回复

十天的瓜我不关心,我是典型的工科眼睛老钟,看见技术就忍不住轻哼起来的那种,本帖就特意拆解一下十天的这个概率计算器。为什么说是小拆解呢,因为我是实际上只有这一张图,而且就算拿到了程序的话我对pyinstxtractor等反编译软件的使用依然很生疏,所以只从原理上进行推测。顺带进行一个科学的普及。

首先比较显而易见的是,启动计算器后下面的数字开始跳动,而且变动的位数越来越靠后,再加上括号内的迭代次数,可以轻易猜测得到用的是蒙特卡罗法进行模拟。蒙特卡罗法是一种根据模拟概率过程并且用统计学方法统计随机结果来计算概率分布的方法,具有无偏性和一致性,用中学的话说就是用频率估计概率。
但蒙特卡罗法最大的缺点就是需要收敛,但是由于方舟本身干扰项就不少,所以计算器结果并没有那么可信,所以440次模拟的精度基本上就够用了,所以没做审敛也是很正常的,不过这个直接肉眼审敛看哪几位数字不再跳了也是天才设计,换我的话基本上就是模拟次数1后面闭着眼按0。

但回到十天的程序,有一点比较显著的问题就是为什么收敛速度那么慢?以至于我都怀疑精度已经超出其他干扰项的影响范围了,但是一看title就破案了,因为他用的是tkiner,一个编程非常简单的py3gui小工具,缺点是运行效率不高,而且通过顶帧分析,确认了每进行一次迭代,显示的数字就变了一次。
再结合一下迭代速度超慢的事实,可以得出这实际上是非常草台班子的做法,即把GUI和代码逻辑放到同一个循环结构体中,因为刷新一次GUI所需要的算力远超模拟一次所需要的算力,所以整个进程的速度都会被不断地重绘GUI所拖累,同时刷新速度相较于独立GUI进程对人眼来说,完全没有区别。
以及明显的没有多线程,这种完全不需要考虑多线程安全的程序,竟然没有做多线程,以及前后端分离,不过只能说的确是临时搓出来的,不过的确这样可以为计算器取得更长的展示时间,win。
为方便理解蒙特卡罗法,编写的一段伪代码与其C语言实现:

还是没忍住做了原子化处理保证多线程安全,实际上不做也没问题,就是会有效率浪费


IP属地:北京1楼2024-12-25 16:40回复
    看不懂一点


    IP属地:广东来自Android客户端2楼2024-12-25 16:46
    回复
      我玩维什戴尔的


      IP属地:广东来自Android客户端3楼2024-12-25 16:49
      回复
        你觉得我看得懂么


        IP属地:河北来自Android客户端5楼2024-12-25 16:58
        回复
          你说的什么?都是汉字我怎么一点也看不懂


          IP属地:河北来自Android客户端7楼2024-12-25 17:01
          回复
            搓出来一个勉强能跑的玩意然后懒得优化倒是很熟悉的感觉我玩生电的时候就是这样


            IP属地:北京来自Android客户端8楼2024-12-25 17:34
            收起回复


              IP属地:广东来自Android客户端10楼2024-12-25 17:43
              回复
                我在玩明日方舟.jpg


                IP属地:湖北来自Android客户端11楼2024-12-25 18:29
                回复
                  可能够用就行


                  IP属地:广东来自Android客户端12楼2024-12-25 19:03
                  回复
                    看不懂


                    IP属地:广东来自Android客户端13楼2024-12-25 19:22
                    回复
                      我玩vv的


                      IP属地:天津来自Android客户端14楼2024-12-25 20:11
                      回复
                        唉不对,为什么总伤计算器需要用到蒙特卡罗法?


                        IP属地:中国香港来自Android客户端15楼2024-12-25 20:33
                        收起回复
                          虽然看不懂,不过你干的好啊


                          IP属地:天津来自Android客户端16楼2024-12-25 20:51
                          回复
                            省流,简单的说就是效率很低,但是效率再低对于明日方舟伤害计算这种低级需求来说也够用了


                            IP属地:浙江来自Android客户端18楼2024-12-25 21:03
                            回复
                              那么多专有名词看不了一点


                              IP属地:河南来自Android客户端19楼2024-12-25 21:06
                              回复