[水]BE树场速度计算标准
redstone_machinery_communication吧
全部回复
仅看楼主
level 8
_0 楼主
如果有误,欢迎指正
2019年02月23日 16点02分 1
level 8
_0 楼主
这个其实本来应该作为之前的树苗生长原理的续集,但是考虑到这些内容的独立性以及重要性,我还是打算单独开一贴说一下。
本人高三,其实在刚刚上高中的时候就想尝试理清这些东西,无奈数学能力有限,而且当时BE树苗生长的原理并不清晰,所以拖了整整两年才整理出思路。
首先BE并没有源码,以下计算基于我对BE树苗生长的理解和我浅陋的高中水平数学知识。理论结果经过验证和实际基本吻合,所以应该至少不会有太大的偏差。
感谢@maple_in_thuhttps://tieba.baidu.com/p/3518020411以及https://tieba.baidu.com/p/3519155337给我的启发,感谢各位研究BE树场的前辈们在没有源码的情况下用汗水摸索总结出的树苗生长规律。
2019年02月23日 16点02分 2
level 8
_0 楼主
首先计算预催熟成功率。
之前在树苗生长原理里已经提到,第二阶段的树苗在被阻碍的情况下得到一次成功的生长尝试,会出现回退到第一阶段的现象,这点造成BE树场的预催熟机制和je有显著的不同。
每次树苗进行生长尝试都会有0.45的概率成功,所以无疑第一阶段的树苗接受一次催熟后有0.45的概率会生长到第二阶段,第二阶段的树苗接受一次生长后也会有0.45的概率回退到第一阶段。
很容易看出每次生长尝试都是互相独立的,服从二项分布。所以在接受n次催熟后有效催熟的次数为k的概率:
P(x=k) = n!/(k!(n-k)!) * 0.45^k * *(1-0.45)^(n-k)
然后不难理解的是,当有效催熟次数为奇数时,树苗处于第二阶段,当有效催熟次数为偶数时,树苗处于第一阶段。因为树苗会在第一和第二阶段之间反复。所以处于第二阶段的概率,也就是我们要求的预催熟成功率为:
P(n) = ∑P(x=i),(i=1,3,5,···,n,n为奇数 或 i=1.3.5,···,n-1,n为偶数)
为了简化计算,构建函数:
f(x)=(0.45x+0.55)^n,n∈N
展开后偶数项系数之和就是上面的概率。计算偶数项系数之和只要赋值就行了:
(f(1)-f(-1))/2
化简了后的式子就是我们需要的答案:
P(n) = (1-0.1^n)/2
这里其实还回答了一个疑问,既然存在回退现象,那么BE的预催熟是不是控制在一次最好呢?如果只预催熟一次,那树苗只会生长到第二阶段,不可能发生回退。然而通过上面的式子可以知道,预催熟成功率P(n)是单调递增的,也就是说预催熟的次数越多,处于第二阶段的概率还是越大的,不用担心过犹不及的问题。可惜第一个骨粉下去就有了0.45的概率,而后面只是无限逼近0.5而已。所以实际上从第二个骨粉起,提升不会超过5%。由此来看,预催熟次数多了其实没什么用,只要有一次就差不多了,除非真的不惜代价要压榨效率。
2019年02月23日 17点02分 3
level 8
_0 楼主
补图,预催熟成功率图像~
看得出来预催熟超过一次后就已经接近极限了,两次后,函数基本都成平的了,成功率几乎没有提升。。
2019年02月23日 17点02分 4
level 8
_0 楼主
然后就是普通催熟了。
这里的内容和je没有区别。
如果一棵树苗已经处于第二生长阶段,那么它只需要一次有效催熟就可以生长成树。假如一棵树苗在第k次催熟的时候得生长了,我们来看看它在之前的过程中经历了什么。首先肯定是k-1次的无效尝试,因为只要有一次是有效的,它早就长成树了,不会拖到第k次。同时,它肯定在第k次是有效催熟催熟,不然它也无法在第k次的时候生长。所以就可以计算预催熟成功的树苗在第k次催熟时生长成树的概率:
P1(k)=0.55^(k-1)*0.45
同样的,假如有第一阶段的树苗在第k次催熟时生长成功,我们也用相同的方法计算,只是复杂一点。它肯定在第一次到第k-1次催熟中有刚好一次有效催熟,k-2次无效催熟,并且在第k次也是有效催熟。因为情况有(k-1)!/(1!*(k-2)!) = k-1种,所以预催熟失败的树苗在第k次催熟时生长成树的概率:
P2(k)=(k-1)*0.55^(k-2)*0.2025
然后还需要一个函数是关于第k次催熟时距离上一棵树生长瞬间的时间间隔,记为t(k)。这个函数和每个树场的催熟策略有关,需要自己定义。
于是关于树场周期的期望(P0为预催熟成功率):
Et=P0(n)*∑(P1(i)*t(i))+(1-P0)*∑(P2(k)*t(i)),(i=1,2,3,···,∞)
至此速度计算方法已经基本清晰了,再引入一个变量h,为对每棵树的平均木头块数的期望。这个值随树种和树场对树干的阉割程度变化,需要自己计算。
于是联立上面的公式,就得到了关于树场速度的期望:
Ex = h*t/(1-0.1^n)/2*∑(0.55^(i-1)*0.45*t(i))+(1-P0)*∑((i-1)*0.55^(i-2)*0.2025*t(i)),(i=1,2,3,···,∞)
2019年02月23日 18点02分 5
level 8
_0 楼主
当然我是没有心情笔算的。。这种繁琐的计算当然是丢给电脑好,不然鬼知道算到什么年代。。
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int n = 2, tu = 8, td = 6, h = 6; //n=发射器数,tu=树干处理rt数,td=底座处理rt数,h=每棵树期望,别忘了修改
int t(int k) //第k次催熟时刻,自己添加
{
}
int n1(void) //预催熟次数,自己添加
{
}
double p1(int i)
{
double p1 = pow(0.55, i - 1)*0.45;
return p1;
}
double p2(int j)
{
double p2 = (j - 1)*pow(0.55, j - 2)*0.2025;
return p2;
}
int main(void)
{
double p0 = 1 - pow(0.1, n1());
double et = 0,ex = 0, s1 = 0, s2 = 0;
for(int i = 1; ; i++)
{
double p = p1(i);
if (p)
s1 += p * t(i);
else
break;
}
for (int j = 2; ; j++)
{
double p = p2(j);
if (p)
s2 += p * t(j);
else
break;
}
et += p0 * s1 + (1 - p0)*s2;
ex = 36000 * h / et;
printf("ex=%lf\n", ex);
system("pause");
return 0;
}
2019年02月23日 18点02分 6
level 8
_0 楼主
找了两个(因为只找到两个)有估测速度的树场代数据验算了一下:
树场V3:理论10010.631229235876logs/h,实测估计10000logs/h
树场V4:理论14189.780814747726logs/h,实测估计14000logs/h
差值不超过190logs/h,也就是只有0.0134%,可以说相当准了。
当然欢迎使用其他数据检验,如果发现异常或算法漏洞请留言反馈。[滑稽][玫瑰]
2019年02月23日 20点02分 9
level 11
[滑稽]好东西!
触!
2019年02月24日 03点02分 10
level 1
在没有阻挡的情况下[滑稽]金坷垃可以一次出奇迹
但是骨粉就不行[滑稽]
2019年02月25日 01点02分 11
level 9
[滑稽][大拇指]
2019年02月26日 16点02分 12
level 1
看我发现了什么[太开心]
2019年03月02日 06点03分 13
1