Hacker News new | ask | show | jobs
by dragontamer 946 days ago
An inefficient design, but computer-science theory in Factorio means playing suboptimally necessarily. (Factorio wasn't designed to show off B-Trees, all the tools were designed to ya know... play Factorio)

------------

So I have to comments. #1 is about the Comp-Sci side, and #2 is about the optimization side. #3 combines both together for what I'd like to talk about.

1. Self-balancing trees (2-3 trees, Red-black Trees, and B-Trees) are about the self-balancing part. Not just the construction of a singular tree. You cannot recongfigure trees to rebuild themselves in Factorio, so the biggest feature is missing already.

2. From an optimization perspective: inserters are slower than belts. Even 4 inserters per belt only allows like 12-items per second, and blue-belts can push 45 items-per-second. You want to use splitters (which operate at full speed: 45 items per second) for the best belt-only design. (Bots obviously sort items fastest, but I am presuming this is some kind of belt-only challenge build).

3. The intersection of splitters + computer science is therefore: the Splitter (Factorio) and Benes Networks (creation of networks built off of only a 2-input to 2-output crossbar). If you really want to have a crazy good factory design, start studying this stuff: https://en.wikipedia.org/wiki/Clos_network (A Benes network is simply a Clos network of size 2-input and 2-outputs. Clos networks are of any size: like 5-to-7 and other such odd numbers)

--------

In Factorio, the meta you want to be searching for is "mixed belt" design, it seems.

8 comments

> In Factorio, the meta you want to be searching for is "mixed belt" design, it seems.

A more specific case is the "sushi belt" where one belt balances multiple ingredients while looping around on itself.

Sometimes they just accept new items in a fixed ratio, sometimes they can actually rebalance if disturbed. This is my favorite https://www.youtube.com/watch?v=7Gt5Zx0bsOQ

While that one uses the in-game circuitry logic, the Factorio forum has a "circuit-free" section https://forums.factorio.com/viewforum.php?f=202

And my favorite fun fact: The "fish" object in Factorio is a useless joke item, but because it isn't used by anything, it's sometimes used as a null value, a flag for when a belt has completed a full loop, or a debugging tool. https://forums.factorio.com/viewtopic.php?p=544302#p544302

>And my favorite fun fact: The "fish" object in Factorio is a useless joke item, but because it isn't used by anything, it's sometimes used as a null value, a flag for when a belt has completed a full loop, or a debugging tool. https://forums.factorio.com/viewtopic.php?p=544302#p544302

1. Fish is a crafting item for spidertron, it's not completely useless. 2. In multiplayer, the standard null-value item is the deconstruction planner (which is a big red square). I guess some people might use fish, but I've never seen it. It helps that deconstruction planners are free, nowadays, if you click the red button at the bottom-screen UI. 3. Fish is incredibly useful for fighting in early-game - if a nest won't stop bugging you, just go to the nearest pond, grab a few dozen fish, and you're basically invincible for a few minutes as long as you spam fish whenever you reach low health. Make sure to bring extra pistol ammo though, otherwise killing the nests will take ages (you can melee them to death but it deals even less damage than pistols).

Ah. I was playing before the 1.0.0 spidertron and the 0.15.0 patch where fish healing apparently got 20x as effective!
Shotgun is usually my first move out.

Shotgun means you can kill nests very quickly. It's terrible at killing biters though, but machine gun kills early biters while shotguns clear nests.

If you'd like to see sushi belts pushed to absurd levels, check out DoshDoshington:

https://www.youtube.com/watch?v=6bRi1ykIeHg

"but somehow I feel that's really far away ... its been two hours and we're just getting furnaces up"

...

"yeah ... its'a 30 lane wide sushi bus ... that's almost 900 underground belts in one blueprint..."

LOL! That guy's delivery is hilarious. And his patience is astonishing.

He's completed both Space Exploration and Seablock, both of which are 300+ hour runs. Kind of shocking really how much time you can spend on Factorio overhauls
Oh man, I just watched this whole video and I am in awe of this guy.
You should check out his Circuit Abominations Factorio video. It's amazing.

https://www.youtube.com/watch?v=etxV4pqVRm8

This is awesome thanks for sharing. I’m about 20 hours into my first free play run through and just got to end game science and have been progressively trying different belt patterns. The early half of my base looks completely different than my later half.
Is there a Factorio extension like "Scriptorio" that lets you put JSON on conveyor belts? With JavaScript or Lua function factories.

Then you could pass the b-trees themselves around with conveyor belts and inserters, as well as the objects to insert and search.

And write a recursive search function with a loop of conveyor belts running through factories, that just loops the tree around peeling off a level at a time until it hits the leaf, breaking the loop and outputting the result.

It's an interesting execution model, not standard JavaScript, more data flow. Should you allow "quantum tunneling" and "action at a distance" by allowing multiple references to the same underlying JSON objects from different conveyor belts / inserters / factories? That could be useful, but Factorio itself traditionally treats each physical item having a unique identity, so maybe it would be more "realistic" not to support multiple references. Or you can only make multiple references once you research "Quantum Tunneling JSON" technology, with the "JSON Reference Entangler Factory"!

Factorio is extremely mod friendly

If it doesn't exist you can probably wedge it in fairly easily.

I suggest that it would be worth your time to give it a poke just to see what a thoroughly excellent example of software engineering they've made there.

Oh I know, but normal Factorio is Programmer Crack, and going meta like that would be like Scarfacing Programmer Fentanyl for me!

First I'd use it to implement an email reader, and then ... more Factorio mods!

Then Terraform integration.

https://en.wikipedia.org/wiki/Jamie_Zawinski#Zawinski's_Law

Would you accidentally a scheme? Would you could you in a train? Would you could you with a plane?

If you go that route, let me know when your emacs implementation is complete. I'll replace my OS with Factorio.

steam tells me my play time is 2,779.2 hr

i got bored / sane after the first 10k SPM base, ~1,200hr. then i got into making "me" mods.

I'm at 6,251.5 but I leave it running all night long.

I used to play Factorio.

I still do, but I used to, too.

https://www.youtube.com/watch?v=VqHA5CIL0fg

I remember this guy on Comedy Central growing up. I never knew he died in 2005. Sucks.
Superficially examining the Clos Network article, if Factorio is amenable to creating such networks, then it seems like it would be possible to create some of the simpler neural network designs, such as shown here: [1] Maybe having something like a weighting of the resource density arriving at a certain location to change the output? From the mechanics I can see here [2] it looks like Mergers / Un-Mergers and three belt speeds could probably do density weighted decision making.

[1] https://www.asimovinstitute.org/wp-content/uploads/2019/04/N...

[2] https://wiki.factorio.com/Belt_transport_system#Splitters

Factorio's "circuits" mechanic could implement neural networks pretty directly since the components can do 32-bit logic and arithmetic (integer only). It'd be pretty straightforward to implement a multi-layered neural network with a ReLU activation function.
Agree. Just based on the previous comments, it sounded like the goals was a "belt only" type of design. Figured there might be interesting functionality with variable belt object density arriving at a location being a determinant.
thanks for the notes! def want to see if I can implement self-balancing next - was thinking the bots would come in handy here? not sure if its possible to have them dynamically build blueprints
The main issue with bots is that they "cheat" what you're trying to do and just instantly solve the problem.

You can click on your logistic auto-fetch feature and just have robots search all the boxes for the items you want, and they'll automatically refill your inventory to 300-belts.

And then when you build a belt somewhere, you can either choose from your inventory, or shift-click and/or blueprint build to have robots search for those items in your entire logistic network and they just fly out, find the item, come back, and place it for you. Just in like 2 or 3 clicks (or less).

So for a lot of these challenges and demonstrations, Factorio players aim for "belts only" or other such constraints, to try and force ourselves into design constraints. Belts-only also uses zero-power (bots need power to function, and its rather substantial in practice). So there's power-benefits to going belt-only.

-----------------------

So what is your goal here? If its to build a tree in Factorio, I think we can say you succeeded.

But its not the optimal play or the "meta" factory design, lol. But I recognize that's not quite what you were going for. (Ex: the meta would be to just use bots in a bot-factory. Or keep items sorted in a belt factory, no reason to mix belts)

I think pushing players to think deeply about the "meta", including the deep thoughts upon how CLOS Networks apply to high-quality Belts/and/splitter designs, is very rewarding. Its not about trees though.

-----------

Mixed-belts are fun though. And I think I spent many good hours and weeks thinking about them back in my Factorio days. Lots of interesting problems to solve, but I think my problem was that these solutions weren't meta, nor did they demonstrate any beautiful mathematical concept.

Benes Networks / CLOS networks applied to belts however, were a perfect match. The best builds were those that matched the deep mathematical/comp. sci foundation of Benes Networks. So it was the "more fun" part of Factorio to me. Not only was I learning some deep Comp. Sci topic, but when I improved my designs based on CLOS Networks, they instantly led to improved belt-balance and throughput in my factory designs.

And a good reason to be pick about bots is in the endgame the limit is ones hardware, and bots are really computationally demanding compared to other transportation
> not sure if its possible to have them dynamically build blueprints

Not in the base game, but there's a mod for it. Nilaus recently did a short series of videos on YouTube where he used it to make an auto-expanding factory, so you should be able to find the mod name there if you want to mess with it.

omg tysm!!
This is why I don't play factorio. That brainpower can be used towards humanity and you get sick social media likes when you show off your results.

Video games that ask me to provide brainpower in return for numbers on a screen are bottom of my list. I want to learn something new.

Sure there might be puzzle aspects, and yes we decide that it is fun... but can't you also decide your studies are fun too?

Per the cheat sheet, 1.625 stack inserters can half fill a blue belt at their stack bonus of 7
That's pulling out of a chest, where they can pick up the entire stack in a single tick.

Pulling off a belt will be a notable slowdown, and picking items off of a wildly mixed belt will be a huge slowdown.

I've been dreaming of coming up a kind of 'ultimate' design by generating an expandable factory blueprint based on a set of guaranteed resource inputs, ensuring 100% utilisation of every machine and making output (rockets) at a predictable rate. Such a design would be complicated by speed/productivity upgrades that you get as you progress.
if you treat splitters as moving the computation backward on the belt, I'm pretty sure they're universal, so the intersection of splitters and computer science is computer science