切换语言: Deutsch English 日本語 한국어 Português, Brasil Русский

Transport belts/Physics/zh: Difference between revisions

From Official Factorio Wiki
Jump to navigation Jump to search
Zippy (talk | contribs)
m 颜色非常适合酷孩子! 🎨
Cardinal (talk | contribs)
m Translation verification.
 
(6 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{Languages}}{{sublinks}}
{{Languages}}{{Translation verification|revisionID=207014}}
在异星工厂中所有屏幕上的物品都在内存中是一个真实的对象并且遵循着游戏引擎的规则。作为一个模拟游戏,这不是典型的常见的。一个贴切的例子就是在旧版本的模拟城市中,并没有模拟每一个城市中的住户。
异星工厂中的{{L|Belt transport system}}是游戏中最为精密的模拟系统之一。箱子等容器中的物品仅以物品组的形式存储,而位于连续的传送带上的物品则作为一个[https://www.factorio.com/blog/post/fff-176 整体]进行移动,这是一种针对性能的优化措施。但最终,传送带上的每个物品都作为一个独立对象单独模拟,尤其是在机械臂抓取或放置物品时。这导致了一些复杂的行为,尤其是在涉及到[[Inserters/zh#机械臂运输量|机械臂运输量]]的时候。


这是受限于CPU的性能。实时物理模拟最多同时有100,000个对象,对于一个模拟游戏来说是少见的。异星工厂游戏引擎创建了一个精确的、可复用的模拟异星工厂世界,它是如此的精确,可以被用于计算一些惊人惊异的传送带的特性。
== 传送带属性 ==
* '''密度''':特定长度的传送带上可以放置的物品数量,以每[[Map structure/zh#格|格]]中每条线路上的物品数衡量。在直线传送带上,最大密度是4个/格,这与传送带或物品的类型无关。传送带密度可能与地面物品(使用Z键丢弃)的密度不一致。可以通过使用{{L|Stack inserter}}{{SA}}增加密度,但每格中每条线路上的物品组数量最多为4组。


== 计算什么 ==
* '''速度''':出于实际考虑,物品在传送带上的速度单位通常是格/秒。注意,在游戏内部,实际使用的单位是位置(1/256格)/刻(1/60秒),这会在下文详细说明。{{L|Transport belt}}的速度是1.875格/[[time/zh#|游戏秒]],{{L|Fast transport belt}}的速度是基础传送带的2倍,{{L|Express transport belt}}的速度是基础传送带的3倍,而{{L|Turbo transport belt}}{{SA}}的速度是基础传送带的4倍。
传送带有一些可以被计算的东西:
* '''长度'''(或者面积)。物品的碰撞盒是0.28 × 0.28[[tile/zh|格]]的。所以10个物品在传送带上排成一列,不移动的时候,其长度为2.8格。
* '''速度'''。物品在传送带上的速度单位常用的是'''格/秒'''或者'''格/分钟'''。注意,实际上它们的计算单位是'''格/刻(1/60秒)'''。
* '''密度'''。参见长度。密度是一格传送带上可以放置多少物品:多少物品可以按一列/一侧放置。平均值是每格3.571个物品或者每格7.143个物品(=两侧)。但是在静止或者移动时,有不同的密度——可以做深入阅读!
* '''吞吐量'''。每分钟每格有多少物品被运输到下一格。计算单位是'''物品/秒'''或者更常用的是'''物品/分钟'''。


更多有关内容可以参见[http://www.factorioforums.com/forum/viewtopic.php?f=5&t=1213&p=8450&hilit=physics#p8450 这里]。
* '''吞吐量''':每秒从一格传送带移动到下一格传送带的物品数量,计算方法是密度(个/格)乘以速度(格/秒)。例如,对于基础传送带,单条线路的吞吐量是 4 * 1.875 = 7.5个/秒,而对整条传送带(两条线路)而言,吞吐量翻倍,即15个/秒。


== 理论 ==
* '''压缩''': 传送带上的物品之间如果紧密排列没有空隙,则被称为''完全压缩'',否则就只是部分被压缩,且无法达到最大吞吐量。将物品输入传送带的实体——{{L|Inserters}}、{{L|Splitters}}、从侧面接入的另一条传送带,采矿机等等——可以将物品间的小空隙[[Version history/0.16.0#0.16.25|扩大]]为足够整个物品放入的空间。这意味着传送带在物品开始积压时会自动达到完全压缩状态。
这里的所有数据是取自传送带的原型。


* '''线路''': 传送带有两条平行的线路(即两侧,或称为“半带”),无论传送带如何弯曲,每条线路的密度和速度都是恒定的,且其值相互独立。转角传送带的两条线路速度相同,但内侧线路的长度比外侧线路短,所以内侧线路的物品会先于外侧线路的物品离开转角。
== 传送带速度 ==
根据上述数据,可以计算出四种传送带的速度和吞吐量。以下数据已经过游戏中实际测量证实无误。
{| class="wikitable"
{| class="wikitable"
|+预期结果
! rowspan=2 | 传送带类型 || colspan=2 | 速度 || colspan=4 | 吞吐量
|-
! scope="col" | 传送带类型
! scope="col" | 速度因子
! scope="col" | 速度(格/刻)
! scope="col" | 速度(格/秒)
! scope="col" | 速度(格/分)
! scope="col" | 密度(单侧) 物品/格
! scope="col" | 预期吞吐量(双侧) 物品/秒
! scope="col" | 预期吞吐量 物品/分
|-
|<span style="color:#FFFFC8">基础</span>
|align="center" |1
|align="center" |0.03125
|align="center" |1.875
|align="center" |112.5
|align="center" |3.571
|align="center" |13.39125
|align="center" |803.475
|-
|<span style="color:#FFB4B5">快速</span>
|align="center" |2
|align="center" |0.0625
|align="center" |3.75
|align="center" |225
|align="center" |3.571
|align="center" |26.7825
|align="center" |1606.95
|-
|-
|<span style="color:#D7D7FF">高速</span>
! 系数 || 格/秒 || 单线路<br>个/秒 || 单线路<br>个/分钟 || 双线路<br>个/秒 || 双线路<br>个/分钟
|align="center" |3
|- align="center"
|align="center" |0.09375
| align="left" | {{Imagelink|Transport belt}} || 1 || 1.875 || 7.5 || 450 || 15 || 900
|align="center" |5.625
|- align="center"
|align="center" |337.5
| align="left" | {{Imagelink|Fast transport belt}} || 2 || 3.75 || 15 || 900 || 30 || 1800
|align="center" |3.571
|- align="center"
|align="center" |40.17375
| align="left" | {{Imagelink|Express transport belt}} || 3 || 5.625 || 22.5 || 1350 || 45 || 2700
|align="center" |2410.425
|- align="center"
| align="left" | {{Imagelink|Turbo transport belt|space-age=yes}} || 4 || 7.5 || 30 || 1800 || 60 || 3600
|}
|}


我们在此可以假定,密度都是一致的,所以运输数量是速度的反映。
== 传送带上的物品 ==
如前所述,物品在传送带上以压缩状态和一定密度占据空间。事实上,传送带上的每个物品在任意时刻都精确地位于某一格传送带上。
 
例如,尽管在下图中,一个物品可能看起来有一半位于一格传送带上,而另一半位于下一格传送带上,但它实际上会被计入两格传送带的某一格上:
* 如果物品所在的那格传送带停止运行,物品也将停止移动;否则物品将继续传送——没有其它中间状态。
* 如果将传送带接入信号网络,并设置为[[Belt_transport_system/zh#信号网络|读取运载物]],可以发现物品会精确地被某一格传送带读取。
* 机械臂只能抓取逻辑上位于其正前方那一格传送带上的物品,而无法抓取相邻一格传送带挤入的物品。
 
从这个意义上来说,可以将传送带上的物品看做具有一定最小间距的点,而非具有一定面积的相邻物体。对于涉及传送带的计算和包含传送带的信号网络而言,这些“中心点”在物品图标上的位置并不重要,尽管看上去它们确实位于物品的中心:
 
[[Image:Belts-with-one-tick-offsets.png|center]]
 
在图中,相邻传送带之间有1刻的延迟。在同一刻停止上面一排传送带的运行,导致最下端的物品以不同长度突出。最左侧传送带上的物品几乎向下一格传送带格突出了半格的长度,这意味着物品的中心点距离停止的传送带格的边缘最近。
 
下面的示意图表展示了某些物品在两条直线{{L|Fast transport belt}}上移动时,每一刻的输出信号情况。物品的中心点标识为<code>*</code>。(传送格1与传送格2之间的空格只是为了看得更清楚——在游戏中,两格传送带间并没有空隙。)
 
<pre>
刻  传送格 1                        传送格 2                                          传送格1输出信号  传送格2输出信号
      |------------------------------| |------------------------------|        脉冲  持续            脉冲  持续
  0        <---*-->  <---*--> <---*-- ><---*-->            <---*-->          0        3                0      2
  1          <---*-->  <---*--> <---* --><---*-->            <---*-->        0        3                0      2
  2            <---*-->  <---*--> <-- -*--><---*-->            <---*--        0        2                1        3
  3              <---*-->  <---*--> < ---*--><---*-->            <---*        0        2                0        3
  4  ->            <---*-->  <---*-->  <---*--><---*-->            <--        0        2                0        2
  5  *-->            <---*-->  <---*- -> <---*--><---*-->            <        1        3                0        2
  6  --*-->            <---*-->  <--- *--> <---*--><---*-->                    0        2                1        3
  7  <---*-->            <---*-->  <- --*--> <---*--><---*-->                0        2                0        3
  8    <---*-->            <---*-->  <---*--> <---*--><---*-->              0        2                0        3
</pre>


(注意:基础和快速传送带在测试时达到了最大吞吐量分别是12和20个物品/秒。)
== 传送带位置和长度 ==


== 计算结果 ==
[https://forums.factorio.com/viewtopic.php?f=5&t=70055 精确测量]显示,转角传送带的外侧线路比直线传送带长1.15234375倍,或以分数表示为295/256。 这意味着每格直线传送带有256个''位置''供物品放置,尽管这种精度的位置测量只能通过间接手段完成。
{| class="wikitable"
 
| 这个计算结果是用一个特殊设计的工厂(一个复杂的保障体系,只有在传送带上的物品被统计,一个'''定时器'''可以在准确的时间停止计算)得到的,游戏版本为Factorio v0.6.x,所以这个必须重做。
以下是不同种类传送带的速度和长度,以位置为单位衡量:
参见[http://www.factorioforums.com/forum/viewtopic.php?f=8&t=1144&start=10#p8361 这里]
|}


{| class="wikitable"
{| class="wikitable"
|+简单的直线传送带
! colspan=2 | 类型 || 位置数
|-
|-
! scope="col"| 传送带种类
| colspan=2 | {{L|Transport belt}}速度,每刻 || align="center" | 8
! scope="col"| 吞吐量 物品/分
! scope="col"| 吞吐量 物品/秒
! scope="col"| 效率(100%为达到预期)
! scope="col"| 备注
|-
|-
|<span style="color:#FFFFC8">基础</span>
| colspan=2 | {{L|Fast transport belt}}速度,每刻 || align="center" | 16
|align="center" | 719
|align="center" | 11.98
|align="center" | 90%
|
|-
|-
|<span style="color:#FFB4B5">快速</span>
| colspan=2 | {{L|Express transport belt}}速度,每刻 || align="center" | 24
|align="center" | 1184
|align="center" | 19.73
|align="center" | 74%
|这'''不是'''基础传送带的两倍快!它只是1.65倍快。
|-
|-
|<span style="color:#D7D7FF">高速</span>
| colspan=2 | {{L|Turbo transport belt}}{{SA}}速度,每刻 || align="center" | 32
|align="center" | 1775
|-
|align="center" | 29.58
| colspan=2 | 传送带上单个物品的长度(任意速度下) || align="center" | 64
|align="center" | 74%
|大约是基础传送带的2.5倍快。
|}
 
 
{| class="wikitable"
|+有4个转弯的传送带(2左2右)
|-
|-
! scope="col"| 传送带种类
| colspan=2 | 直线传送带和地下传送带的线路长度 || align="center" | 256
! scope="col"| 吞吐量 物品/分
! scope="col"| 备注
|-
|-
|<span style="color:#FFFFC8">基础</span>
| colspan=2 | 分流器输入端口线路长度 || align="center" | 179 (128+51)<sup>1</sup>
|align="center" | 477-486
| 大约1.5倍慢。这是因为传送带'''内侧'''的物品转弯速度只有一半。
|-
|-
|<span style="color:#FFB4B5">快速</span>
| colspan=2 | 分流器输出端口线路长度 || align="center" | 128
|align="center" | 786-792
|
|-
|-
|<span style="color:#D7D7FF">高速</span>
| colspan=2 | 转角传送带内侧线路长度 || align="center" | 106
|align="center" |1038-1042
|
|}
 
 
{| class="wikitable"
|+有4个转弯的传送带(2左2右),但是在转弯处用更快的传送带
|-
|-
! scope="col"| 传送带种类
| colspan=2 | 转角传送带外侧线路长度 || align="center" | 295
! scope="col"| 吞吐量 物品/分
! scope="col"| 备注
|-
|-
|基础和转弯处的快速传送带
| style="border-right: 0px" | 一条直线传送带近端汇入另一条传送带或地下传送带出口的长度
|align="center" | 674-683
| style="border-left: 0px" | [[Image:Sideload-late.gif]] || align="center" | 68
|
|-
|-
|快速和转弯处的高速传送带
| style="border-right: 0px" | 一条直线传送带远端汇入另一条传送带或地下传送带入口的长度
|align="center" | 1058-1061
| style="border-left: 0px" | [[Image:Sideload-early.gif]] || align="center" | 188
|快速传送带和转弯处用高速传送带看起来比全用高速传送带更快!
|}
|}
<sup>(1)</sup>包含51个位置的缓存区域[https://forums.factorio.com/viewtopic.php?p=554468#p554468]


== 结论 ==
第一个令人惊讶的结论是,理论上的吞吐量与实际的测量值不同。大多是测量误差。第二个结论是,传送带的速度越快,其效率越低。这不是明显能看到的。预期的结论是,快速传送带的运输量是基础传送带的2倍,因为它比基础的快2倍(1.875格/秒和3.75格/秒)。
这种差异的原因是因为在传送带运行时,物品之间的距离。物品在传送带上运输时,不能完全紧凑,他们之间有一个小距离。这跟交通拥堵的问题一样:你不可能在前车起步时马上就跟上,你需要等前车起步后有大约1/2秒的反应时间,然后你再起步。同样的传送带上的物品的反应时间是1/60秒或1刻[这不是非常精确,但是不会超过2刻;这可以通过计算通过物品的驻波是多少来得到(这需要建立一个非常复杂的测试工厂)]。当你有一条完全放满东西的传送带,在某一时刻移除一个物品,你可以看到这个反应时间在物品间以驻波的形式存在。当你比较驻波的速度时,你可以非常清楚的看到,不同种类的传送带中驻波的速度是完全相同的。


基础传送带上物品的反应距离是
举例说明,利用这些数据,我们可以计算出基础传送带的速度:
  (1.875 格/秒)/1刻 = 1.875格/秒 / 1/60秒 = 0.031125格
或者可以说:一个物品在传送带上的运动时不是0.28格长了,它是0.31125格,多了11.2%。


对于所有传送带:
: 8 (位置/刻) / 256 (位置/) * 60 (刻/秒) = 1.875 /秒
  基础传送带: 0.28格 + 0.03125格 = 0.31125格 => 11.2%
  快速传送带: 0.28格 + 0.0625 格 = 0.3425 => 22.3%
  高速传送带: 0.28格 + 0.09375格 = 0.37375格 => 33.5%
这就可以解释基础传送带的90%效率和快速传送带的74%效率(所有内部测量误差),但是不能解释高速传送带的效率。这需要更深入的研究。


这清楚的展示了,更快的传送带上运动的物品有更大的间距。更大的间距就意味着密度的降低以及并没有理论上那么多的物品被运输了。
相应的单条通道吞吐量为:


(这可能解释了物品运输上的一些问题,但是不要在真实计算中使用这些数字,因为这些必须要重做!)
: 8 (位置/刻) / 64 (位置/个) * 60 (刻/秒) = 7.5个/秒
(这是最终的一个原因:http://www.factorioforums.com/forum/viewtopic.php?f=8&t=3630)


== 参见 ==
== 参见 ==
* [[Transport network/zh|常规物流系统]]
* {{L|Belt transport system}}
** [[Transport belts/zh|传送带]]
* [https://www.factorio.com/blog/post/fff-276 周五工厂报 #276:传送带物品间距与脚本渲染]
* [http://www.conveyorbeltguide.com/ 真实传送带的一些常用信息]
* [https://www.factorio.com/blog/post/fff-176 周五工厂报 #176:0.15版本中的传送带优化]
* [https://forums.factorio.com/viewtopic.php?f=5&t=70055 传送带精确测量] (基于0.17版本)
* [https://forums.factorio.com/viewtopic.php?p=554468#p554468 关于传送带编号] (来自开发人员boskid)


{{C|Belt transport system}}
{{C|Belt transport system/zh{{!}}#Belt transport system}}

Latest revision as of 09:21, 6 May 2025

异星工厂中的传送带运输系统是游戏中最为精密的模拟系统之一。箱子等容器中的物品仅以物品组的形式存储,而位于连续的传送带上的物品则作为一个整体进行移动,这是一种针对性能的优化措施。但最终,传送带上的每个物品都作为一个独立对象单独模拟,尤其是在机械臂抓取或放置物品时。这导致了一些复杂的行为,尤其是在涉及到机械臂运输量的时候。

传送带属性

  • 密度:特定长度的传送带上可以放置的物品数量,以每中每条线路上的物品数衡量。在直线传送带上,最大密度是4个/格,这与传送带或物品的类型无关。传送带密度可能与地面物品(使用Z键丢弃)的密度不一致。可以通过使用堆叠机械臂增加密度,但每格中每条线路上的物品组数量最多为4组。
  • 速度:出于实际考虑,物品在传送带上的速度单位通常是格/秒。注意,在游戏内部,实际使用的单位是位置(1/256格)/刻(1/60秒),这会在下文详细说明。基础传送带的速度是1.875格/游戏秒高速传送带的速度是基础传送带的2倍,极速传送带的速度是基础传送带的3倍,而超速传送带的速度是基础传送带的4倍。
  • 吞吐量:每秒从一格传送带移动到下一格传送带的物品数量,计算方法是密度(个/格)乘以速度(格/秒)。例如,对于基础传送带,单条线路的吞吐量是 4 * 1.875 = 7.5个/秒,而对整条传送带(两条线路)而言,吞吐量翻倍,即15个/秒。
  • 压缩: 传送带上的物品之间如果紧密排列没有空隙,则被称为完全压缩,否则就只是部分被压缩,且无法达到最大吞吐量。将物品输入传送带的实体——机械臂分流器、从侧面接入的另一条传送带,采矿机等等——可以将物品间的小空隙扩大为足够整个物品放入的空间。这意味着传送带在物品开始积压时会自动达到完全压缩状态。
  • 线路: 传送带有两条平行的线路(即两侧,或称为“半带”),无论传送带如何弯曲,每条线路的密度和速度都是恒定的,且其值相互独立。转角传送带的两条线路速度相同,但内侧线路的长度比外侧线路短,所以内侧线路的物品会先于外侧线路的物品离开转角。

传送带速度

根据上述数据,可以计算出四种传送带的速度和吞吐量。以下数据已经过游戏中实际测量证实无误。

传送带类型 速度 吞吐量
系数 格/秒 单线路
个/秒
单线路
个/分钟
双线路
个/秒
双线路
个/分钟
基础传送带
1 1.875 7.5 450 15 900
高速传送带
2 3.75 15 900 30 1800
极速传送带
3 5.625 22.5 1350 45 2700
超速传送带
4 7.5 30 1800 60 3600

传送带上的物品

如前所述,物品在传送带上以压缩状态和一定密度占据空间。事实上,传送带上的每个物品在任意时刻都精确地位于某一格传送带上。

例如,尽管在下图中,一个物品可能看起来有一半位于一格传送带上,而另一半位于下一格传送带上,但它实际上会被计入两格传送带的某一格上:

  • 如果物品所在的那格传送带停止运行,物品也将停止移动;否则物品将继续传送——没有其它中间状态。
  • 如果将传送带接入信号网络,并设置为读取运载物,可以发现物品会精确地被某一格传送带读取。
  • 机械臂只能抓取逻辑上位于其正前方那一格传送带上的物品,而无法抓取相邻一格传送带挤入的物品。

从这个意义上来说,可以将传送带上的物品看做具有一定最小间距的点,而非具有一定面积的相邻物体。对于涉及传送带的计算和包含传送带的信号网络而言,这些“中心点”在物品图标上的位置并不重要,尽管看上去它们确实位于物品的中心:

在图中,相邻传送带之间有1刻的延迟。在同一刻停止上面一排传送带的运行,导致最下端的物品以不同长度突出。最左侧传送带上的物品几乎向下一格传送带格突出了半格的长度,这意味着物品的中心点距离停止的传送带格的边缘最近。

下面的示意图表展示了某些物品在两条直线高速传送带上移动时,每一刻的输出信号情况。物品的中心点标识为*。(传送格1与传送格2之间的空格只是为了看得更清楚——在游戏中,两格传送带间并没有空隙。)

 刻   传送格 1                         传送格 2                                          传送格1输出信号   传送格2输出信号 
      |------------------------------| |------------------------------|        脉冲   持续            脉冲  持续
  0         <---*-->  <---*--> <---*-- ><---*-->            <---*-->          0        3                0       2
  1           <---*-->  <---*--> <---* --><---*-->            <---*-->        0        3                0       2
  2             <---*-->  <---*--> <-- -*--><---*-->            <---*--        0        2                1        3
  3               <---*-->  <---*--> < ---*--><---*-->            <---*         0        2                0        3
  4   ->            <---*-->  <---*-->  <---*--><---*-->            <--        0        2                0        2
  5   *-->            <---*-->  <---*- -> <---*--><---*-->            <        1        3                0        2
  6   --*-->            <---*-->  <--- *--> <---*--><---*-->                    0        2                1        3
  7   <---*-->            <---*-->  <- --*--> <---*--><---*-->                0        2                0        3
  8     <---*-->            <---*-->   <---*--> <---*--><---*-->              0        2                0        3

传送带位置和长度

精确测量显示,转角传送带的外侧线路比直线传送带长1.15234375倍,或以分数表示为295/256。 这意味着每格直线传送带有256个位置供物品放置,尽管这种精度的位置测量只能通过间接手段完成。

以下是不同种类传送带的速度和长度,以位置为单位衡量:

类型 位置数
基础传送带速度,每刻 8
高速传送带速度,每刻 16
极速传送带速度,每刻 24
超速传送带速度,每刻 32
传送带上单个物品的长度(任意速度下) 64
直线传送带和地下传送带的线路长度 256
分流器输入端口线路长度 179 (128+51)1
分流器输出端口线路长度 128
转角传送带内侧线路长度 106
转角传送带外侧线路长度 295
一条直线传送带近端汇入另一条传送带或地下传送带出口的长度 68
一条直线传送带远端汇入另一条传送带或地下传送带入口的长度 188

(1)包含51个位置的缓存区域[1]


举例说明,利用这些数据,我们可以计算出基础传送带的速度:

8 (位置/刻) / 256 (位置/格) * 60 (刻/秒) = 1.875 格/秒

相应的单条通道吞吐量为:

8 (位置/刻) / 64 (位置/个) * 60 (刻/秒) = 7.5个/秒

参见