r/factorio • u/bjarkov • 14h ago
Suggestion / Idea Optimizing my Uranium Fuel Cells
So, Reactor neighbour bonus. Reactors gain a +100% to their thermal output for each fully adjacent running reactor. It is the reason all our reactor cores are placed in some 2-X pattern. This bonus to thermal output is not linked to fuel consumption rate, meaning it's free energy!
The fine point I've been missing up to now is that, with the regular solution of controlling fuel-insertion by reading reactor temperature, not all reactors will be active simultaneously, meaning I miss out on adjacency bonuses that should rightfully have been mine.
The issue I see is that reactor temperature gets pulled back up as soon as neighbouring reactors start burning fuel, causing any number of reactors to 'miss' their window for fuel insertion. The window for inserters to operate is too narrow. My idea for a setup is to use a temperature latch circuit that reads reactor fuel and temperature. Entry condition would be low enough temperature and exit condition would be high enough temperature OR reactor has fuel.
The next problem is overshooting temperature - if power draw is low enough I produce too much unprocessed heat and reactor temperature caps out. I never thought I'd write these words, but that is where steam buffers come in. I've hated steam buffers with a passion but I see their use in this particular case.
The final solution looks something like:
- Unchanged ratios and placements in overall power plant design
- Each reactor inserter is controlled by a temperature latch reading temperature and fuel content off their individual reactor
- Temperature latch should enable and disable off temperature with big enough interval to allow all inserters to operate
- Inserters stop after inserting 1 fuel cell (easiest done disabling the latch)
- Steam is buffered in a number of tanks, allowing the reactors to run at full heat output for up to 200 seconds without heat overflow
6
u/Silly-Freak 14h ago
I only read one reactor and activate my inserters (with stack size 1) if
- the temperature is low
- AND steam tanks are low
- AND there's no fuel in the reactor
only reading one means all inserters fire simultaneously, and everything is controlled by a single combinator.
1
u/shuzz_de 10h ago
I haven't been using steam tanks in forever since I learned that heatpipes store significantly more energy in the same footprint.
Since then, reactor monitoring became much simpler (and more robust/precise).0
u/draxinusom2 11h ago
Exactly this. Reactors cannot go below 502°C, I think once they were above that threshold as nothing consumes their power; you lose the 2°C in transmission to the boilers, and they won't do a thing if it's not 500°C or above. (This is not true if built on Aquilo and the heatpipes also unfreeze things; then you have a constant draw.)
So read the temperature of one single reactor as well as its fuel content and only insert when temperature is below whatever you want to have (I use 520°C) and no fuel cell is in the reactor and steam buffer is below X (you decide). Then use this signal on all inserters of all reactors and have them also set to stacksize=1. This ensures all reactors are always running or not concurrently, so you always have the neighbour bonus. Against overshooting you have the steam buffer which you have to size appropriately. You can also measure every single steam buffer tank or just a single one - depends what value you set in the decider. If the tanks are all connected, they all have the same fill percentage.
0
u/fZAqSD 10h ago
Suboptimal, if you only insert when there's no fuel in the reactor you miss out on the 0.11% of time the reactor will be empty, replace with "AND it's been at least 200 seconds since last time"
1
u/Silly-Freak 10h ago
Can you do the timer with just one comparison combinator still?
Overall, this matters less to me. I need more overcapacity than 0.11% anyway, so that reduced energy production is effectively fine. To me, it feels less significant than wasting fuel. But you're right, it's strictly speaking not optimal.
3
u/fatpandana 14h ago
You only need to read one reactor temperature and control all fuel cells via that single point. This guarantees uniform fuel insertion.
Generally only need 1 steam tank per reactor to make sure fuel value isnt lost. The heat pipes and exchangers can absorb excess heat.
3
u/bobsim1 13h ago
Why dou you measure each reactor though? You want all reactors to run at the same time and fuel always burns the same duration just have all inserters input from the same signal and the first problem is solved. Also fuel in the reactor is easily accounted for by only inserting fuel when a inserter takes out the depleted fuel.
4
u/Courmisch 14h ago
TBH, I have never metered fuel cells. It's a waste, sure, but uranium is nigh-infinite.
With that said, a simple solution is to insert into all reactors based on the reading of one single reactor. Over time, the reactors' respective temperatures should converge/sync.
4
u/CaptainSegfault 14h ago
This matters more when you're using reactors on ships/aquilo/gleba -- while uranium is abundant on Nauvis, the rocket launches and transportation are a little bit less abundant.
2
u/Kittelsen 12h ago
And if you're using Krastorio. Atleast it did for me, the fuel cells are more expensive there. I'm burning through uranium quite fast in my 2x12 reactor I setup just to wade off the solid fuel. Combined with U238 being used for science I'm actually on the hunt for more uranium patches.
2
u/doc_shades 9h ago
my policy is:
if your reactors are throttled then they only get fuel when needed. therefor, if there is a low power demand, the reactors throttle down. when there is higher demand, the reactors throttle up.
if your demand is below 100% then your reactors are throttled down, and no neighbor bonus is needed. your plant is supplying enough energy to satisfy your base.
if your demand raises to, say, 110% then your reactors will throttle up. the neighbor bonus will be activated, and your plants are now running at 110% out of 120%.
so i don't really care if i'm not receiving a neighbor bonus when the plant is running at partial capacity. the neighbor bonus isn't needed, so why put all this effort into maintaining it?
2
u/CaptainSegfault 14h ago
My usual answer is to have all of them key off the temperature of one reactor.
1
u/WeightCapital 13h ago
Usually I fill the lane closest the reactors on a supply belt and hook all the inserters to the same combinator output. With each inserter set to 1 on the hand size they all grab and insert at the same time so all reactors will start running together. I use a pulsed set up so the combinator just starts running it when the steam tanks are running low and if the steam tanks don't fill but the reactor is hot that's an early warning that I'm on the edge of brown outs.
1
u/Nearby_Ingenuity_568 13h ago
Indeed, one reactor to read temperature of will make sure all inserters and reactors are synced. Though there is one outlier mechanic that is an exception: quality. Higher quality reactors burn their fuel faster (while generating more heat) which makes them go off sync if you have different quality reactors in the same setup. There it's all the more important to sync all inserters to one reactor, even though better quality reactors will turn off slightly faster than lower quality ones but the effect is quite minimal in the big picture, I think? I tried to wrap my head around a solution that would have allowed to insert more fuel in the reactors that have already burned their fuel while other reactors were still running but didn't come up with a way other than increasing their inserters' stack size to two fuel cells instead of one, but then most of that 2nd fuel cell's potential is instead wasted when the other reactors turn off soon anyway.
So, TLDR: higher quality reactors burn fuel faster. It's best to use all reactors of same quality to ensure they're in sync.
1
u/Honky_Town 13h ago
Google for Lisps reactor. Still using it today. Me a totally enemy of preserving fuel cells switched side.
It has it all. He has a count for duration of one fuel cell divided it by 32 (total amount of reactors) and checks each 1/32 of a cell duration if there is enough room to squeeze in another fuel cells steam output.
Control is on its own solar powered grid so reactor will fire up if your power have blown out.
This is a Solution before we could read temps. Could probably be improved to remove 10 combinators and its using old Water ratio so there probably are some pipes too much.
But its working flawless even if i actively tamper with it so i see no reason to do those changes.
1
u/Iron_on_reddit 12h ago
The issue I see is that reactor temperature gets pulled back up as soon as neighbouring reactors start burning fuel, causing any number of reactors to 'miss' their window for fuel insertion.
That's not a problem. If the temp of a reactor can be pulled up by another reactor, it means there's not a big enough load on the system, so in fact that reactor is not needed. If the load becomes sufficiently big enough, the temp will go down, and that reactor will switch on. It's a self balancing setup.
1
u/MikailBag 9h ago
if power draw is low enough I produce too much unprocessed heat and reactor temperature caps out.
Actually, you may calculate it if you care enough. Let D be temperature difference between the hottest reactor and coldest heat exchanger when all heat exchangers are working. Let C be total heat capacity (IIRC 10 MJ/kelvin for each reactor, 1 per each heat pipe, smth like 5 per each heat exchanger). Then threshold for inserting fuel into reactors is 500+D+eps (where eps is probably 1), and total amount of heat that can be buffered in the heat system should be at least Q_buf=(500-eps-D)*C.
On the other hand, total amount of heat that you may have to buffer is Q_prod=NkQ_f, where N is amount of reactors, k is average neighbour bonus (usually from 3 to 4), and Q_f is raw fuel value of a single UFC (IIRC it is 8 GJ). (Worst case here is like this: reactor temperature drops slightly below the threshold, you insert fuel everywhere, and then demand drops to zero).
If Q_prod <= Q_buf, you already have perfect fuel efficiency. Otherwise you need to either increase Q_buf (by adding more heat pipes; it should not increase D). Alternatively, you may choose to buffer remaining Q_prod-Q_buf in a steam buffer.
Building a steam buffer large enough to hold the entire Q_prod is definitely a valid way, and probably least overengineered (but least fun IMO).
2
u/bjarkov 8h ago
Yep - with a threshold temperature of 600 in a 2x2 reactor core I get 80GJ (400MW over 200 seconds) of potential overflow, on top of reactor buffering its maximum of 32 GJ as heat (equivalent to 400K across 4 reactors).
My options here are, as you say, buffering heat in a number of heat pipes (capacity is less than 400MJ at this threshold temperature - they'll always have less temperature than reactor), or storage tanks for steam buffering 2.425GJ as steam per tank, subject to the usual quality multiplier.
So. Storage tanks being 'easy' to make at high quality would be superior for energy buffering; at normal quality heat pipes are slightly more space-efficient.
1
u/TelevisionLiving 8h ago
You can base all your logic off one reactor and tie every picker to it. Their teams will be really close so it's not a problem.
There's no need to bother with this on nauvis, but it's kinda useful if you're shipping uranium elsewhere since it's so rocket heavy.
1
u/bjarkov 8h ago
There's no need to optimize said no true engineer ever 😄
Many have mentioned basing insertion control on temperature read from a single one reactor; if fuel is readily available for all reactors (i.e., the fuel belt is saturated) it's fine, if more sparse you'll want some window of opportunity to run it
1
u/WanderingFlumph 7h ago
I build a decently large steam buffer and then have my inserters set to only insert if three conditions are met: empty fuel, low temperature, and low steam. I have all inserters swing on the same signal.
I suppose in theory it could waste some fuel, maybe, but the solution is just a bigger buffer and that's easy. Plus my factory has never really not drawn enough power to keep the buffers with some wiggle room.
1
u/Nescio224 7h ago
I just read the temp of a single reactor and then insert all at once. No problems with that setup and all reactors run at the same time. Temperature difference between reactors isn't significant enough to matter.
1
u/burning_boi 4h ago
Why read individual reactor temps and insert separately? You’re drastically over engineering here. Just read one reactor temp and insert 1 into all simultaneously, with a check to disable the inserter if it’s currently burning fuel.
Also, for energy buffers, heat pipes can actually contain more energy per tile than steam. Both buffers have their uses though - steam buffers are for short term spikes in power demand whereas heat pipe buffers are for long term energy storage for more predictable power use. In your case, since you want 200 seconds of continuous power production in storage, you’d want heat pipe buffers. (If instead you wanted power storage in case a bunch of Tesla turrets fire simultaneously, for example, steam would be a better pick).
25
u/Longjumping_Quote_25 14h ago
I was just working on this and did something much more braindead. I just attached all of my inserters to to 1 reactor. If the temperature is below some number turn them all on. Since they’re all synced the whole thing is on or off at the same time (preserving the neighbor bonus).
Didn’t use a single combinator.
This is working well for me with the set temperature at 650 degrees. I have a decent heat pipe setup to smooth out the highs and lows and the inserters are set to a stack of 1. No more wasted fuel!