minecraft吧 关注:2,561,054贴子:31,988,174

[solved]鱼骨矿最佳间隔

只看楼主收藏回复

之前睡觉突发奇想,想做一个专门计算数值的系列
在吧里潜了这么久水,打算出来冒个泡


IP属地:浙江1楼2018-05-19 21:13回复
    二楼望勿插


    IP属地:浙江2楼2018-05-19 21:14
    回复(2)
      2025-08-31 20:05:11
      广告
      不感兴趣
      开通SVIP免广告
      鱼骨矿是最常用的人工矿道挖法之一,但是现在可以说大部分玩家都不太明白这种挖法每条支道的间隔到底应为多少才能以最高的效率挖到自己想要的矿物。这也就是我们这次要求解的东西
      我们可以先来考虑两种极端情况:一种是两条支道的距离只有1,也就是说完全把整个地下挖空,这样效率毫无疑问是极其低下的;另一种是完全不挖支道,直接一条主矿道挖到尾。


      IP属地:浙江4楼2018-05-19 21:15
      回复
        就直接看来似乎第二种极端似乎毫无疑问是效率最高的,因为这样做你旁边的矿物绝对是你以前从来没有探过的。

        打个比方:如果你是隔两格挖钻石的,那么如果你挖到的是这样的这样的四颗钻石

        那么你的下一条支道就会对挖到这些钻石就会毫无意义。因此会造成浪费


        IP属地:浙江5楼2018-05-19 21:20
        收起回复
          但是,我们真的可以直接这么算么?我看过一些前人对这个问题的解答,但我觉得都不够严谨,有一个非常实际的情况没有一个人考虑到,这也就导致我认为他们的计算结果都是有一定问题的,可信度没有我们想的那么高。所以我们接下来就结合一个德芙的计算帖,来讨论以前的算法到底有什么问题,以及如何去修正。


          IP属地:浙江6楼2018-05-19 21:21
          回复
            德芙的帖子我就不发了,怕被删,直接百度 ”人工矿道树形挖矿下分支矿道的最佳间隔” 就可以了
            本帖的前两部与其基本相同,包括计算最高效率的方法、超平坦生成的代码、高山群系这一要求等。但也有一定区别:为了使数据更可靠,我抽象了2w5000格的地图作为样本;使用了python而非vb进行辅助。
            考虑到我个人的水平实在有限,计算过程一定会有纰漏或者不严谨的地方,如果有吧友发现了问题希望能够及时帮我指出。


            IP属地:浙江8楼2018-05-19 21:28
            回复

              我们主要的差别还是在第三步。
              我个人认为他这这种算法有一个极大的漏洞:你是玩家,背包总得有限制吧?背包有限制,总不可能这么大的矿道一次探完吧?一次探不完,那你总得回去放东西吧?那么这种没有考虑到间隔增大而导致的回家时间增长的算法,很明显就有问题了吧。所以接下来,我们来看看解决的办法


              IP属地:浙江10楼2018-05-19 21:32
              收起回复
                咋一看以为def的帖子..


                IP属地:湖南11楼2018-05-19 21:37
                回复(2)
                  2025-08-31 19:59:11
                  广告
                  不感兴趣
                  开通SVIP免广告
                  请无视lz咸鱼般的编程水平。。。我们主要还是关注算法的严谨性。
                  除了python我们还需要两个外置库:PIL和matplotlib。接下来我会导致解释一下我所写程序的大致原理。
                  1.我们需要一个函数,来确定一个方块是不是矿物。如果是,就将记录这个间隔下的该矿物数据+1,
                  玩家的挖掘数+1,背包中的矿物+1(这些计数的作用马上会解释),并再次对该方块上下左右前后六个面进行相同操作。为了避免重复操作,我们还要将该矿物设置为石头。


                  IP属地:浙江12楼2018-05-19 21:45
                  回复
                    2.先挖一个主矿道,不同人有不同挖法,我们这里取主矿道为300格。
                    主矿道上、下两层也就是y=10、13的两层,我们是只要挖开就能看见的,所以可以直接对其进行①中所述的判定。之后再处理y=11、12的两层,这里的操作有一点不同,需要对矿道旁边四格也进行判定,也就是说需要判定一个2x3的区域。每前进一格进行一次如上操作,并且矿道总长+1,背包中矿物+2,挖掘数+2,走过路程+1。
                    每前进一格之后会进行一次检测:是否玩家背包里的矿物超过1600,也就是25格所能装的矿物。如果是,玩家就得回家一次放东西。此时背包里的矿物设为0,走过路程+离家的距离下x2(x2是因为来回一趟)


                    IP属地:浙江13楼2018-05-19 21:48
                    回复
                      3.之后再开始挖旁边的支道。这个和主道区别还是挺大的。首先我们在挖之前得先确认一下 矿道的总长是否超过一定值* ,如果没有才能继续挖下去。其次每格加增的 走过距离 要改为2,因为支道是要来回走两次的。如果检测到背包满了, 走过路程 要加上 (离家横坐标x2)+(离主矿道距离x2)。
                      *:为什么要通过检测矿道长度来决定是否模拟结束,而不是直接像德芙一样全部挖光?因为挖矿的时间还是更取决于你挖的矿道的总长,而非你探索了的区域。以此为判定标准我觉得更符合实际


                      IP属地:浙江14楼2018-05-19 21:56
                      回复
                        4.最后一步,计算效率。在 矿道总长 达到要求时首先使 走过路程加上 (离家横坐标)+(离主矿道距离),因为需要回家。其次挖矿数需要减去 2*(25000整除挖矿的间距),因为主、支道的交点统计了两次。
                        然后算出时间:时间=走过的路程/5.612(玩家疾跑的速度)+ 挖矿总数x0.9(效率IV和效率V的钻石稿都是0.7秒挖一个石头,但考虑到其他矿物的存在和操作的失误,这里取0.9秒)
                        该间隔下挖该矿物的效率即为 挖到的该矿物总数/时间


                        IP属地:浙江15楼2018-05-19 22:01
                        回复
                          本层便是结果了,使用matplotlib画出的图片。

                          煤有点尴尬。。。我以为20格间距应该够了,没想到煤还是在增长

                          可以看到钻石在间距为5之后基本没太大变化(请忽略掉14格233)

                          绿宝石也有点神奇,只有它是在3格就达到高峰,并且会逐渐下降的。不过也没有谁回去刻意挖绿宝石的吧。。。

                          金也是大同小异

                          铁我感觉似乎还有上涨的趋势

                          青金石同金

                          红石同青金石


                          IP属地:浙江16楼2018-05-19 22:06
                          收起回复
                            干货技术贴


                            IP属地:湖南来自Android客户端17楼2018-05-19 23:39
                            回复
                              2025-08-31 19:53:11
                              广告
                              不感兴趣
                              开通SVIP免广告
                              看了没软用系列,挖到钻石就好。但是强迫症表示矿井必须井井有条


                              IP属地:意大利来自Android客户端18楼2018-05-20 06:08
                              回复