“机械动力机器数值分析”的版本间的差异
[未复核版本] | [未复核版本] |
(→粉碎轮) |
(→人话) |
||
第1行: | 第1行: | ||
冬季救援整合包里面的应力相对来说获取困难。为了极致地利用应力以及做好机器匹配,我查阅了相关代码并对其进行了分析。由于本人代码水平也不是很好,也没有编写java的经验,难免有解读错误的地方,望大佬继续补充。 | 冬季救援整合包里面的应力相对来说获取困难。为了极致地利用应力以及做好机器匹配,我查阅了相关代码并对其进行了分析。由于本人代码水平也不是很好,也没有编写java的经验,难免有解读错误的地方,望大佬继续补充。 | ||
== 开始 == | |||
=== 基础 === | |||
1秒是20gametick(20t) | |||
=== 粉碎轮 === | === 粉碎轮 === | ||
第57行: | 第62行: | ||
==== 分析 ==== | ==== 分析 ==== | ||
public static final int CYCLE = 240; | public static final int CYCLE = 240; | ||
prevRunningTicks = runningTicks; | |||
runningTicks += (int) Mth.lerp(Mth.clamp(Math.abs(speed) / 512f, 0, 1), 1, 60); | runningTicks += (int) Mth.lerp(Mth.clamp(Math.abs(speed) / 512f, 0, 1), 1, 60); | ||
runningTicks > CYCLE | if (prevRunningTicks < CYCLE / 2 && runningTicks >= CYCLE / 2) | ||
runningTicks = CYCLE / 2; | |||
if(runningTicks > CYCLE) | |||
完成() | |||
这里的speed就直接是转速了 | 这里的speed就直接是转速了 | ||
第66行: | 第79行: | ||
lerp函数作用是将0-1小数等比放大到一定范围内 | lerp函数作用是将0-1小数等比放大到一定范围内 | ||
由于cycle很小,mc又按t计算,因此处理速度是阶跃的 | |||
观察易得其为两个120的阶跃进度,因此处理速度需要为120的因数才最好,用excel可轻松求出阶跃转速 | |||
==== 人话 ==== | ==== 人话 ==== | ||
下表转速为最佳转速,自行选取即可 | |||
{| class="wikitable" | |||
|转速 | |||
|增速 | |||
|需时(tick) | |||
|筛选 | |||
|产量(每秒) | |||
|- | |||
|1 | |||
|1 | |||
|120 | |||
|120 | |||
|0.166666667 | |||
|- | |||
|9 | |||
|2 | |||
|60 | |||
| -60 | |||
|0.333333333 | |||
|- | |||
|18 | |||
|3 | |||
|40 | |||
| -20 | |||
|0.5 | |||
|- | |||
|27 | |||
|4 | |||
|30 | |||
| -10 | |||
|0.666666667 | |||
|- | |||
|35 | |||
|5 | |||
|24 | |||
| -6 | |||
|0.833333333 | |||
|- | |||
|44 | |||
|6 | |||
|20 | |||
| -4 | |||
|1 | |||
|- | |||
|53 | |||
|7 | |||
|18 | |||
| -2 | |||
|1.111111111 | |||
|- | |||
|61 | |||
|8 | |||
|15 | |||
| -3 | |||
|1.333333333 | |||
|- | |||
|70 | |||
|9 | |||
|14 | |||
| -1 | |||
|1.428571429 | |||
|- | |||
|79 | |||
|10 | |||
|12 | |||
| -2 | |||
|1.666666667 | |||
|- | |||
|87 | |||
|11 | |||
|11 | |||
| -1 | |||
|1.818181818 | |||
|- | |||
|96 | |||
|12 | |||
|10 | |||
| -1 | |||
|2 | |||
|- | |||
|113 | |||
|14 | |||
|9 | |||
| -1 | |||
|2.222222222 | |||
|- | |||
|122 | |||
|15 | |||
|8 | |||
| -1 | |||
|2.5 | |||
|- | |||
|148 | |||
|18 | |||
|7 | |||
| -1 | |||
|2.857142857 | |||
|- | |||
|165 | |||
|20 | |||
|6 | |||
| -1 | |||
|3.333333333 | |||
|- | |||
|200 | |||
|24 | |||
|5 | |||
| -1 | |||
|4 | |||
|- | |||
|252 | |||
|30 | |||
|4 | |||
| -1 | |||
|5 | |||
|} |
2023年1月28日 (六) 22:28的版本
冬季救援整合包里面的应力相对来说获取困难。为了极致地利用应力以及做好机器匹配,我查阅了相关代码并对其进行了分析。由于本人代码水平也不是很好,也没有编写java的经验,难免有解读错误的地方,望大佬继续补充。
开始
基础
1秒是20gametick(20t)
粉碎轮
分析
粉碎轮速度相关的代码为
inventory.remainingTime = recipe.isPresent() ? recipe.get().getProcessingDuration() : 100;
crushingspeed = compound.getFloat("Speed");
float speed = crushingspeed * 4;
float processingSpeed =Mth.clamp((speed) / (!inventory.appliedRecipe ? Mth.log2(inventory.getStackInSlot(0).getCount()) : 1), .25f, 20);
inventory.remainingTime -= processingSpeed;
其中crushingspeed就是我们给的转速/12.5,这个速度取速度慢的轮,所以我们统一按两轮等速讨论
每次处理所需要的总进度如果配方有写就按配方,没有就是100(一般都是100)
首先看条件,假如已经吸入了物品(即不是掉落物形态),除数为log2(物品数量),否则按1
但实际上这个没啥用,因为我们都采用溜槽等方式直接跳过了吸入过程,去除了吸入所需时间,因此我们直接按着已吸入计算即可
clamp的作用是限定范围,高于最大值就等于最大值,小于最小值就等于最小值,这里的上下限是0.25和20
为了方便讨论,我们提出一个问题,假设我要总共处理a个物品,可用应力为定值b,单个机器单次处理y个,转速x,求处理总用时t
已知单个机器(两个粉碎轮)rpm为16,由此可以得可用机器数量k=b/16x
我们先假设clamp函数不起作用,不难列出如下公式
其中a,b,T=100为问题一开始就确立的定值,可操作变量为x,y
易得处理总时在一定的总应力下与转速无关,单个机器单次处理量越大处理总需时越小
在这个结论的基础上我们再讨论clamp函数的影响
易知单个机器处理初始速度为
另v分别等于0.25与20,我们可以得出,上方公式的适用范围
高于红线则转速无效,低于蓝线则有增益
人话
在确定总应力下,处理耗时只与单次处理量有关
直接用智能溜槽喂64是最佳选择
粉碎轮转速调成1即可
单位时间产量与转速成正比,1速64堆叠下粉碎轮每秒可处理3.2个物品
辊压机
分析
public static final int CYCLE = 240;
prevRunningTicks = runningTicks;
runningTicks += (int) Mth.lerp(Mth.clamp(Math.abs(speed) / 512f, 0, 1), 1, 60);
if (prevRunningTicks < CYCLE / 2 && runningTicks >= CYCLE / 2)
runningTicks = CYCLE / 2;
if(runningTicks > CYCLE)
完成()
这里的speed就直接是转速了
lerp函数作用是将0-1小数等比放大到一定范围内
由于cycle很小,mc又按t计算,因此处理速度是阶跃的
观察易得其为两个120的阶跃进度,因此处理速度需要为120的因数才最好,用excel可轻松求出阶跃转速
人话
下表转速为最佳转速,自行选取即可
转速 | 增速 | 需时(tick) | 筛选 | 产量(每秒) |
1 | 1 | 120 | 120 | 0.166666667 |
9 | 2 | 60 | -60 | 0.333333333 |
18 | 3 | 40 | -20 | 0.5 |
27 | 4 | 30 | -10 | 0.666666667 |
35 | 5 | 24 | -6 | 0.833333333 |
44 | 6 | 20 | -4 | 1 |
53 | 7 | 18 | -2 | 1.111111111 |
61 | 8 | 15 | -3 | 1.333333333 |
70 | 9 | 14 | -1 | 1.428571429 |
79 | 10 | 12 | -2 | 1.666666667 |
87 | 11 | 11 | -1 | 1.818181818 |
96 | 12 | 10 | -1 | 2 |
113 | 14 | 9 | -1 | 2.222222222 |
122 | 15 | 8 | -1 | 2.5 |
148 | 18 | 7 | -1 | 2.857142857 |
165 | 20 | 6 | -1 | 3.333333333 |
200 | 24 | 5 | -1 | 4 |
252 | 30 | 4 | -1 | 5 |