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

Transport belts/Physics/zh: Difference between revisions

From Official Factorio Wiki
Jump to navigation Jump to search
m (Category overhaul)
No edit summary
 
(2 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{Languages}}
{{Languages}}
{{sublinks}}
在异星工厂中所有屏幕上的物品都在内存中是一个真实的对象并且遵循着[[Game engine/zh|游戏引擎]]的规则。作为一个模拟游戏,这不是典型的常见的。一个贴切的例子就是在旧版本的模拟城市中,并没有模拟每一个城市中的住户。


这是受限于CPU的性能。实时物理模拟最多同时有100,000个对象,对于一个模拟游戏来说是少见的。异星工厂[[Game engine/zh|游戏引擎]]创建了一个精确的、可复用的模拟异星工厂世界,它是如此的精确,可以被用于计算一些惊人惊异的传送带的特性。
异星工厂中的[[belt transport system/zh|传送带运输系统]]可以称作是游戏中最为精细的模拟系统。箱子及其他容器中的物品只是一个总数,传送带上的物品曾一度[https://www.factorio.com/blog/post/fff-176 优化为整体]进行移动,但现在传送带上的每个物品都是一个独立的对象,包括他们被机械臂抓起或放下时。这将导致一些错综复杂的行为,尤其当涉及到[[Inserters/zh#Inserter_Throughput/zh|机械臂运输量]]的时候。


== 计算什么 ==
在异星工厂中所有屏幕上的物品都在内存中是一个真实的对象并且遵循着游戏引擎的规则。作为一个模拟游戏,这不是典型的常见的。一个贴切的例子就是在旧版本的模拟城市中,并没有模拟每一个城市中的住户。
传送带有一些可以被计算的东西:
* '''长度'''(或者面积)。物品的碰撞盒是0.28 x 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 这里]。
这是受限于CPU的性能。实时物理模拟最多同时有100,000个对象,对于一个模拟游戏来说是少见的。异星工厂游戏引擎创建了一个精确的、可复用的模拟异星工厂世界,它是如此的精确,可以被用于计算一些惊人惊异的传送带的特性。


