【OC】【标准化】树场速度计算

大家好,我是墨鱼服的mackler


随着FTF的出现和发展,现在越来越多的高速树场设计涌现出来,相互之间为了几百几千的提高而较劲着,然而树场的运行速度是存在随机性的,而大家测速通常都是测试1分钟,然后乘以60作为一个小时的产量,然而一分钟相差1棵树,最后计算结果也相差了三四百,而通常测试相差的远远不止1棵,因此几百几千的所谓提高有时候只是测量误差。


因此本贴将给大家带来非常精确的树场速度计算方法,并且以此为树场进一步提速做出一些指导。

楼主 maple_in_thu  发布于 2015-01-09 20:01:00 +0800 CST  
树场以机械为主,时序和延时基本是固定的,但是有两个存在随机分布的量,造成了大家测量结果的不可靠。
1.每棵树的产出
2.树长出的时间
第一种相对容易解决,现在也有很多计数方式是每分钟多少棵树,回避了每棵树的计算,但让人对实际产量的感受不够直观。第二种则是无论如何也回避不了了。

楼主 maple_in_thu  发布于 2015-01-09 20:04:00 +0800 CST  
第一个问题解决很简单,查阅代码就能得到答案,mc中树木的生长代码中,每种树都有几个基本高度,然后再在一个范围内取一个随机的整数叠加上去。代码中的随机函数可以看作是均匀分布,所以树的平均高度,通常都是树的最大高度和最小高度的平均。
以高速树场中最常用的白桦为例,白桦木最低是5,最高7,平均值是6

楼主 maple_in_thu  发布于 2015-01-09 20:07:00 +0800 CST  
第二个问题涉及简单的随机分布的计算,看不懂的可以直接看结论,首先讲解一下树生长的时间规律,这里我们忽略掉树的自然生长,仅考虑骨粉的使用。


树的生长有2个阶段,每次撒一个骨粉,mc会取0~1.0之间的一个随机数,随机数小于0.45,则生长一个阶段,生长了两个阶段树苗就变成了树。


基本知识就这些。下面推导树场中树木生长,平均究竟要用多少时间。

楼主 maple_in_thu  发布于 2015-01-09 20:12:00 +0800 CST  
第一步先计算撒第x次骨粉时树苗长成了树木的概率px
这个概率相当于前x-1次骨粉中有一次让树苗生长了第一个阶段,同时第x次骨粉让树苗生长了第二个阶段。
前者的概率为(x-1)*0.45*0.55^(x-2),后者概率为0.45
因此px(x)=(x-1)*(0.45^2)*(0.55^(x-2))


接下来考虑现在多发射器一起为一个树苗喷洒骨粉,N个发射器每次同时发一次,那么如果上面的x≤N,则发射器发射1次,树苗就长成了树木,若N<x≤2N,则发射器发射2次。
因此发射器发射y次时,树苗长成树木的概率py为
py(y)=∑px(i),(i=N*y, N*y-1, N*y-2, ... , N*y-(y-1))


这时候就可以算树苗在N发射器齐发的情况下,平均需要多少次发射了,期望值ey为
ey=∑i*py(i),(i=1, 2, 3, 4, ... , ∞)


这个无穷级数的解析表达式化建起来比较麻烦,我就直接取了N为1,2,3,4直接数值求解出值了。如下
N=1, ey=4.444444
N=2, ey=2.451150
N=3, ey=1.787229
N=4, ey=1.463564
N表示树场有多少个发射器,ey表示树苗平均需要几次撒骨粉才能变成树木

楼主 maple_in_thu  发布于 2015-01-09 20:29:00 +0800 CST  
现在随机的问题解决了,再来讨论树场的周期究竟有多长。
先对树场的周期做个定义,树场周期的起点和终点定义为树木长出的瞬间,而树场周期则是连续两次树木长出瞬间间隔的时间。


现在再将一个树场周期分解为2部分,分界点为树苗第一次被发射器喷骨粉的瞬间。


从树木长出到新放的树苗第一次被发射骨粉,是树场周期第一阶段,从树苗第一次被发射骨粉,到树苗长成树木,是树场周期第二阶段。


第一阶段再作一个细的划分,分界点是泥土可以再次被放置树苗的瞬间,从树木长出瞬间到树苗可以放置的瞬间,是机械时序阶段,从可以放置树苗,到放置的树苗第一次被发射器喷洒骨粉,是放置树苗阶段。


机械时序阶段的时间取决于树场的时序设计,例如NTF的机械时序阶段为4.5 tick。

楼主 maple_in_thu  发布于 2015-01-09 20:42:00 +0800 CST  
【重要部分】
绝大多数树场的骨粉喷洒都是由高频时钟驱动的,高频时钟一个tick是上升沿,一个tick下降沿,交替出现,频率为5Hz,周期为2tick。


仔细看第一阶段的定义。
第一阶段的起始时刻为木头生成的瞬间,这个瞬间同时也是发射器发射骨粉的瞬间,也就是高频时钟上升沿的瞬间。
第一阶段的终止时刻为新放置的树苗第一次被喷射骨粉的瞬间,这个瞬间也是发射器发射骨粉的瞬间,也就是高频时钟上升沿的瞬间。


