The "best" way to mine for diamonds has been discussed at length before, and I was curious as to whether branch mining was truly the best possible. After some research, I found what I think is about a 30% improvement over standard branch mining. This post describes the rationale, the specific digging method, and the analysis which leads me to think that it is more efficient.
Branch mining does have a decent 4:1 ratio of exposed blocks to blocks dug, and if the hallways are not too close, the outcome from each section of hallway are essentially statistically independent.
There are two areas where there seemed to be potential for higher efficiency, but it is not obvious how to incorporate them in an overall strategy:
1. 1x1 holes dug perpendicular to a hallway (as in what is called "Feather" mining) have a better than 4:1 ratio of exposed blocks. Digging sideways exposes 2, 5, 5, 5, 5, for a total of 22 exposed for 5 dug, or 4.4:1. Digging upward exposes 3, 5, 5, 5, 5, for 23 exposed for 5 dug, or 4.6:1.
2. Chunk-oriented methods can skip the remainder of a chunk once diamonds are found. Or considered a different way, as a chunk becomes more and more exposed without finding diamond, the probability that the next incremental exposure will uncover diamond gradually improves. This is only significant if a significant fraction of each chunk is exposed.
I've experimented (in-game) with a few approaches loosely related to 'Feather' mining and the results seemed good, but the randomness of the generation makes it hard to draw conclusive results when experiments are not more than a couple hours.
To optimize the candidate approaches and get statistically meaningful results, I extracted data from real Minecraft maps and performed simulated digging in Matlab.
The result is what I think is approximately a 30% improvement over branch mining, measured as the quantity of diamond ore found relative to the number of stone blocks excavated. For for purposes here, "branch mining" is assumed to be a single layer at level 11, with halls spaced every 4 blocks (3-block wall between hallways), and digging irrespective of chunk position or nearby diamond already found.
Here is an example where I have been luckier than usual (although it is too short an experiment to be statistically significant). The 57 ore blocks occurred in 9 large-ish veins.
First the method, then the analysis as to why I think this should be good on average and not just a lucky fluke.
This method is based on "up-dig tunnels". These are 1x2 tunnels dug horizontally at level 6 (feet level 6, which is just high enough that you never see bedrock), and every third block forward, a 1x1 hole is dug upward, removing 5 blocks. So from the side an 'up-dig tunnel' looks like this:
Then, within each offset chunk (more on this later), four parallel tunnels are created, at chunk offsets 9, 13, 1, and 5.
In this diagram, the numbers along the top and side represent the offset within the chunk.
"#" represents an area not excavated,
O represents a regular 1x2 tunnel
X represents a 1x2 tunnel with 5 blocks excavated upward
These tunnels can connect from one chunk to the next.
This method, as a modified branch mine (deeper with up-dig feather holes) is marginally better than branch mining according to my simulation, due to the slightly higher multiplier of 4.6:1 when digging upward.
The majority of the advantage comes from chunk-oriented digging. If the chunk does not yield a diamond vein (about 45% of the time) then the entire pattern must be dug, but if a diamond vein is found, then on average half the digging can be skipped. For the relatively low throroughness of branch mining, skipping partial chunks does not make much difference, but with the up-dig tunnel method, about 55% of chunks will yield a diamond vein, meaning about 27% of digging can be eliminated for the same diamond output.
For the analysis, I did this:
1. Use a program to extract each layer from a real Minecraft map as a separate PNG file, extracting layers 0 through 17
2. Assemble into a 3D "bitmap" of diamond ore locations.
3. Construct a candidate "kernel" representing the digging pattern to be repeated again and again
4. Dilate the kernel by one block horizontally and vertically (not diagonally) to represent the exposed blocks
5. Replicate the kernel to fill the entire map
6. Calculate the intersection of the replicated kernel with the diamond ore 3D bitmap. This represents the total diamond blocks exposed
7. Calculate the diamond blocks exposed divided by the total blocks excavated
This is a crude method which under-estimates the actual effectiveness because it does not consider the fact that diamonds occur in veins, and when one diamond block is exposed, the player will keep digging until the entire vein is gathered.
8. Scan the diamond ore 3D bitmap and enumerate all diamond veins with a "Vein-ID" and count the number of diamond blocks in each vein
9. Calculate the intersection of the replicated kernel with the enumerated vein map and get all Vein-IDs that are exposed.
10. The amount of diamond is the sum of all blocks in all veins that are exposed (not just the diamond blocks that were exposed)
11. Calculate total diamond divided by total blocks excavated
This is an improved estimate, which demonstrates for example that branch mining every third block (walls two blocks wide) is less efficient than branch mining every fourth block (walls three blocks wide), and estimates the difference in efficiency to be about 15%.
This calculation so far does not take into consideration the savings gained by skipping partial chunks when diamond is located. The partial-chunk savings is estimated as follows:
12. Calculate the total number of veins (result from step 8)
13. Calculate the number of veins exposed (from step 9) divided by the total number of veins
This provides an estimate of thoroughness, and predicts what percentage of chunks will successfully find a diamond vein. For those chunks where a diamond vein is found, we can assume that on average it will be found half-way through the chunk, so the savings in digging will be 50% multiplied by the fraction of veins that succeed. For the up-dig method outlined above, about 55 percent of chunks will find a diamond vein, so the amount of digging is 45% + 50% * 55% = 72.5%, meaning that skipping partial chunks saves about 25% of digging overall.
It is interesting to note that for taking advantage of partial-chunk savings, low and high thoroughness are both poor, while intermediate thoroughness appears to be better. Low thoroughness does not get much savings from chunk-remainder skipping, but generally has higher efficiency from "not exposing the same vein twice". Higher thoroughness can save up to 50% if it were to succeed 100% of the time and skip half the chunk on average, but the amount of digging to get high thoroughness works against efficiency. Simulating multiple kernels of varying thoroughness confirmed this trend, where high and low thoroughness did not have the best efficiency, and moderate thoroughness yielded the best overall efficiency. Again, efficiency here is defined as total diamond ore gathered relative to total blocks excavated.
The other consideration is from a practical standpoint, in order to actually skip the remainder of a chunk, how much extra digging is necessary. In the case of the 4 parallel up-dig tunnels, it takes 6 blocks to jog sideways into an adjacent tunnel, skip past one or more blocks, and then 6 more blocks to jog back to resume the tunnel. Some say that lava is a headache, and others have said that digging upward is dangerous, but from my testing in-game, it is not really a big problem. When I encounter lava, I just change direction or go around, and it moves slowly enough that I have never had a problem when I expose lava above me.
As part of this exercise I also wanted to find out the details of exactly how the chunk-oriented diamond generation worked. At times I had seen diamond veins occupying block offsets 7 and 8, and I did not know which offset chunk should be eliminated from further search.
Again in Matlab I used data extracted from a real map and made a diagram, shown here. In this diagam, X and Z offset 7 within the chunk is colored in blue:
From this visualization a few things can be seen:
1. The range of 8 through 6 (i.e. blocks 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 4, 6) always contains at MOST one vein.
2. Veins can (and frequently do) overlap block 7, sometimes from block 8 and sometimes from 7.
3. A minority of chunks have no diamond veins at all.
I have seen some skepticism about the one-vein-per-chunk claim, and hopefully this will put it to rest. To reiterate, the squares shown in the diagram are not chunk boundaries. The blue lines correspond to block 7 (in X or Z) within the chunks and the squares correspond to the half-chunk offset zones within which the diamonds are generated.
In order to skip the remainder of a chunk after the diamond has been found requires knowing with confidence where the offset generation zones are, and settling any doubt as to whether there may be another diamond vein within the zone.
In summary, I believe the digging method outlined above is substantially more efficient than branch mining.
I have never seen anyone advance this method as efficient, although none of the elements by itself is new. Feather mining is known to have a higher exposed block ratio, and chunk-oriented mining is known to have efficiency gains, but have not been integrated into an efficient system that I have seen.
I can share some of the Matlab code or more detailed results if anyone is interested.
When you speak of skipping the remainder of a chunk, shouldn't that be the remainder of an offset chunk?
That might have been what you mean but it's not clear from a quick readthrough (and there's a bit much to read thoroughly unless one is very interested, interesting as it is.)
--
How about feather mining in all 4 directions?
You can only get 3 blocks down without jumping into the hole but that would allow you to see parts of 12 layers.
--
<I guess feather mining to the sides wouldn't allow as thorough a pattern since you cant feather upwards or downwards from the feathers, digging downwards could still be done if you don't need to return through the same tunnel.>
--
I'm also a bit unclear as to how you connect the different offset-chunk-mines together.
I'm thinking what you mean is a backbone tunnel at say offset 7 with the tunnels on your #/O/X graph as branches on it?
-
If the branches are long the jogging over to the next tunnel might not work if it takes you over to the next offset-chu
nk and that tunnel wasn't finished because that offset-chunk had been abandoned since the diamonds were found.
On way of solving that would be to put backbones every 2 chunks and make the branches at most 16 blocks long, then when you find diamonds you could just go back to the backbone and continue to the next offset-chunk.
You'd have to dig more backbone tunnels but it would simplify keeping track of in which O-Cs you had found diamonds (if the branches are several chunks long and you find the diamonds in chunk 2, how do you find your way back to the right place to continue digging in chunk 1?)
--
Are you digging out in one branch, jogging over and digging the next branch back? Or running back to the backbone to start the next branch.
Yes, sorry for the confusion, I meant the remainder of the offset chunk.
That _is_ pretty clear from a thorough reading, but not from just reading the conclusion.
--
If you are lucky the abandon O-C jog would only take an extra 2 blocks, depending on which side of the tunnel the diamonds were located and at what levels.
Did you explore feathering up every 4th block instead of every 3rd, for much the same reason as why you start a branch horizontally every 4th block? Seems that would be a bit more efficient from a time/diamond ratio.
I'm all about repetitive systems. All this tracking diamonds in chunks and skipping chunks sounds more complicated than I'm willing to do unless I'm overlooking something in your writeup. And from a practicality standpoint any system that requires taking notes and carefully watching coordinates, while it might be efficient for finding the most diamonds in a given space with less effort, isn't likely to be as efficient once time to run the system and track details is taken into account....unless you got a dynamite memory and good spatial vision on the fly.
I'm kinda the same. I prefer to not look at coordinates and just repeat a pattern. When you are digging with very fast diamond picks and maybe even beacons as well you have to keep in mind that mining blocks is not the problem, it's reaction time. With good tools I can almost just walk forward in a straight line with my pick meaning frequent direction changes is waaaay less efficient from a mining standpoint. In this respect I would say your method outperforms horizontally-feathered branch-mining though as with the fast picks it is far easier to just look upward every 3-4 blocks then turn to each side and tunnel.
Another thing that can factor into time is running into lava which is VERY common digging below the lava-lake level like that at 6. I get that you can more efficiently canvas the space for diamonds but I find with how common lava lakes and ravines are and them constantly trying to fall into my tunnel that digging at Y=11 is much faster as you are always at the level of the lakes and can just obsidianize/bridge them when you hit them. I don't ever dig below there if I'm in a hurry. Not to mention that when you DO hit those lava lakes you'll need to switch to a block, stop it from flowing in, etc, and if you mess up that can waste even more time draining the lava.
So the takeaway from your article for me is that I'll probably just dig at Y=11 like I always do but feather upward every 4 blocks or so. Diamond vein centers have an equal chance to spawn all the way up to 16 meaning your feathering method is still useful for getting the topmost ones. Digging 3 more blocks up to Y=15 should expose them all, be easily repeatable with fast diamond picks, and eliminate the constant lava-lake problem I would have digging below Y=11 and feathing in many directions.
Space Expedition to EPIC 204:Go on a Space-Age Adventure to visit and explore EPIC 204, a wacky world of dense asteroids and full of alien life! Experience Custom Seasons, Weather, Over 50 new creatures, Beautiful Biomes, Alien Ruins, Dungeons, and new space age tech crafting recipes!
I'm kinda the same. I prefer to not look at coordinates and just repeat a pattern. When you are digging with very fast diamond picks and maybe even beacons as well you have to keep in mind that mining blocks is not the problem, it's reaction time. With good tools I can almost just walk forward in a straight line with my pick meaning frequent direction changes is waaaay less efficient from a mining standpoint. In this respect I would say your method outperforms horizontally-feathered branch-mining though as with the fast picks it is far easier to just look upward every 3-4 blocks then turn to each side and tunnel.
Another thing that can factor into time is running into lava which is VERY common digging below the lava-lake level like that at 6. I get that you can more efficiently canvas the space for diamonds but I find with how common lava lakes and ravines are and them constantly trying to fall into my tunnel that digging at Y=11 is much faster as you are always at the level of the lakes and can just obsidianize/bridge them when you hit them. I don't ever dig below there if I'm in a hurry. Not to mention that when you DO hit those lava lakes you'll need to switch to a block, stop it from flowing in, etc, and if you mess up that can waste even more time draining the lava.
So the takeaway from your article for me is that I'll probably just dig at Y=11 like I always do but feather upward every 4 blocks or so. Diamond vein centers have an equal chance to spawn all the way up to 16 meaning your feathering method is still useful for getting the topmost ones. Digging 3 more blocks up to Y=15 should expose them all, be easily repeatable with fast diamond picks, and eliminate the constant lava-lake problem I would have digging below Y=11 and feathing in many directions.
At lava level, feathering downward would be more useful. Diamonds don't go much higher when mining at y=11. I think the highest they will get is 16 which is only a couple blocks above your head.
In the end, diamonds per hour matters more than diamonds per block, and even an increase in diamonds per hour may not be worth it depending on the amount of headache involved.
Digging the upward tunnels every 4th block is just as good or better than digging upward every 3rd block. I had dismissed it earlier from looking at a different data set, but looking at it again now, it appears better. Furthermore, it will be very nice that it divides into the chunk size evenly, as opposed to the 3-block pattern which is annoying to count off on an odd multiple. I will definitely have to give this a try in-game.
Also, I have been using a paper sheet to keep track of found diamonds and their locations. I use graph paper where each cell in the graph paper corresponds to a single segment of tunnel, so a row of 4 cells on the paper corresponds to a single offset-chunk and possible diamond vein. The horizontal dimension on the paper represents parallel tunnels and the vertical dimension corresponds to tunnel length in chunks. Every 16 blocks, on block 7, I place a torch on the floor to mark the offset-chunk boundary, and other torches I place on the wall where necessary for light.
Block 7, at the edge of a diamond generation region, is in the center of a world chunk, and along the left edge of the diagram I write the chunk number. This means I don't have to record every chunk as I dig, I can dig until inventory is full, or lava, or whatever, and see what chunk I'm at, and record the appropriate number of 'X's if no diamond was found. I also write "5, 1, 13, 9" showing the intra-chunk coordinate so if I forget which tunnel I'm in I can remind myself fairly easily.
Pardon the chicken-scratch, I was not writing this for the purpose of demonstration, it is an actual housekeeping sheet:
Much of this comes down to personal taste, but I agree completely that these details are an integral part of a viable digging strategy.
Part of the reason for focusing on diamonds-per-block is precisely because it is objective. It might perhaps factor into a theoretical upper bound, but whether it translates into a practical use is going to depend on the situation. Iron picks with no enchantment are more constrained by the total blocks excavated, while high-level Efficiency + Unbreaking diamond picks can just plow through and convenience becomes more important.
Here are some additional details on a few different methods:
"Standard Branch" is a 1x2 tunnel every 4th block, at levels 11 and 12
"Dense Branch" is a 1x2 tunnel every 3rd block (two-block walls between tunnels)
"Up-dig 3x4" is digging upward every 3rd block, with tunnels every 4th block
"Up-dig 3x4 offset" is the same but where adjacent tunnels have the upward-digging offset by one block, as shown in the original post
"Up-dig 4x4" is digging upward every 4th block, with tunnels every 4th block
"Up-dig 4x4 offset" is the same but upward-digging offset by 2 blocks on adjacent tunnels
Keep in mind some of the variation is just random variation because it's taken from one map which is not large enough to smooth out all variations.
In this table "Blocks" refers to the number of diamond ore blocks exposed per 100 blocks excavated. This does not include the hidden blocks belonging to the the exposed veins, but is a more basic measure of exposed per excavation. Note that the standard branch mine (3-block thick walls) and dense branch mine (2-block thick walls) perform the same in the blocks column.
The "Veins" column refers to the result when all diamond ore from exposed veins is included. In other words, it is assumed that when diamond ore is discovered, the player digs out all ore blocks from the vein. Here the standard branch outperforms the dense branch as expected, and sparser up-dig methods perform better than denser ones.
The "Pct" column represents the percentage of offset-chunks that are expected to yield a diamond ore vein. The denser methods are naturally more thorough, and have a higher value.
The "Skip" column is calculated from the Veins and Pct columns, taking into account a savings of 50% on the proportion of blocks where diamond is found. This is the predicted blocks of ore found per 100 blocks excavated, assuming that partial offset-chunks are skipped.
As for feathering downward from 11, I haven't run the simulation but it stands to reason it ought to perform the same as digging upward from 6. Then you could skip lava more easily. That said, I don't know how to do it quickly without falling into the hole. I suppose by walking past the hole, digging down one, and using "sneak" to hang off the edge without falling in, you could explore downward, but I can't see it being practical.
At lava level, feathering downward would be more useful. Diamonds don't go much higher when mining at y=11. I think the highest they will get is 16 which is only a couple blocks above your head.
The maximum height is actually 15, despite the numbers seen in Customized; this is because Random returns a number from 0 to one less than its parameter; i.e. random.nextInt(16) returns 16 values from 0 to 15, not 1-16 (basically, computers count from 0). The complete code to calculate the y-coordinate of a vein is random.nextInt(max - min) + min. For lapis the max height is actually two less than twice the spread for similar reasons; random.nextInt(spread) + random.nextInt(spread) + (center - spread). Also, ore becomes much less common above y=12, which I've often given as a reason not to mine any higher than y=11 (feet position) since even then the ceiling is already at y=13:
Also, I've done some of my own analysis with respect to diamond ore exposed in caves; I modified the ore generation code so that it counted each block actually placed and if any block touched air they were added to a running total (e.g. a vein generating in the floor of a cave at y=10 and extending down to y=7 (veins are up to 4 layers deep) will have every block counted. If there was a different ore already placed where the exposed block would be it would not be counted):
Note that this was for a 1.6.4 world; more recent versions will likely have different results due to changes to cave and ore generation (as I found here 1.8 has a significantly higher abundance of all ores; part of the discrepancy for coal and iron is due to oceans as I've found more in a 1.6.4 world as well when only including land, but not that much more). Also, in practice I find more diamond than expected, likely due to "indirectly exposed" veins which lie behind other ores (not counted here as noted above), or are found while mining through a cave whose ceiling drops down to lava level. Another interesting thing to note is the amount of coal relative to iron, which is much higher than expected from their per-chunk counts, which I attribute to the larger vein size of coal, and closely matches what I actually find.
Also, in terms of total blocks mined / diamond ore mined caving is indisputably the most efficient way to find diamonds, as long as you don't mine every single ore like I do, giving me a worse ratio overall than from branch-mining; of course, including all ores found while branch-mining would reduce its efficiency as well but from my last experience I found 85 diamond ore out of about 10,400 blocks mined (tunnels only), perhaps 11,400 when including ores found in the walls, a ratio of 0.745-0.817 diamond ore per 100 blocks, using "standard" branch-mining.
In addition, lava isn't always such an obstacle as this map of the branch-mine shows, though this is biased from being in 1.6.4 (modded, but caves and ore density are similar to vanilla 1.6.4; I made the mod myself):
That is, 1.6.4 has a much greater clustering of caves, resulting in much denser cave systems but also much larger regions with few or no caves; in a dense cave area mining like this would be all but impossible. I mined below lava level because of a mod ore that is most common just above bedrock, which was intentional so that branch-mining is still practical while when caving for fun it is suitably rare, just enough to meet my needs without Fortune, which I also don't use for diamond, which was not the focus of this mine and otherwise I'd have only mined around half as much.
Sorry if this was mentioned since I didn't have time to read all the posts, but if the lava ceiling is at Y=11 and you're mining at Y=6, aren't you running a big risk of tapping into a lava pool while making one of your upward feather holes?
Sorry if this was mentioned since I didn't have time to read all he posts, but if the lava ceiling is at Y=11 and you're mining at Y=6, aren't you running a big risk of tapping into a lava pool while making one of your upward feather holes?
Certainly possible, however easy enough to just quickly put a block in the hole or at worst get caught off guard and back away and put a block on the floor and work your way back and then plug the hole. Your tunnel will only be 3 blocks below lava level so you're just as likely to mine the tunnel into the side of a lava pool.
There is nothing special about y=10 with regards to lava - a lot of people seem to think lava is ONLY at y=10 when it extends all the way down into bedrock.
Here is an old chart from Beta 1.7.3 showing the distribution of lava, which shows that it is nearly flat between y=5-10 and the decrease below that due to bedrock. The current chart is in error since it shows no significant increase below y=11, probably because they only counted "stationary" lava since caves generate with "flowing" lava (up until 1.7, the "current" chart is for 1.5) and when pregenerating a world with Minecraft Land Generator (presumably) it doesn't have any time to convert over, whereas this chart was based on a world generated by walking in-game. The distribution of caves with altitude has not been changed at least since InfDev (based on decompiled code); the current chart shows a different distribution of air below sea level due to mineshafts and ravines, which are on average higher up than caves:
If you include lava lakes (the small ponds found on the surface and as underground pockets) you can dig up into lava pretty much anywhere, which has happened on several occasions while digging up to the surface.
Thank you for your responses, there is definitely some wisdom here.
I can understand that exploring caves will have a low fraction of blocks mined, since you are viewing many blocks while mining none, but I am curious where it ranks in time efficiency. Optimizing diamond per block (without caves) was somewhat of a proxy for diamond per hour spent. Generally I do not explore caves that much, and I would expect a huge fraction of the time would be traversing caves that are well above diamond level. Is there a time-efficient diamond cave method I'm missing? I am also wondering if it requires a "nomadic" lifestyle or whether it is amenable to having a central base.
Also, in regards to the lava issue, I generally don't have much of a problem because lava moves so slowly. I find a bigger risk is if I am moving fast and not watching, I may step forward and fall into lava at level 6. If I encounter lava at one of the two blocks in front or one of the blocks above, I always see it in plenty of time to avoid it.
Generally I do not explore caves that much, and I would expect a huge fraction of the time would be traversing caves that are well above diamond level. Is there a time-efficient diamond cave method I'm missing? I am also wondering if it requires a "nomadic" lifestyle or whether it is amenable to having a central base.
The fact that even I branch-mine to get my first resources should be self-explanatory - it is much more time efficient to get diamonds by branch-mining than it is by caving; all of the caving that I do, save for a few caves my mine runs into (only enough to see if they lead anywhere) occurs after the "end-game" and is done for fun. I also have some hard numbers on my diamond finding rate though caving, which is not exactly the best since I explore all caves regardless of what levels they are on, and the much greater interconnectivity of caves in 1.6.4 makes it easier to stay within the lower levels:
This is what I recently mined over 13 play sessions and 45 hours, all spent caving (total, per session, per hour):
As you can see, it would take over 5 hours just to get enough diamonds to make a full set of diamond armor. This is highly variable though; I've found anywhere from 0 to 60+ diamonds (diamond ore) during one play session, the latter when exploring a very deep mineshaft entirely within the diamond layer, another factor is that I usually explore the higher layers of a big cave system first.
Naturally, Fortune would reduce these numbers by 2.2-fold, more if you are lucky, but that is still over 2 hours, plus IMO the time spent enchanting to get Fortune is better spent mining; once I start my "end-game" caving I easily get a surplus without Fortune, which is all that matters since there are no other uses for diamonds at that point (unless you like fireworks). I've even made a mod that adds in a diamond-equivalent ore which is much rarer and more expensive to repair just to be more in line with what I get. It can be worthwhile to explore deep caves your mine runs into though.
ETA: Here is what somebody else mined in one hour of branch-mining for comparison, admittedly, over a very short time interval but the trends should be clear:
Compared to my numbers, branch-mining for diamond is nearly 8 times more time-efficient than caving and better for everything else except coal and iron, with gold being pretty similar (they may have been lucky finding diamonds since you'd expect to find about one diamond for every 6 iron ore while they mined 1:3.56; conversely redstone should be more common than iron, hence the remark about the short time interval. However, even the more expected 20-odd diamonds is still much greater than what I found).
Also, in regards to the lava issue, I generally don't have much of a problem because lava moves so slowly. I find a bigger risk is if I am moving fast and not watching, I may step forward and fall into lava at level 6. If I encounter lava at one of the two blocks in front or one of the blocks above, I always see it in plenty of time to avoid it.
I have to agree on the lava issue.
As a matter of fact I mine at layer 5 and my current method for dealing with lava lakes is to dig my way through them, not the most efficient way I know but I like straight flat mine branches even though I seldom return the same way.
I stand with my back to the end of the tunnel and defiantly mine out the block (usually obsidian) above my head, knowing full well that it has lava above it, then I place a water block, fetch a new bucketfull from my infinate water source, dig out the two blocks at the end of the tunnel, placing and retreiving water as needed, and repeat.
The only time I have any trouble is if I hit flowing lava, that can flow out through the placed water without turning it to stone.
The "best" way to mine for diamonds has been discussed at length before, and I was curious as to whether branch mining was truly the best possible. After some research, I found what I think is about a 30% improvement over standard branch mining. This post describes the rationale, the specific digging method, and the analysis which leads me to think that it is more efficient.
Branch mining does have a decent 4:1 ratio of exposed blocks to blocks dug, and if the hallways are not too close, the outcome from each section of hallway are essentially statistically independent.
There are two areas where there seemed to be potential for higher efficiency, but it is not obvious how to incorporate them in an overall strategy:
1. 1x1 holes dug perpendicular to a hallway (as in what is called "Feather" mining) have a better than 4:1 ratio of exposed blocks. Digging sideways exposes 2, 5, 5, 5, 5, for a total of 22 exposed for 5 dug, or 4.4:1. Digging upward exposes 3, 5, 5, 5, 5, for 23 exposed for 5 dug, or 4.6:1.
2. Chunk-oriented methods can skip the remainder of a chunk once diamonds are found. Or considered a different way, as a chunk becomes more and more exposed without finding diamond, the probability that the next incremental exposure will uncover diamond gradually improves. This is only significant if a significant fraction of each chunk is exposed.
I've experimented (in-game) with a few approaches loosely related to 'Feather' mining and the results seemed good, but the randomness of the generation makes it hard to draw conclusive results when experiments are not more than a couple hours.
To optimize the candidate approaches and get statistically meaningful results, I extracted data from real Minecraft maps and performed simulated digging in Matlab.
The result is what I think is approximately a 30% improvement over branch mining, measured as the quantity of diamond ore found relative to the number of stone blocks excavated. For for purposes here, "branch mining" is assumed to be a single layer at level 11, with halls spaced every 4 blocks (3-block wall between hallways), and digging irrespective of chunk position or nearby diamond already found.
Here is an example where I have been luckier than usual (although it is too short an experiment to be statistically significant). The 57 ore blocks occurred in 9 large-ish veins.
First the method, then the analysis as to why I think this should be good on average and not just a lucky fluke.
This method is based on "up-dig tunnels". These are 1x2 tunnels dug horizontally at level 6 (feet level 6, which is just high enough that you never see bedrock), and every third block forward, a 1x1 hole is dug upward, removing 5 blocks. So from the side an 'up-dig tunnel' looks like this:
Then, within each offset chunk (more on this later), four parallel tunnels are created, at chunk offsets 9, 13, 1, and 5.
In this diagram, the numbers along the top and side represent the offset within the chunk.
"#" represents an area not excavated,
O represents a regular 1x2 tunnel
X represents a 1x2 tunnel with 5 blocks excavated upward
These tunnels can connect from one chunk to the next.
This method, as a modified branch mine (deeper with up-dig feather holes) is marginally better than branch mining according to my simulation, due to the slightly higher multiplier of 4.6:1 when digging upward.
The majority of the advantage comes from chunk-oriented digging. If the chunk does not yield a diamond vein (about 45% of the time) then the entire pattern must be dug, but if a diamond vein is found, then on average half the digging can be skipped. For the relatively low throroughness of branch mining, skipping partial chunks does not make much difference, but with the up-dig tunnel method, about 55% of chunks will yield a diamond vein, meaning about 27% of digging can be eliminated for the same diamond output.
For the analysis, I did this:
1. Use a program to extract each layer from a real Minecraft map as a separate PNG file, extracting layers 0 through 17
2. Assemble into a 3D "bitmap" of diamond ore locations.
3. Construct a candidate "kernel" representing the digging pattern to be repeated again and again
4. Dilate the kernel by one block horizontally and vertically (not diagonally) to represent the exposed blocks
5. Replicate the kernel to fill the entire map
6. Calculate the intersection of the replicated kernel with the diamond ore 3D bitmap. This represents the total diamond blocks exposed
7. Calculate the diamond blocks exposed divided by the total blocks excavated
This is a crude method which under-estimates the actual effectiveness because it does not consider the fact that diamonds occur in veins, and when one diamond block is exposed, the player will keep digging until the entire vein is gathered.
8. Scan the diamond ore 3D bitmap and enumerate all diamond veins with a "Vein-ID" and count the number of diamond blocks in each vein
9. Calculate the intersection of the replicated kernel with the enumerated vein map and get all Vein-IDs that are exposed.
10. The amount of diamond is the sum of all blocks in all veins that are exposed (not just the diamond blocks that were exposed)
11. Calculate total diamond divided by total blocks excavated
This is an improved estimate, which demonstrates for example that branch mining every third block (walls two blocks wide) is less efficient than branch mining every fourth block (walls three blocks wide), and estimates the difference in efficiency to be about 15%.
This calculation so far does not take into consideration the savings gained by skipping partial chunks when diamond is located. The partial-chunk savings is estimated as follows:
12. Calculate the total number of veins (result from step 8)
13. Calculate the number of veins exposed (from step 9) divided by the total number of veins
This provides an estimate of thoroughness, and predicts what percentage of chunks will successfully find a diamond vein. For those chunks where a diamond vein is found, we can assume that on average it will be found half-way through the chunk, so the savings in digging will be 50% multiplied by the fraction of veins that succeed. For the up-dig method outlined above, about 55 percent of chunks will find a diamond vein, so the amount of digging is 45% + 50% * 55% = 72.5%, meaning that skipping partial chunks saves about 25% of digging overall.
It is interesting to note that for taking advantage of partial-chunk savings, low and high thoroughness are both poor, while intermediate thoroughness appears to be better. Low thoroughness does not get much savings from chunk-remainder skipping, but generally has higher efficiency from "not exposing the same vein twice". Higher thoroughness can save up to 50% if it were to succeed 100% of the time and skip half the chunk on average, but the amount of digging to get high thoroughness works against efficiency. Simulating multiple kernels of varying thoroughness confirmed this trend, where high and low thoroughness did not have the best efficiency, and moderate thoroughness yielded the best overall efficiency. Again, efficiency here is defined as total diamond ore gathered relative to total blocks excavated.
The other consideration is from a practical standpoint, in order to actually skip the remainder of a chunk, how much extra digging is necessary. In the case of the 4 parallel up-dig tunnels, it takes 6 blocks to jog sideways into an adjacent tunnel, skip past one or more blocks, and then 6 more blocks to jog back to resume the tunnel. Some say that lava is a headache, and others have said that digging upward is dangerous, but from my testing in-game, it is not really a big problem. When I encounter lava, I just change direction or go around, and it moves slowly enough that I have never had a problem when I expose lava above me.
As part of this exercise I also wanted to find out the details of exactly how the chunk-oriented diamond generation worked. At times I had seen diamond veins occupying block offsets 7 and 8, and I did not know which offset chunk should be eliminated from further search.
Again in Matlab I used data extracted from a real map and made a diagram, shown here. In this diagam, X and Z offset 7 within the chunk is colored in blue:
From this visualization a few things can be seen:
1. The range of 8 through 6 (i.e. blocks 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 4, 6) always contains at MOST one vein.
2. Veins can (and frequently do) overlap block 7, sometimes from block 8 and sometimes from 7.
3. A minority of chunks have no diamond veins at all.
I have seen some skepticism about the one-vein-per-chunk claim, and hopefully this will put it to rest. To reiterate, the squares shown in the diagram are not chunk boundaries. The blue lines correspond to block 7 (in X or Z) within the chunks and the squares correspond to the half-chunk offset zones within which the diamonds are generated.
In order to skip the remainder of a chunk after the diamond has been found requires knowing with confidence where the offset generation zones are, and settling any doubt as to whether there may be another diamond vein within the zone.
In summary, I believe the digging method outlined above is substantially more efficient than branch mining.
I have never seen anyone advance this method as efficient, although none of the elements by itself is new. Feather mining is known to have a higher exposed block ratio, and chunk-oriented mining is known to have efficiency gains, but have not been integrated into an efficient system that I have seen.
I can share some of the Matlab code or more detailed results if anyone is interested.
What do you think?
When you speak of skipping the remainder of a chunk, shouldn't that be the remainder of an offset chunk?
That might have been what you mean but it's not clear from a quick readthrough (and there's a bit much to read thoroughly unless one is very interested, interesting as it is.)
--
How about feather mining in all 4 directions?
You can only get 3 blocks down without jumping into the hole but that would allow you to see parts of 12 layers.
--
<I guess feather mining to the sides wouldn't allow as thorough a pattern since you cant feather upwards or downwards from the feathers, digging downwards could still be done if you don't need to return through the same tunnel.>
--
I'm also a bit unclear as to how you connect the different offset-chunk-mines together.
I'm thinking what you mean is a backbone tunnel at say offset 7 with the tunnels on your #/O/X graph as branches on it?
-
If the branches are long the jogging over to the next tunnel might not work if it takes you over to the next offset-chu
nk and that tunnel wasn't finished because that offset-chunk had been abandoned since the diamonds were found.
On way of solving that would be to put backbones every 2 chunks and make the branches at most 16 blocks long, then when you find diamonds you could just go back to the backbone and continue to the next offset-chunk.
You'd have to dig more backbone tunnels but it would simplify keeping track of in which O-Cs you had found diamonds (if the branches are several chunks long and you find the diamonds in chunk 2, how do you find your way back to the right place to continue digging in chunk 1?)
--
Are you digging out in one branch, jogging over and digging the next branch back? Or running back to the backbone to start the next branch.
Just testing.
Yes, sorry for the confusion, I meant the remainder of the offset chunk.
That _is_ pretty clear from a thorough reading, but not from just reading the conclusion.
--
If you are lucky the abandon O-C jog would only take an extra 2 blocks, depending on which side of the tunnel the diamonds were located and at what levels.
Just testing.
Did you explore feathering up every 4th block instead of every 3rd, for much the same reason as why you start a branch horizontally every 4th block? Seems that would be a bit more efficient from a time/diamond ratio.
I'm all about repetitive systems. All this tracking diamonds in chunks and skipping chunks sounds more complicated than I'm willing to do unless I'm overlooking something in your writeup. And from a practicality standpoint any system that requires taking notes and carefully watching coordinates, while it might be efficient for finding the most diamonds in a given space with less effort, isn't likely to be as efficient once time to run the system and track details is taken into account....unless you got a dynamite memory and good spatial vision on the fly.
by c0yote
I tried it with terrible results. I gave my wife my glasses for a second, a creeper showed up and now my wife is pregnant.
Stupid 3D..
I'm kinda the same. I prefer to not look at coordinates and just repeat a pattern. When you are digging with very fast diamond picks and maybe even beacons as well you have to keep in mind that mining blocks is not the problem, it's reaction time. With good tools I can almost just walk forward in a straight line with my pick meaning frequent direction changes is waaaay less efficient from a mining standpoint. In this respect I would say your method outperforms horizontally-feathered branch-mining though as with the fast picks it is far easier to just look upward every 3-4 blocks then turn to each side and tunnel.
Another thing that can factor into time is running into lava which is VERY common digging below the lava-lake level like that at 6. I get that you can more efficiently canvas the space for diamonds but I find with how common lava lakes and ravines are and them constantly trying to fall into my tunnel that digging at Y=11 is much faster as you are always at the level of the lakes and can just obsidianize/bridge them when you hit them. I don't ever dig below there if I'm in a hurry. Not to mention that when you DO hit those lava lakes you'll need to switch to a block, stop it from flowing in, etc, and if you mess up that can waste even more time draining the lava.
So the takeaway from your article for me is that I'll probably just dig at Y=11 like I always do but feather upward every 4 blocks or so. Diamond vein centers have an equal chance to spawn all the way up to 16 meaning your feathering method is still useful for getting the topmost ones. Digging 3 more blocks up to Y=15 should expose them all, be easily repeatable with fast diamond picks, and eliminate the constant lava-lake problem I would have digging below Y=11 and feathing in many directions.
Download and play my new Survival Map!
Space Expedition to EPIC 204: Go on a Space-Age Adventure to visit and explore EPIC 204, a wacky world of dense asteroids and full of alien life! Experience Custom Seasons, Weather, Over 50 new creatures, Beautiful Biomes, Alien Ruins, Dungeons, and new space age tech crafting recipes!
At lava level, feathering downward would be more useful. Diamonds don't go much higher when mining at y=11. I think the highest they will get is 16 which is only a couple blocks above your head.
by c0yote
I tried it with terrible results. I gave my wife my glasses for a second, a creeper showed up and now my wife is pregnant.
Stupid 3D..
Yes, your points are valid.
In the end, diamonds per hour matters more than diamonds per block, and even an increase in diamonds per hour may not be worth it depending on the amount of headache involved.
Digging the upward tunnels every 4th block is just as good or better than digging upward every 3rd block. I had dismissed it earlier from looking at a different data set, but looking at it again now, it appears better. Furthermore, it will be very nice that it divides into the chunk size evenly, as opposed to the 3-block pattern which is annoying to count off on an odd multiple. I will definitely have to give this a try in-game.
Also, I have been using a paper sheet to keep track of found diamonds and their locations. I use graph paper where each cell in the graph paper corresponds to a single segment of tunnel, so a row of 4 cells on the paper corresponds to a single offset-chunk and possible diamond vein. The horizontal dimension on the paper represents parallel tunnels and the vertical dimension corresponds to tunnel length in chunks. Every 16 blocks, on block 7, I place a torch on the floor to mark the offset-chunk boundary, and other torches I place on the wall where necessary for light.
Block 7, at the edge of a diamond generation region, is in the center of a world chunk, and along the left edge of the diagram I write the chunk number. This means I don't have to record every chunk as I dig, I can dig until inventory is full, or lava, or whatever, and see what chunk I'm at, and record the appropriate number of 'X's if no diamond was found. I also write "5, 1, 13, 9" showing the intra-chunk coordinate so if I forget which tunnel I'm in I can remind myself fairly easily.
Pardon the chicken-scratch, I was not writing this for the purpose of demonstration, it is an actual housekeeping sheet:
Much of this comes down to personal taste, but I agree completely that these details are an integral part of a viable digging strategy.
Part of the reason for focusing on diamonds-per-block is precisely because it is objective. It might perhaps factor into a theoretical upper bound, but whether it translates into a practical use is going to depend on the situation. Iron picks with no enchantment are more constrained by the total blocks excavated, while high-level Efficiency + Unbreaking diamond picks can just plow through and convenience becomes more important.
Here are some additional details on a few different methods:
"Standard Branch" is a 1x2 tunnel every 4th block, at levels 11 and 12
"Dense Branch" is a 1x2 tunnel every 3rd block (two-block walls between tunnels)
"Up-dig 3x4" is digging upward every 3rd block, with tunnels every 4th block
"Up-dig 3x4 offset" is the same but where adjacent tunnels have the upward-digging offset by one block, as shown in the original post
"Up-dig 4x4" is digging upward every 4th block, with tunnels every 4th block
"Up-dig 4x4 offset" is the same but upward-digging offset by 2 blocks on adjacent tunnels
Keep in mind some of the variation is just random variation because it's taken from one map which is not large enough to smooth out all variations.
In this table "Blocks" refers to the number of diamond ore blocks exposed per 100 blocks excavated. This does not include the hidden blocks belonging to the the exposed veins, but is a more basic measure of exposed per excavation. Note that the standard branch mine (3-block thick walls) and dense branch mine (2-block thick walls) perform the same in the blocks column.
The "Veins" column refers to the result when all diamond ore from exposed veins is included. In other words, it is assumed that when diamond ore is discovered, the player digs out all ore blocks from the vein. Here the standard branch outperforms the dense branch as expected, and sparser up-dig methods perform better than denser ones.
The "Pct" column represents the percentage of offset-chunks that are expected to yield a diamond ore vein. The denser methods are naturally more thorough, and have a higher value.
The "Skip" column is calculated from the Veins and Pct columns, taking into account a savings of 50% on the proportion of blocks where diamond is found. This is the predicted blocks of ore found per 100 blocks excavated, assuming that partial offset-chunks are skipped.
As for feathering downward from 11, I haven't run the simulation but it stands to reason it ought to perform the same as digging upward from 6. Then you could skip lava more easily. That said, I don't know how to do it quickly without falling into the hole. I suppose by walking past the hole, digging down one, and using "sneak" to hang off the edge without falling in, you could explore downward, but I can't see it being practical.
The maximum height is actually 15, despite the numbers seen in Customized; this is because Random returns a number from 0 to one less than its parameter; i.e. random.nextInt(16) returns 16 values from 0 to 15, not 1-16 (basically, computers count from 0). The complete code to calculate the y-coordinate of a vein is random.nextInt(max - min) + min. For lapis the max height is actually two less than twice the spread for similar reasons; random.nextInt(spread) + random.nextInt(spread) + (center - spread). Also, ore becomes much less common above y=12, which I've often given as a reason not to mine any higher than y=11 (feet position) since even then the ceiling is already at y=13:
http://minecraft.gamepedia.com/File:Diamond_D_28x.jpg
Also, I've done some of my own analysis with respect to diamond ore exposed in caves; I modified the ore generation code so that it counted each block actually placed and if any block touched air they were added to a running total (e.g. a vein generating in the floor of a cave at y=10 and extending down to y=7 (veins are up to 4 layers deep) will have every block counted. If there was a different ore already placed where the exposed block would be it would not be counted):
Note that this was for a 1.6.4 world; more recent versions will likely have different results due to changes to cave and ore generation (as I found here 1.8 has a significantly higher abundance of all ores; part of the discrepancy for coal and iron is due to oceans as I've found more in a 1.6.4 world as well when only including land, but not that much more). Also, in practice I find more diamond than expected, likely due to "indirectly exposed" veins which lie behind other ores (not counted here as noted above), or are found while mining through a cave whose ceiling drops down to lava level. Another interesting thing to note is the amount of coal relative to iron, which is much higher than expected from their per-chunk counts, which I attribute to the larger vein size of coal, and closely matches what I actually find.
Also, in terms of total blocks mined / diamond ore mined caving is indisputably the most efficient way to find diamonds, as long as you don't mine every single ore like I do, giving me a worse ratio overall than from branch-mining; of course, including all ores found while branch-mining would reduce its efficiency as well but from my last experience I found 85 diamond ore out of about 10,400 blocks mined (tunnels only), perhaps 11,400 when including ores found in the walls, a ratio of 0.745-0.817 diamond ore per 100 blocks, using "standard" branch-mining.
In addition, lava isn't always such an obstacle as this map of the branch-mine shows, though this is biased from being in 1.6.4 (modded, but caves and ore density are similar to vanilla 1.6.4; I made the mod myself):
That is, 1.6.4 has a much greater clustering of caves, resulting in much denser cave systems but also much larger regions with few or no caves; in a dense cave area mining like this would be all but impossible. I mined below lava level because of a mod ore that is most common just above bedrock, which was intentional so that branch-mining is still practical while when caving for fun it is suitably rare, just enough to meet my needs without Fortune, which I also don't use for diamond, which was not the focus of this mine and otherwise I'd have only mined around half as much.
TheMasterCaver's First World - possibly the most caved-out world in Minecraft history - includes world download.
TheMasterCaver's World - my own version of Minecraft largely based on my views of how the game should have evolved since 1.6.4.
Why do I still play in 1.6.4?
Sorry if this was mentioned since I didn't have time to read all the posts, but if the lava ceiling is at Y=11 and you're mining at Y=6, aren't you running a big risk of tapping into a lava pool while making one of your upward feather holes?
Certainly possible, however easy enough to just quickly put a block in the hole or at worst get caught off guard and back away and put a block on the floor and work your way back and then plug the hole. Your tunnel will only be 3 blocks below lava level so you're just as likely to mine the tunnel into the side of a lava pool.
by c0yote
I tried it with terrible results. I gave my wife my glasses for a second, a creeper showed up and now my wife is pregnant.
Stupid 3D..
There is nothing special about y=10 with regards to lava - a lot of people seem to think lava is ONLY at y=10 when it extends all the way down into bedrock.
Here is an old chart from Beta 1.7.3 showing the distribution of lava, which shows that it is nearly flat between y=5-10 and the decrease below that due to bedrock. The current chart is in error since it shows no significant increase below y=11, probably because they only counted "stationary" lava since caves generate with "flowing" lava (up until 1.7, the "current" chart is for 1.5) and when pregenerating a world with Minecraft Land Generator (presumably) it doesn't have any time to convert over, whereas this chart was based on a world generated by walking in-game. The distribution of caves with altitude has not been changed at least since InfDev (based on decompiled code); the current chart shows a different distribution of air below sea level due to mineshafts and ravines, which are on average higher up than caves:
If you include lava lakes (the small ponds found on the surface and as underground pockets) you can dig up into lava pretty much anywhere, which has happened on several occasions while digging up to the surface.
TheMasterCaver's First World - possibly the most caved-out world in Minecraft history - includes world download.
TheMasterCaver's World - my own version of Minecraft largely based on my views of how the game should have evolved since 1.6.4.
Why do I still play in 1.6.4?
Thank you for your responses, there is definitely some wisdom here.
I can understand that exploring caves will have a low fraction of blocks mined, since you are viewing many blocks while mining none, but I am curious where it ranks in time efficiency. Optimizing diamond per block (without caves) was somewhat of a proxy for diamond per hour spent. Generally I do not explore caves that much, and I would expect a huge fraction of the time would be traversing caves that are well above diamond level. Is there a time-efficient diamond cave method I'm missing? I am also wondering if it requires a "nomadic" lifestyle or whether it is amenable to having a central base.
Also, in regards to the lava issue, I generally don't have much of a problem because lava moves so slowly. I find a bigger risk is if I am moving fast and not watching, I may step forward and fall into lava at level 6. If I encounter lava at one of the two blocks in front or one of the blocks above, I always see it in plenty of time to avoid it.
The fact that even I branch-mine to get my first resources should be self-explanatory - it is much more time efficient to get diamonds by branch-mining than it is by caving; all of the caving that I do, save for a few caves my mine runs into (only enough to see if they lead anywhere) occurs after the "end-game" and is done for fun. I also have some hard numbers on my diamond finding rate though caving, which is not exactly the best since I explore all caves regardless of what levels they are on, and the much greater interconnectivity of caves in 1.6.4 makes it easier to stay within the lower levels:
This is what I recently mined over 13 play sessions and 45 hours, all spent caving (total, per session, per hour):
As you can see, it would take over 5 hours just to get enough diamonds to make a full set of diamond armor. This is highly variable though; I've found anywhere from 0 to 60+ diamonds (diamond ore) during one play session, the latter when exploring a very deep mineshaft entirely within the diamond layer, another factor is that I usually explore the higher layers of a big cave system first.
Naturally, Fortune would reduce these numbers by 2.2-fold, more if you are lucky, but that is still over 2 hours, plus IMO the time spent enchanting to get Fortune is better spent mining; once I start my "end-game" caving I easily get a surplus without Fortune, which is all that matters since there are no other uses for diamonds at that point (unless you like fireworks). I've even made a mod that adds in a diamond-equivalent ore which is much rarer and more expensive to repair just to be more in line with what I get. It can be worthwhile to explore deep caves your mine runs into though.
ETA: Here is what somebody else mined in one hour of branch-mining for comparison, admittedly, over a very short time interval but the trends should be clear:
Compared to my numbers, branch-mining for diamond is nearly 8 times more time-efficient than caving and better for everything else except coal and iron, with gold being pretty similar (they may have been lucky finding diamonds since you'd expect to find about one diamond for every 6 iron ore while they mined 1:3.56; conversely redstone should be more common than iron, hence the remark about the short time interval. However, even the more expected 20-odd diamonds is still much greater than what I found).
TheMasterCaver's First World - possibly the most caved-out world in Minecraft history - includes world download.
TheMasterCaver's World - my own version of Minecraft largely based on my views of how the game should have evolved since 1.6.4.
Why do I still play in 1.6.4?
I have to agree on the lava issue.
As a matter of fact I mine at layer 5 and my current method for dealing with lava lakes is to dig my way through them, not the most efficient way I know but I like straight flat mine branches even though I seldom return the same way.
I stand with my back to the end of the tunnel and defiantly mine out the block (usually obsidian) above my head, knowing full well that it has lava above it, then I place a water block, fetch a new bucketfull from my infinate water source, dig out the two blocks at the end of the tunnel, placing and retreiving water as needed, and repeat.
The only time I have any trouble is if I hit flowing lava, that can flow out through the placed water without turning it to stone.
Just testing.