== 理论 ==
== 传送带属性 ==
这里的所有数据是取自传送带的原型。
* '''密度''':密度指单位长度传送带上可以放置多少物品,计量单位是单侧每[[Map_structure#Tile|格]]物品数。直线传送带的密度是4,这与传送带种类及物品种类无关。传送带密度与把物品扔到地上(使用Z键)的密度有可能不一致。
 
* '''速度''':物品在传送带上的速度计量单位通常是'''格/[[game-second|秒]]''',但需要注意的是,实际计算单位是'''[[Types/Position|位置]](1/256格)/刻(1/60秒)'''。更多内容详见下文。[[transport belt/zh|基础传送带]]的速度是1.875格/秒,[[Fast transport belt/zh|高速传送带]]的速度是基础传送带的2倍,[[express transport belt/zh|极速传送带]]的速度是基础传送带的3倍。
 
* '''吞吐量''':吞吐量指每秒有多少物品从一格运送至下一格,计算方法是密度(物品/格)乘以速度(格/秒)。例如,基础传送带单侧吞吐量是 4 * 1.875 = 7.5物品/秒,双侧吞吐量翻倍,即15物品/秒。
 
* '''压缩''': 传送带上物品之间如果完全没有空间,则被称为''完全压缩'',否则只是部分被压缩,且无法达到最优吞吐量。将物品放到传送带上的设备——[[inserters/zh|机械臂]], [[splitters/zh|分流器]],从侧面引入的另一条传送带,采矿机等等——会将传送带上物品间的小空隙[https://forums.factorio.com/viewtopic.php?f=3&t=57993 扩大为足够物品放入的空间]。这意味着传送带在饱和时会自行达到完全压缩状态。
 
* '''侧''': 传送带有左右两侧,无论传送带如何弯曲,每一侧的密度和速度均为固定值不受影响。转角传送带的两侧速度一样,但内侧比外侧更短,所以内侧物品将比外侧物品先离开转角。
 
== 传送带速度 ==
通过上面的数据,我们可以计算出三种传送带的速度和吞吐量。游戏中的实际情况与下列数据一致。


{| 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" | 预期吞吐量 物品/分
|-
|基础
|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
|-
|快速
|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
|-
|-
|高速
! 传送带类型 || 格/秒 || 单侧, 物品/秒 || 单侧, 物品/分钟 || 双侧, 物品/秒 ||双侧, 物品/分钟
|align="center" |3
|- align="center"
|align="center" |0.09375
| align="left" | {{Imagelink|Transport belt|Transport belt/zh}} || 1 || 1.875 || 7.5 || 450 || 15 || 900
|align="center" |5.625
|- align="center"
|align="center" |337.5
| align="left" | {{Imagelink|Fast transport belt|Fast transport belt/zh}} || 2 || 3.75 || 15 || 900 || 30 || 1800
|align="center" |3.571
|- align="center"
|align="center" |40.17375
| align="left" | {{Imagelink|Express transport belt|Express transport belt/zh}} || 3 || 5.625 || 22.5 || 1350 || 45 || 2700
|align="center" |2410.425
|}
|}


我们在此可以假定,密度都是一致的,所以运输数量是速度的反映。
== 传送带上的物品 ==
 
正如之前所说,物品在传送带上以压缩的状态和一定的密度占据各自空间。事实上,传送带上的每个物品在每个时刻精确地位于某一[[Map_structure#Tile|格]]传送带上。
 
举例来说,尽管看上去一个物品可能一半在一格传送带而另一半在下一格传送带上,它实际上精确地位于其中一格传送带上:
* 如果这个物品所在的那格传送带停止,物品将停止传送;否则物品将继续传送——除此之外没有其他状态。
* 如果用这两个格传送带组成电路网络并对他们传送的物品进行[[Belt_transport_system#Circuit_network|识别]],就能发现这个物品仅被识别了一次。
* 机械臂只能抓取逻辑层面位于其面前传送带格上的物品,无法抓取相邻传送带格的物品。
 
从这个意义上来说,我们可以把传送带上的物品看做相互之间有最小距离的一个个点,这比将其看做一个个相邻且具有一定面积的物品有时更有用。对于涉及传送带的计算和包含传送带的电路系统来说,我们并不关心这些“中心点”在图上的位置,虽然看上去它们是在中心位置:
 
[[Image:Belts-with-one-tick-offsets.png|center]]
 
上面这幅图中,相邻传送带之间有1刻的延迟。在同一时刻停止上面一排传送带格的传输,导致最下端的物品延伸出了不同长度。最左边传送带的物品几乎向下一个传送带格延伸出一半长度,这意味着物品的中心点最接近停止的传送带格的边缘。
 
下面的原理图展示了物品在两个直线[[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个''[[Types/Position|位置]]''供物品放置,尽管物品所在的精确位置只能通过间接手段来测量。


== 计算结果 ==
以下是不同种类传送带以位置度量的速度或长度:
{| 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"| 传送带种类
! scope="col"| 吞吐量 物品/分
! scope="col"| 吞吐量 物品/秒
! scope="col"| 效率(100%为达到预期)
! scope="col"| 备注
|-
|基础
|align="center" | 719
|align="center" | 11.98
|align="center" | 90%
|
|-
|-
|快速
| colspan=2 | [[transport belt/zh|基础传送带]]速度,每刻 || align="center" | 8
|align="center" | 1184
|align="center" | 19.73
|align="center" | 74%
|这'''不是'''基础传送带的两倍快!它只是1.65倍快。
|-
|-
|高速
| colspan=2 | [[Fast transport belt/zh|高速传送带]]速度,每刻 || align="center" | 16
|align="center" | 1775
|align="center" | 29.58
|align="center" | 74%
|大约是基础传送带的2.5倍快。
|}
 
 
{| class="wikitable"
|+有4个转弯的传送带(2左2右)
|-
|-
! scope="col"| 传送带种类
| colspan=2 | [[Express transport belt/zh|极速传送带]]速度,每刻 || align="center" | 24
! scope="col"| 吞吐量 物品/
! scope="col"| 备注
|-
|-
|基础
| colspan=2 | 传送带上一个物品的长度(任意速度下) || align="center" | 64
|align="center" | 477-486
| 大约1.5倍慢。这是因为传送带'''内侧'''的物品转弯速度只有一半。
|-
|-
|快速
| colspan=2 | 一格直线传送带、地下传送带、分流器单侧长度 || align="center" | 256
|align="center" | 786-792
|
|-
|-
|高速
| 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
|快速传送带和转弯处用高速传送带看起来比全用高速传送带更快!
|}
|}


== 结论 ==
举例说明,利用这些数据,我们可以推断出基础传送带的速度:
 
第一个令人惊讶的结论是,理论上的吞吐量与实际的测量值不同。大多是测量误差。第二个结论是,传送带的速度越快,其效率越低。这不是明显能看到的。预期的结论是,快速传送带的运输量是基础传送带的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|常规物流系统]]
* [[Belt transport system/zh|传送带运输系统]]
** [[Transport belts/zh|传送带]]
** [[Transport belts/zh|传送带]]
* [http://www.conveyorbeltguide.com/ 真实传送带的一些常用信息]
* [http://www.conveyorbeltguide.com/ 真实传送带的一些常用信息]
* Jan 04 FFF #276: [https://www.factorio.com/blog/post/fff-276 Belt item spacing & Script rendering]
* Feb 03 FFF #176: [https://www.factorio.com/blog/post/fff-176 Belts optimization for 0.15]
* [https://forums.factorio.com/viewtopic.php?f=5&t=70055 Accurate belt segment measurements] (discusses 0.17)


{{C|Belt transport system}}
{{C|Belt transport system}}

Latest revision as of 05:48, 23 August 2019


异星工厂中的传送带运输系统可以称作是游戏中最为精细的模拟系统。箱子及其他容器中的物品只是一个总数,传送带上的物品曾一度优化为整体进行移动,但现在传送带上的每个物品都是一个独立的对象,包括他们被机械臂抓起或放下时。这将导致一些错综复杂的行为,尤其当涉及到机械臂运输量的时候。

在异星工厂中所有屏幕上的物品都在内存中是一个真实的对象并且遵循着游戏引擎的规则。作为一个模拟游戏,这不是典型的常见的。一个贴切的例子就是在旧版本的模拟城市中,并没有模拟每一个城市中的住户。

这是受限于CPU的性能。实时物理模拟最多同时有100,000个对象,对于一个模拟游戏来说是少见的。异星工厂游戏引擎创建了一个精确的、可复用的模拟异星工厂世界,它是如此的精确,可以被用于计算一些惊人惊异的传送带的特性。

传送带属性

  • 密度:密度指单位长度传送带上可以放置多少物品,计量单位是单侧每物品数。直线传送带的密度是4,这与传送带种类及物品种类无关。传送带密度与把物品扔到地上(使用Z键)的密度有可能不一致。
  • 速度:物品在传送带上的速度计量单位通常是格/,但需要注意的是,实际计算单位是位置(1/256格)/刻(1/60秒)。更多内容详见下文。基础传送带的速度是1.875格/秒,高速传送带的速度是基础传送带的2倍,极速传送带的速度是基础传送带的3倍。
  • 吞吐量:吞吐量指每秒有多少物品从一格运送至下一格,计算方法是密度(物品/格)乘以速度(格/秒)。例如,基础传送带单侧吞吐量是 4 * 1.875 = 7.5物品/秒,双侧吞吐量翻倍,即15物品/秒。
  • 压缩: 传送带上物品之间如果完全没有空间,则被称为完全压缩,否则只是部分被压缩,且无法达到最优吞吐量。将物品放到传送带上的设备——机械臂, 分流器,从侧面引入的另一条传送带,采矿机等等——会将传送带上物品间的小空隙扩大为足够物品放入的空间。这意味着传送带在饱和时会自行达到完全压缩状态。
  • : 传送带有左右两侧,无论传送带如何弯曲,每一侧的密度和速度均为固定值不受影响。转角传送带的两侧速度一样,但内侧比外侧更短,所以内侧物品将比外侧物品先离开转角。

传送带速度

通过上面的数据,我们可以计算出三种传送带的速度和吞吐量。游戏中的实际情况与下列数据一致。

传送带类型 速度 吞吐量
传送带类型 格/秒 单侧, 物品/秒 单侧, 物品/分钟 双侧, 物品/秒 双侧, 物品/分钟
Transport belt.png
基础传送带
1 1.875 7.5 450 15 900
Fast transport belt.png
高速传送带
2 3.75 15 900 30 1800
Express transport belt.png
极速传送带
3 5.625 22.5 1350 45 2700

传送带上的物品

正如之前所说,物品在传送带上以压缩的状态和一定的密度占据各自空间。事实上,传送带上的每个物品在每个时刻精确地位于某一传送带上。

举例来说,尽管看上去一个物品可能一半在一格传送带而另一半在下一格传送带上,它实际上精确地位于其中一格传送带上:

  • 如果这个物品所在的那格传送带停止,物品将停止传送;否则物品将继续传送——除此之外没有其他状态。
  • 如果用这两个格传送带组成电路网络并对他们传送的物品进行识别,就能发现这个物品仅被识别了一次。
  • 机械臂只能抓取逻辑层面位于其面前传送带格上的物品,无法抓取相邻传送带格的物品。

从这个意义上来说,我们可以把传送带上的物品看做相互之间有最小距离的一个个点,这比将其看做一个个相邻且具有一定面积的物品有时更有用。对于涉及传送带的计算和包含传送带的电路系统来说,我们并不关心这些“中心点”在图上的位置,虽然看上去它们是在中心位置:

Belts-with-one-tick-offsets.png

上面这幅图中,相邻传送带之间有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
传送带上一个物品的长度(任意速度下) 64
一格直线传送带、地下传送带、分流器单侧长度 256
转角传送带内侧长度 106
转角传送带外侧长度 295
一条直线传送带远侧汇入另一条传送带或地下传送带出口的长度 Sideload-late.gif 68
一条直线传送带近侧汇入另一条传送带或地下传送带入口的长度 Sideload-early.gif 188

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

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

相应的单侧吞吐量为:

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

参见