はじめに
マイクラをやっていてサトウキビの収穫を自動化したいこと、ありますよね。
多くの場合、オブザーバーで成長を検知してピストンに伝えるか、長周期クロック回路で定期的にピストンを作動させるかの二択となると思います。
今回は、長周期クロック回路を用いる場合にクロック周期を何分にすると最も効率よく収穫できるかを求めます。
前提
ランダムティック
Minecraftのゲームティックは毎秒20ticksであり、それぞれのtickで一辺16ブロックの立方体からランダムにブロックを1つ選ぶ処理が3回行われます。
サトウキビの成長
サトウキビは、最上部のブロックが16回ランダムティックを受け取ると高さが1増えます。ただし、既に高さが3に達している場合は成長しません。また、サトウキビの上の空間がブロックで塞がれたり、高さ3のサトウキビが破壊されて高さ1になったりすると、ティックのカウントはリセットされます1。
本編
$n$ティック経過する間にあるサトウキビがちょうど$k$回ランダムティックを受ける確率$P(k)$はPoisson分布に従うと仮定すると、
$$
P(k)=\frac{e^{-3np}(3np)^k}{k!}
$$
と表されます。ただし、$p=\frac1{4096}$です。
ある時刻に高さ1、ティックのカウントが0だったサトウキビが成長していくことを考えます。
$n$ティック経過後にサトウキビの2段目を破壊して収穫すると、得られるサトウキビの個数の期待値は
$$
\sum_{k=16}^{31}P(k)+2\sum_{k=32}^\infty P(k)=2-2\sum_{k=0}^{15}P(k)-\sum_{k=16}^{31}P(k)
$$
となります。
上のように変形することで無限級数を有限個の項の和で表せるため、コンピュータによる計算がしやすくなります
横軸に経過時間(分)、縦軸に収穫できるサトウキビの個数の期待値をとってグラフを描くと以下のようになります。
最大化したいのは単位時間あたりの収穫量なので、縦軸を1分あたりの収穫量にすると以下のようになります。
このグラフはクロック周期約41.044分(41分と2.65秒)で最大の値をとります。
よって、41分程度の周期のクロック回路を組むことでサトウキビの収穫量を最大化させられることがわかります。
1チャンク内に水とサトウキビを
水→サトウキビ→サトウキビ→水→サトウキビ→サトウキビ→...
の順で配置して縞模様にした場合、1チャンクあたり$16^2/3 \approx 85$個程度のサトウキビを植えられるため、1チャンクあたり毎時約220個(3スタック半程度)のサトウキビが収穫できます。
-
サトウキビ - Minecraft Wiki(2024/10/26閲覧) ↩