rimworld吧 关注:232,401贴子:4,064,067
  • 19回复贴,共1

用中学时代的旧功法探索sos2舰队机动学说

只看楼主收藏回复

研究背景:sos打太空战真的很耗燃料。尤其是有时候需要迅速逃跑,有时候需要迅速近身,有时候还需要战术风筝主动耗尽敌方燃料保留敌方船体完整性。尤其是每当我方船速和对手相近时,一不小心就会用光攒了好久的铀。即使总是忍不住多加几个发动机,但加了发动机又陷入了消耗更大的循环。不禁让我思考这背后的规律到底是什么样的。一怒之下尝试写点数学模型来描述这背后的问题。本模型不考虑无脑强的超凡发动机。
首先简单说一下sos飙船的机制。自身飞船会产生“重量”,发动机会产生“推力”。战斗中相对进退需要速度。而此处速度很简略地正比于“推重比”。
接下来两点是问题复杂性的根源。
首先,来回追逐这种对抗着的进退动作是先分别计算敌我的“速度”,相减之后再决定战斗条的位置变化速度。这个分母处的相减注定使模型不简单。
另外,舰船重量分两部分。发动机会自带大量重量。尤其是轻船的大部分重量来自发动机,重船大部分来自船体。这点区别会产生出截然不同的模型。
本文要研究一个函数,自变量是发动机数量,但是允许连续化便于观察变化趋势。因变量是特别设计的。是“追逐状态下产生给定量的相对位移量所需的我方的燃料消耗”。本函数主要就要描述我方速度超过敌方时如何节约燃料。毕竟玩sos敢速度不够迟早要完。
楼下继续



IP属地:上海来自Android客户端1楼2024-10-02 05:34回复
    首先是描述基础推导。这里全用中文方便理解:
    燃料消耗正比于完成追逐所需的时间乘以发动机数量
    其中追逐时间反比于敌我速度差,就是我速减去敌速。
    我速正比于我推重比。其中推重比的推力正比于发动机数量,推重比还反比于总重
    总重包括发动机重量和其他重量。其中发动机重量正比于发动机数量。
    本函数完整写出之后,自变量“发动机数量”出现三次。参数众多,自然语言无法分析。接下来用数学知识分析函数类型,手动给一些参数值输入desmos网页计算器,试分析图像性质和参数意义。


    IP属地:上海来自Android客户端2楼2024-10-02 05:45
    回复
      一楼图2是随意调整参数后展示的一个可读性强的结果。
      表面上看,燃料消耗随着发动机数量呈现复杂的变化。在敌我速度接近时燃料消耗将猛增。在我方发动机很多时燃料消耗接近线性增加。
      本函数用数学变化完之后是二次函数除以一次函数的形式。属于经过线性平移缩放之后的“nike函数”。恰好是高考必考函数之一。其极小值(最优解)和渐近线的意义明确,在实际游戏中必然存在。详见高中教材。
      接下文


      IP属地:上海来自Android客户端3楼2024-10-02 05:54
      回复
        一楼图2的参数被我精心调整到了易解释的状态。接下来逐个解释
        0.9处代表需要产生的敌我位移差。
        1.5处代表发动机推力
        0.2处代表每个发动机自重
        0.8代表飞船发动机之外的重量
        0.3代表敌舰速度
        语言描述不可能全面显示这几个数字如何影响图像。建议打开desmos自行调整这几项参数观察图像变化。
        其中这两个现象非常明显。一是敌舰很快时拐点突变尖锐,发动机不够会代价很大。二是使用核推这种重型发动机时渐近线变陡,后期燃料消耗持续变大。
        今天最值得一提的结论是核推铺多了迟早破产
        感觉核推适合推重比2到3的慢速大船。更战斗机群飙船还是要靠化推。现在我满脑子都是主动凿开船体板搞战术分级之类的骚想法感觉造大小船临场撤退应对不同情况也很赚。显然是作者鼓励的玩法。


        IP属地:上海来自Android客户端4楼2024-10-02 06:18
        回复
          要做游戏的数学推导请一定要结合游戏的实际代码。我看过很多推了半天结果程序里的公式完全是另一种。


          IP属地:福建来自iPhone客户端5楼2024-10-02 08:16
          收起回复
            是不是我玩的难度太低了。前期因为一直在建造,都没装发动机。后期有了脊峰基本一轮决胜负。拆出来的燃料都好几万。


            IP属地:江苏来自iPhone客户端6楼2024-10-06 09:24
            收起回复
              SOS代码里面对大船有推重比惩罚,
              2公斤铁球和两个1公斤铁球连起来下落速度不一样(
              你要跑得快只有飞天座椅,要体积大又飞得快,只有用热管并联飞天座椅。


              IP属地:湖南来自Android客户端7楼2024-10-06 13:48
              收起回复
                气死我辣,居然在这种最逆天的地方出问题。
                为了测试楼上说的大船惩罚,我造了一把重量应该为6的椅子,然后再椅子上逐个增加重量应该为500的核能发动机,观察重量示数的变化。
                结果如图所示,左边这列横轴是应该有的重量,右边那列纵轴是舰船数据界面算出来的重量。
                在重量很小或很大的时候曲线几乎都是直的。所以我以前自己玩时候没有发现问题。但是重量很大时候边际增长率大约是1.35倍。同时这个曲线应该有专门设计。加速是微弱但连续的。最后3个点之间仍然存在10^-5级别的加速度
                还好我的船从1000点重量附近就开始重复模块化,吃到的惩罚不算严重。对于重量上万的大船来说重量视作乘以1.4应该也足够计入惩罚了。
                这下不得不等个大佬翻代码了


                IP属地:上海来自Android客户端8楼2024-10-06 15:12
                回复
                  找到了模组设置里的开发者模式。这下彻底看不懂了。
                  500也是我自己凑整猜的,这个单独的490.46肯定也是受到了自己的修正产生的。数值修正之前具体是多少也看不出来。低重量下的修正效果可能比我想象的更猛
                  退一步从玩家研究的角度说,足以描述现象也就够了


                  IP属地:上海来自Android客户端9楼2024-10-06 15:38
                  回复
                    话说sos2的数据上行链路怎么搞,超凡科技一整栏的科技都要这个,显示出自sos2,也不知道怎么搞到,是只有飞天后才能获得吗


                    IP属地:河北来自Android客户端10楼2024-10-09 06:39
                    收起回复
                      现版本有多引擎推力惩罚,这显然是不合理的,但代码就是这样的。


                      IP属地:湖南来自Android客户端11楼2024-10-11 16:38
                      回复