异星工厂吧 关注:63,599贴子:414,415

回复:流体量化小算法

只看楼主收藏回复

如果说一楼发的算法对普通玩家意义不大的话,希望我用这套算法做的这个计算器对普通玩家会有些许意义。使用方法应该很傻瓜式了吧(


IP属地:广东19楼2021-06-22 21:25
收起回复
    以及,刚才做计算器的时候才发现一楼不慎犯了个小错误:设流体量在基B下的坐标表示为x,那么在基D下的坐标表示应该直接就是Cx,所以不应该用C的转置去乘α,而是直接用C去乘α得到机器数量。
    计算器的网盘:1jtElGiv9xUP-IiVNFkciqg
    提取码9961
    只用计算器的话直接下载Factorio-Oil.exe就可以直接用;如果怕我在里面埋了东西或者想一起研究学习、改改用来做其他东西的量化,也可以下Factorio-Oil.rar压缩包,压缩包里面是源码。因为流体问题的阶数比较小,所以直接用伴随矩阵求逆了,其他地方也写得比较随意,大伙轻喷(
    不过这类计算器想必helmod之类的都带了吧...感觉除了验证理论、写出来图一乐呵之外其他意义也不太大。


    IP属地:广东20楼2021-06-22 21:49
    收起回复
      2026-01-13 00:11:55
      广告
      不感兴趣
      开通SVIP免广告
      算了,给大家指路一个去年的坟贴https://tieba.baidu.com/p/6440157679,用线性规划近似解决Py MOD里的配方选取问题@hyperling8
      这个帖子主要是把简单情况用相对规范的数学语言进行表述,而上一篇是一个在复杂现实情况(笑)当中的工程实现的案例。


      IP属地:福建21楼2021-06-22 21:50
      收起回复
        还做了计算器,爱了爱了。
        楼主这贴做教科书的话,其实应该弄几个量化精度高的高油使用实例。比如常见的462盒子的量化,要1109石油气,10.8重油,365.4轻油,看看不亏机器的做法是啥样。
        今天群里讨论这个就有人压根没这概念,觉得高油做个加减乘除全转石油气就完事了


        IP属地:上海22楼2021-06-23 00:20
        收起回复
          看到线代大佬发帖,借屑狗党@超级潜水员QZ的话,“并没有什么卵用”。我再回@超级潜水员QZ@HLKASSASSIN一句:“爱看便看,不爱看就滚”,别人的帖子争与不争才是风度


          IP属地:浙江23楼2021-06-23 11:20
          收起回复
            更新了流体计算器:
            增加了根据输出量算输入量与机器数的模式,这里是按最小输入量来的,也就是说结果会让输入原油尽可能少。


            增加了根据机器数算输入和输出的模式。因为实际游戏里没法做到太精确的小数,所以可以作为模式2的辅助来验证实际机器量能否满足处理需求。


            如图,以模式2算出来的机器量微调即可得到比较完美的机器比例。这里微调只需使各机器量是1/60的倍数即可(因为1/60倍数的机器在游戏里理论上都是可以实现的),但实际生产中可能不需要这么精确,那就可以把各机器量调成是0.5或0.1等的倍数,然后使石油气、轻油、重油都略微超出需要输出量一些即可。


            IP属地:广东24楼2021-06-23 11:32
            收起回复
              我就不考虑水的消耗是否影响输出了,因为都是和原油按比例输入的。以及不考虑使用的机器到底应该是多少,因为总能找到一定数量的机器来消耗所有原油。
              我先说一下原油处理的几个硬性逻辑,因为这个逻辑不受人的意愿而变动:当输入20原油并想要全部消耗完时,会有三层逻辑要考虑。①在原油处理这一层,就必然有5重油,9轻油,11石油气的输出。然后在原油处理这么一层,我给出的结论是:20原油的输入对应的重油【极限输出】是5,并伴随着【副产物】轻油,石油气。换一种说法:当我们想要5的【重油产出】时,那么【必然】需要20的【原油输入】,并伴随着【不可避免】的轻油,石油气的产出。这是不可避免的,不管你想要还是不想要,它都必定存在。总的来说:5重油的输出=20原油的输入+9轻油输出+11石油气输出。也就是说有重油产出,就一定会有轻油,石油气的多余产出。那对应的不合理比例需求【6重油,9轻油,11石油气】,也就解释成:【5重油,9轻油,11石油气的比例生产】+【1重油,及对应比例的轻油,石油气副产物】(也就是说会有多余的轻油,石油气被生产出来且消耗不掉)。②原油处理的逻辑考虑完以后,是重油裂解。在原油处理中,轻油的来源,除了从【20】原油那能得到【9】轻油,还可以从【5重油】那再得到【5/4*3】轻油,总的【9+3.75=12.75】轻油。所以对应着一个不符合比例的需求【5重油,10轻油,11石油气】就有以下的逻辑:当我们满足【5重油】时,那么必定能满足【9轻油,11石油气】,那么就只剩下【1轻油】得不到满足,计算到这一步,我们的输入是【20原油】,但是还有【1轻油】需要生产,那这1的产量从何而来?答案就是【原油处理+重油裂解】。没错就是【两个】配方加起来的输出。这背后的硬性逻辑:有输出(轻油)就一定有输入(原油)(所以有原油处理),但是重油又不需要(所以有重油裂解),那么对应的石油气又怎么办?当然就是作为【副产物】,作为一个多余的产物并且我们消耗不掉。③原油处理,重油裂解考虑完,接下来便是最复杂的【石油气环节】。石油气的来源,不是二种,应该是有三种。即【原油处理产出的(11石油气)+原油产出的(9轻油)的轻油裂解的石油气+原油产出的(5重油)的重油裂解再轻油裂解的石油气】这是一个极复杂的过程,而且重油对石油气的影响往往会被忽略。即【20】原油对应【11】石油气,【9/3*2=6】的轻油石油气,【5/4*3 /3*2=2.5】的重油石油气,总的【11+6+2.5=19.5】石油气。综上三层逻辑①②③已完毕,接下来便是几个复杂的石油气生产情况:一、不符合比例的【5重,9轻,12气】,这个相对简单,先是【5,9,11】的比例生产【5重油】,再生产剩下需要的12-11=【1石油气】,这个1来源于【原油处理,轻油裂解,及重油的重油裂解再轻油裂解】即③。二、【5重,10轻,12气】,复杂度增加。第一步,【5,9,11】比例生产【5重油】;第二步,【1轻油】的生产,按照②中的流程,来源于【原油处理+重油裂解】。这时会同步产出一定量的石油气A(A取决于这个【1轻油】的量),它来源于上面的【原油处理】,因此,接下来实际需要增加产量的石油气是(12-11-A),不是(12-11);第三步,【12-11-A】石油气的生产,也就是③中的流程,石油气的三处来源:原油,轻油,重油(而在实际过程中,12-11-A可能是负数,这表示我们用【原油处理】生产所谓的【1轻油】时,同步产出的石油气已经满足了需求,产生了冗余,所以这里的负数表示产量已经多余了)。三、【6重,9轻,12气】,复杂度变型,第一步【5,9,11】,还差【1重】【1气】。第二步,6-5=1重油的①原油处理,将【1重】生产出来,同时伴随着副产物的产出9/5轻油,11/5石油气。由于【9轻】已经满足,所以9/5轻油转换成石油气9/5/3*2=6/5气。则【1重】副产物9/5+6/5=17/5气,大于【1气】,因此不用额外的原油处理来生产【1气】。四、【6重,11轻,14气】。这个是最复杂的。第一步,【5重,9轻,11气】,剩【1重,2轻,3气】。根据①中生产,将【1重】产出,同时1重的副产物【9/5轻,11/5气】。2轻减9/5轻还有【1/5轻】,3气减11/5气还有【4/5气】,根据②中生产,将【1/5轻】生产出来,原油处理+重油裂解,同时1/5轻的副产物【44/255气】(5,9,11的比例生产,则是5/4*3+9=12.75轻=51/4轻:11气,那么1/5轻对应44/255气)。4/5气减44/255气还有【32/51气】,按照③中生产,将【32/51气】生产,原油处理+轻油裂解+重油裂解再轻油裂解。


              IP属地:贵州来自Android客户端25楼2021-06-23 19:16
              收起回复
                这景象针不戳 又有那激烈讨论的场面了 虽然能研究的点不多了


                IP属地:江苏来自Android客户端26楼2021-06-25 12:43
                回复
                  2026-01-13 00:05:55
                  广告
                  不感兴趣
                  开通SVIP免广告
                  。。。。。。。。。。。。玩个游戏,要求这么高学历的????????


                  IP属地:山东27楼2021-06-27 10:48
                  回复
                    我感觉我不适合玩游戏


                    IP属地:河南28楼2021-12-29 13:46
                    回复
                      看着高大上,其实过于‘炫技’,把简单问题复杂化了。。。
                      原油处理的各种组合问题,早就被讨论过。理论基础是线性代数,单纯形。
                      对于玩游戏的,这里有支持插件的计算器,输入需要的产物(比如石油气),自动计算出各种工厂的数量。
                      https://factoriolab.github.io/list?z=eJwrcNLTMjNQK3Iq1dJyqwNCLSMTLc86z3inDDQBZzR-IZgP5akVG6iVGQMAT98Vvw__
                      https://kirkmcdonald.github.io/calc.html#data=1-1-19&rate=s&min=3&belt=express-transport-belt&dm=p3&db=s3&dbc=24&items=petroleum-gas:r:450
                      这是一个关于单纯形解法的详细说明
                      https://alt-f4.blog/ALTF4-47/


                      IP属地:中国香港29楼2022-01-01 08:57
                      收起回复
                        我的写法是把配方的产出加到pool里面
                        然后遍历pool按指定的配方进行计算所需材料 所需机器数量
                        然后把算出来的材料再加到pool里面 再算一次
                        直到pool里面只剩下最上游的各种矿石


                        IP属地:日本31楼2023-07-01 19:19
                        回复
                          人家把这个矩阵求解都写成代码写成工具给人用了 您还搁这儿玩公式


                          IP属地:湖北32楼2023-07-03 15:37
                          回复