因此第一阶段为高频时钟的两个上升沿间距,其中必然包含了整数个时钟周期,因此第一阶段时间长度必然是2 tick的整数倍。
============================================
接下来的第二阶段是从第一次被骨粉喷洒到长成木头,而发射器连续两次喷洒之间的间隔是2tick,因此第二阶段的平均时间是2*(ey-1),忘记ey是什么的往上翻。
同时第二阶段每次时间长度虽然不一定相同,但第二阶段的开始和终止时间点也同样满足上述性质,因此第二阶段时间长度必然也是2 tick整数倍。
因此每个树场周期都是2 tick整数倍。
同时玩家右键按住不放时,对游戏输入的右键相当于2 tick一次,因此树场周期是右键周期的整数倍,两者的相位差不会改变。
============================================
综合上述结论,我们再来梳理一下。
在机械时序阶段的时间是固定的,例如NTF是4.5 tick
在4.5 tick之后的第一次右键(也就是放下树苗的事件)可能发生在4.5、5、5.5、6当中其中的任意一个。
而4.5 tick之后的第一次发射器喷骨粉,由于需要满足2tick要求,最近的一次应当发生在6 tick,此时树苗已经放置,且第一次被发射器喷骨粉,因此树场进入第二阶段,第二阶段又经历2tick整数倍的时间,重新回到第一个周期,由于树场周期是右键周期的整数倍,因此上一次在4.5 tick放置树苗,下个周期还会在4.5tick放置,保持不变,则第一个阶段的结束时间也保持不变为6 tick,而第二阶段的结束时间平均值为2*(ey-1),对于NTF这样的四发射树场来说,是0.927 tick

楼主 maple_in_thu  发布于 2015-01-09 21:04:00 +0800 CST  
因此我们得到如下重要的结论:


树场周期第一阶段为固定值,长度为2 tick整数倍
树场周期第二阶段的均值为2*(ey-1)
其中ey如下,N为发射器数量:
N=1, ey=4.444444
N=2, ey=2.451150
N=3, ey=1.787229
N=4, ey=1.463564

楼主 maple_in_thu  发布于 2015-01-09 21:07:00 +0800 CST  
因此对于特定的N,树场周期的可能值仅有有限的几个。
N=1时,可能的树场周期为(第一部分分别为2tick、4 tick、6tick、8tick)
0.888888秒、1.088888秒、1.288888秒、1.488888秒。
对应的效率为(原木/小时)
24300、19837、16758、14507

楼主 maple_in_thu  发布于 2015-01-09 21:11:00 +0800 CST  
【结论】
如下表,竖着的1,2,3,4是N,即你的树场使用了多少发射器并发,横着的则是表示第一阶段的tick数。表中的数则表示每小时的产出,所有的树场的真实效率均值都应当是在这个表中。

至于第一阶段tick数和机械时序阶段的关系,如果机械时序阶段时间比2n tick 短至少1.5 tick,则可以确保第一阶段时间落在 2n,否则可能会落到2(n+1),所以第一阶段2 tick这一栏基本可以放弃了。NTF目前处于6 tick这一栏。


所以想知道自己的树场是什么速度,测试多组数据,得到一个大致的值,再根据发射器的数量,对照表中最接近的数。


例如FTF,实验测得23000左右,对应表中22560
例如NTF,实验测得36000左右,对应表中31181


注意虽然是大致的值,也一定要多测量几次!里如NFTF测了25000,但实际仍然是22560。

楼主 maple_in_thu  发布于 2015-01-09 21:28:00 +0800 CST  
【提速指导】
现在NTF已经做到了4发射,第一阶段稳定为6 tick,想按照图中的提高到4 tick,相当于机械时序阶段只能有2.5 tick,这个已经基本不可能了。
想进一步提高速度,唯有突破上述模式。


注意到我在上述讨论中,给树场加入了两个常见的限定
1. 树场的高频时钟是连续运行的,和树场的机械相互独立的。
2. 树场的多个发射器是同时发射,周期都是2 tick。


而NTF将机械时序阶段压缩到了4.5 tick,在放置树苗阶段却等待了1.5 tick,这实在是十足的浪费。
可以做的改进
1.将高频时钟在每个树场周期和树场同步一下,每次在5 tick时候输出上升沿信号,让第一阶段缩短到5 tick,其效率也会随之提升到36000+
2.将多个发射器在不同tick交替发射,例如每 tick交错,相当于5 tick时候就进入了第二阶段。如果每gt交错,速度会更快。


当然,如果能把机械时序部分进一步压缩,那自然效率也会增长。

楼主 maple_in_thu  发布于 2015-01-09 21:37:00 +0800 CST  
最后求精@天空之城TCD@婴垣帝凤

楼主 maple_in_thu  发布于 2015-01-09 21:39:00 +0800 CST  
更正一下,交替不会起到加速效果

楼主 maple_in_thu  发布于 2015-01-10 10:28:00 +0800 CST  
更正!此贴更正请看http://tieba.baidu.com/p/3519155337

楼主 maple_in_thu  发布于 2015-01-10 20:30:00 +0800 CST  

楼主:maple_in_thu

字数:3551

发表时间:2015-01-10 04:01:00 +0800 CST

更新时间:2016-03-08 01:00:22 +0800 CST

评论数:67条评论

帖子来源:百度贴吧  访问原帖

 

热门帖子

随机列表

大家在看