Fuel consumption control for thrusters in Space Age

This board is to show, discuss and archive useful combinator- and logic-creations.
Smart triggering, counters and sensors, useful circuitry, switching as an art :), computers.
Please provide if possible always a blueprint of your creation.
alessandrouw
Burner Inserter
Burner Inserter
Posts: 10
Joined: Fri Jun 29, 2018 2:29 pm
Contact:

Re: Fuel consumption control for thrusters in Space Age

Post by alessandrouw »

MBas wrote: Sun Oct 27, 2024 7:43 pm
Set the constant F to 1200. This value represents the flow rate of a single pump. If you’re using a larger ship where one pump isn’t enough, you can use two pumps in parallel and change the constant F to 2400.

The constant E indicates the number of engines in one wing. In this setup, we’re using 4 engines per wing, for a total of 7 engines (one thruster is shared between both wings).

The parameter C specifies the total fuel consumption. In this example, we set C to 23, meaning each engine consumes 23 units of fluid per second.
I see that your BP works, perhaps it's too late at night and I'm tired, but do you mind explaining me the logic behind it? I just launched to space and made a few round trips, and I can't understand your logic, so I'm trying to break it down here starting from the Decider Combinator:
  • Decider combinator receives planet 'from-to' and you also set up desired consumption, pumps (1200) and number of enginers per wing. In your BP, F = 1200, E = 2 and C = 40
  • Arithmetic combinator receives DC info above, takes E and multiplies by C, outputs T (in this case, 80)
  • Decider combinator receives AC info above and compares if T < 1.5g (I assume this is a failsafe?). If true, it outputs to itself the value of T and pass it along to the next AC. T is still 80 so far, but it keeps adding itself each cycle, I guess
  • T now goes to Aritchmetic combinator 2 and calculates T % 1.2k (I also don't know what is going on here). Outputs Q.
  • Decider combinator 2 receives info from above AC and from the started DC. If all conditions are true, it outputs Checkmark = 1. I'm also not sure what it is checking for planets < 3
  • Pumps works when they receive Checkmark = 1 from above DC
Even though it works, I like to understand the logic I'm using. If you can explain that logic to me further, I'd really appreciate it. Thanks
User avatar
MBas
Fast Inserter
Fast Inserter
Posts: 103
Joined: Fri Jan 06, 2017 12:57 pm
Contact:

Re: Fuel consumption control for thrusters in Space Age

Post by MBas »

Here is my explanation:

I want to turn the pump on for only a few ticks. In a simple scenario, if I want to pump 120 units of fluid, the pump should be active for one tick out of every 10. This can be achieved using a simple clock combinator that accumulates a count of 1 per tick and resets every 10 ticks.

However, this simple approach has a significant problem: one tick out of 10 will pump 120 units of fluid, while one tick out of 9 will pump 133 units. This means it is impossible to achieve an activation between 120 and 133.

To address this rounding issue, the clock should not reset but continue accumulating. The activation time must be determined using the modulo operation on this ongoing clock value. The pump is activated based on the following conditions:

Pump is on when: 0 < SIGNAL modulo 1200 < FLOW
Pump is off when: FLOW <= SIGNAL modulo 1200 < 1200

(note: FLOW = E * C from used signals and SIGNAL is what we accumulate in clock)

With this method, the activation ratio is exactly FLOW / 1200. The signal continues to accumulate over time. The value 1.5G is just an arbitrary large number that ensures it has no significant effect on the operation.

With this algorithm, it technically does not matter by how much you increment SIGNAL each tick. However, the best outcome is achieved when SIGNAL := SIGNAL + FLOW, as this results in the shortest possible intervals between activation and deactivation.
alessandrouw
Burner Inserter
Burner Inserter
Posts: 10
Joined: Fri Jun 29, 2018 2:29 pm
Contact:

Re: Fuel consumption control for thrusters in Space Age

Post by alessandrouw »

I see, thanks for the explanation. I wonder if the clock accumulating indefinetely would cause an issue or lag in the long run, I have never setup something similar, so I was just curious. It would be awesome if we could control the pump flow using the circuits instead.
User avatar
MeduSalem
Smart Inserter
Smart Inserter
Posts: 1686
Joined: Sun Jun 08, 2014 8:13 pm
Contact:

Re: Fuel consumption control for thrusters in Space Age

Post by MeduSalem »

alessandrouw wrote: Mon Nov 04, 2024 1:05 pm I see, thanks for the explanation. I wonder if the clock accumulating indefinetely would cause an issue or lag in the long run, I have never setup something similar, so I was just curious. It would be awesome if we could control the pump flow using the circuits instead.
No. Accumulating forever has no significant influence on the game performance. At least not if you don't do that with like a bazillion combinators like some freaks already did in the past to stress the absolute limits of the circuit logic system. But only having a couple of those, like on a handful of platforms to control fluid flow, will not cause any performance issues you will ever notice. ^^

That said, if it would keep on accumulating forever, I guess it might eventually cause the accumulator to overflow and start from scratch again, because 32bit numbers can only store values up to 2^32 or half that if can also store negative numbers. ^^

I don't know however what would happen when it overflows, if it actually starts at 0 or at -2^31 and whether the logic above could deal with a negative number should it happen. Don't know how the factorio modulo is implemented to deal with such a situation. Some programming languages do signed modulos some don't. Could become funky then. ^^
User avatar
MBas
Fast Inserter
Fast Inserter
Posts: 103
Joined: Fri Jan 06, 2017 12:57 pm
Contact:

Re: Fuel consumption control for thrusters in Space Age

Post by MBas »

I also prefer not to rely on conventions, especially when modulo is involved. This reset does no harm to the system; it only means there will be one extra (or fewer) tick approximately once every 100 in-game hours. It's not a big deal. :)
alessandrouw
Burner Inserter
Burner Inserter
Posts: 10
Joined: Fri Jun 29, 2018 2:29 pm
Contact:

Re: Fuel consumption control for thrusters in Space Age

Post by alessandrouw »

MeduSalem wrote: Mon Nov 04, 2024 5:24 pm
alessandrouw wrote: Mon Nov 04, 2024 1:05 pm I see, thanks for the explanation. I wonder if the clock accumulating indefinetely would cause an issue or lag in the long run, I have never setup something similar, so I was just curious. It would be awesome if we could control the pump flow using the circuits instead.
No. Accumulating forever has no significant influence on the game performance. At least not if you don't do that with like a bazillion combinators like some freaks already did in the past to stress the absolute limits of the circuit logic system. But only having a couple of those, like on a handful of platforms to control fluid flow, will not cause any performance issues you will ever notice. ^^

That said, if it would keep on accumulating forever, I guess it might eventually cause the accumulator to overflow and start from scratch again, because 32bit numbers can only store values up to 2^32 or half that if can also store negative numbers. ^^

I don't know however what would happen when it overflows, if it actually starts at 0 or at -2^31 and whether the logic above could deal with a negative number should it happen. Don't know how the factorio modulo is implemented to deal with such a situation. Some programming languages do signed modulos some don't. Could become funky then. ^^
I just have this approach to avoid leaks. For what's worth, I was able to make your combinator works only during flights (so it doesn't keep adding itself forever). I just connected the hub to the Decider Combinator using a green wire and added the check condition for flight, just like your final Decider Combinator. That means this combinator effectively stops when the platform is not in flight:
11-04-2024, 21-34-59.png
11-04-2024, 21-34-59.png (65.7 KiB) Viewed 2251 times
I have not added other planets to this screenshot because this ship only goes to Vulcanus, but you can add all of them if you want. I tested a bit and it looks good. A minor and might even be unnecessary improvement, but I like it :)
daahl
Manual Inserter
Manual Inserter
Posts: 1
Joined: Sat Feb 24, 2024 8:15 pm
Contact:

Re: Fuel consumption control for thrusters in Space Age

Post by daahl »

First things first: thanks for this! It would have been cooler if one could control the thruster or pumps directly, but this works pretty good and solved my fuel problem.

However, Can someone explain why the decider is testing against 1.5G? Where is that number coming from? Why not 1G or 2G?
jdrexler75
Inserter
Inserter
Posts: 42
Joined: Sat Nov 28, 2020 5:27 pm
Contact:

Re: Fuel consumption control for thrusters in Space Age

Post by jdrexler75 »

I was able to simplify this to just one decider and a Q=1 constant that can easily be combined with other constant combinators you might have. This solution albeit doesn't have the convenience of automatic throughput calculation. The value of 40 just means "pump every 40 ticks" which is good enough for the single thruster I have (therefore only needs one pump as well). Adjust as needed...

But this should help for starting platforms that you want to keep as small and simple as possible for fewer rocket launches.



Basically the green output is looped back so the decider keeps counting up until 40 while moving (i.e. when "moving to" + "moving from" signal for any planet does equal 2). The pump is set to operate when the Q value equals 1, which then happens once every 40 ticks.

I also added a condition for it to stop pumping when we run out of ammo, to stop plowing into more asteroids... in my case the signal is ammo count that is needed until safe to proceed, you'll want to adjust (or remove) this condition as needed as well.

When stopped (left screenshot behind), the second "OR" condition becomes true for all planets and so the counter never resets and the pump stays off, at least until the counter rolls over after a few years.

Connect red input to the hub and enable both "read moving from" and "read moving to" just like in the OP design.
Screenshot_20241105_184831e.png
Screenshot_20241105_184831e.png (592.85 KiB) Viewed 2132 times
Vulteran
Burner Inserter
Burner Inserter
Posts: 12
Joined: Tue Aug 23, 2022 3:50 am
Contact:

Re: Fuel consumption control for thrusters in Space Age

Post by Vulteran »

I have been thinking about this design, and the more I think about it and use it, the more the usage of number of engines and per engine flow rate seems unintuitive.

In reality, I will generally know my total fuel production rate, and want my engines to consume exactly that much fuel per second, regardless of how many engines I actually have.

As such, the variables are really just desired consumption rate, and the pumping speed of the pump. If you assume a normal pump you could just hardcode that number as well. Any design needing more than one pump would be so large you would want custom control logic anyways for everything.

Here is an example simplified version of the combinators, using one less combinator. It also allows for you to send a yellow signal from the hub to force the pumps online even if you aren't moving. This fixes the issue where you would normally need to fiddle with the wires to get fuel into the engines initially.

hazardland
Burner Inserter
Burner Inserter
Posts: 5
Joined: Mon Apr 22, 2024 10:13 am
Contact:

Re: Fuel consumption control for thrusters in Space Age

Post by hazardland »

Vulteran wrote: Sat Nov 09, 2024 7:53 pm I have been thinking about this design, and the more I think about it and use it, the more the usage of number of engines and per engine flow rate seems unintuitive.

In reality, I will generally know my total fuel production rate, and want my engines to consume exactly that much fuel per second, regardless of how many engines I actually have.

As such, the variables are really just desired consumption rate, and the pumping speed of the pump. If you assume a normal pump you could just hardcode that number as well. Any design needing more than one pump would be so large you would want custom control logic anyways for everything.

Here is an example simplified version of the combinators, using one less combinator. It also allows for you to send a yellow signal from the hub to force the pumps online even if you aren't moving. This fixes the issue where you would normally need to fiddle with the wires to get fuel into the engines initially.

Can you help me attaching your solution to my ship? It seems elegant but too complicated for me at this point, I think I just have add pumps (where?) and connect your controller to it?

This is my ship:


It is battle tested ship and has done around 500 round trips between inner planets without flaws, but if it carries science from Fulgora nonstop - sometimes it might require 2 minute refuel and I guess I am using excess fuel
11-13-2024, 04-39-00.png
11-13-2024, 04-39-00.png (1.29 MiB) Viewed 1371 times
The_Chomper
Manual Inserter
Manual Inserter
Posts: 1
Joined: Wed Nov 13, 2024 1:13 am
Contact:

Re: Fuel consumption control for thrusters in Space Age

Post by The_Chomper »

Set the constant F to 1200. This value represents the flow rate of a single pump. If you’re using a larger ship where one pump isn’t enough, you can use two pumps in parallel and change the constant F to 2400.

The constant E indicates the number of engines in one wing. In this setup, we’re using 4 engines per wing, for a total of 7 engines (one thruster is shared between both wings).

The parameter C specifies the total fuel consumption. In this example, we set C to 23, meaning each engine consumes 23 units of fluid per second.
Two questions about how this works:
  • What's the logic behind using "wings" instead of the total number of engines? Conceptually that doesn't make any sense to me, unless there's something about engine behavior/consumption that I'm mission.
  • You have the constant combinator set to the flow rate of a single pump, but nowhere is this value used when I look at the blueprint. Should it be being used somewhere, or was the logic that needed it taken out and the constant combinator was never updated?
Xampa
Burner Inserter
Burner Inserter
Posts: 10
Joined: Sat Feb 23, 2013 3:43 pm
Contact:

Re: Fuel consumption control for thrusters in Space Age

Post by Xampa »

The_Chomper wrote: Wed Nov 13, 2024 1:26 am
  • What's the logic behind using "wings" instead of the total number of engines?
  • You have the constant combinator set to the flow rate of a single pump, but nowhere is this value used when I look at the blueprint.
- The 'Wings' come from the way the piping is done to link all the thrusters, assuming you're using a V or inverted V shape. A pump will supply all the thrusters on a side + the middle one. The thruster on the remaining side have unlimited input from a regular pipe and are instead limited by the other fuel type.

- The 1200 value is used as the modulo value in the upper left combinator. Yes the variable in the constant combinator is unused.
Grenadith
Burner Inserter
Burner Inserter
Posts: 5
Joined: Wed Feb 07, 2018 7:57 am
Contact:

Re: Fuel consumption control for thrusters in Space Age

Post by Grenadith »

MBas wrote: Mon Nov 04, 2024 12:51 am Here is my explanation:

I want to turn the pump on for only a few ticks. In a simple scenario, if I want to pump 120 units of fluid, the pump should be active for one tick out of every 10. This can be achieved using a simple clock combinator that accumulates a count of 1 per tick and resets every 10 ticks.

However, this simple approach has a significant problem: one tick out of 10 will pump 120 units of fluid, while one tick out of 9 will pump 133 units. This means it is impossible to achieve an activation between 120 and 133.

To address this rounding issue, the clock should not reset but continue accumulating. The activation time must be determined using the modulo operation on this ongoing clock value. The pump is activated based on the following conditions:

Pump is on when: 0 < SIGNAL modulo 1200 < FLOW
Pump is off when: FLOW <= SIGNAL modulo 1200 < 1200

(note: FLOW = E * C from used signals and SIGNAL is what we accumulate in clock)

With this method, the activation ratio is exactly FLOW / 1200. The signal continues to accumulate over time. The value 1.5G is just an arbitrary large number that ensures it has no significant effect on the operation.

With this algorithm, it technically does not matter by how much you increment SIGNAL each tick. However, the best outcome is achieved when SIGNAL := SIGNAL + FLOW, as this results in the shortest possible intervals between activation and deactivation.
So I'm pretty sure that I reached 2.1G on my T signal (I had increased the maximum value limit to 2.1G). It went negative.
factorio_OUIJbAitF8.jpg
factorio_OUIJbAitF8.jpg (671.71 KiB) Viewed 1162 times
This in turn causes the Q signal to always be less than T, thus causing the pumps to be active constantly. Did I mess something up? My ships that hit/exceeded T=2.1G are definitely not pulsing the pumps anymore.
factorio_rmhE9FrRoV.jpg
factorio_rmhE9FrRoV.jpg (788.02 KiB) Viewed 1162 times
My save has 128 hours in it. Unless I'm missing something, the 2.1G limit can be reached pretty quickly, actually. For instance:

My parameters were set to C=90 and E=3. Therefore, T=270. This value is added to itself in the timer every single tick, so given 60 UPS, it would only take approximately 36 hours until it reaches T=2.1G (2,100,000,000 / 60 UPS / 60 sec per min / 60 min per hour / 270 addition rate). Am I correct? I'm not enough of a circuits guru to understand how to solve this problem though.
User avatar
MBas
Fast Inserter
Fast Inserter
Posts: 103
Joined: Fri Jan 06, 2017 12:57 pm
Contact:

Re: Fuel consumption control for thrusters in Space Age

Post by MBas »

Grenadith wrote: Thu Nov 14, 2024 6:41 am My save has 128 hours in it. Unless I'm missing something, the 2.1G limit can be reached pretty quickly, actually. For instance:
Yes, but the statement remains that it doesn’t matter. Even if you set it to 50k, it doesn’t matter. What it does is, when the timer resets, I pump an extra 20 fluid units into the system, or 20 less. Or maybe not even that, depending on rounding errors. This combinator logic mainly ensures that you don’t encounter this rounding error every time (which could be a problem), but only once every few hours, which is definitely not an issue

It is true that it doesn’t necessarily have to be an arbitrarily large value, but baseT * 1200 is sufficient. That value is prepared for a safe modulus of 1200 and eliminates any rounding errors accumulated by the baseT value. I am working on an update where I also want to include some remarks, and I will edit the original BP accordingly. Thanks for the tip!
Abhorrent
Manual Inserter
Manual Inserter
Posts: 1
Joined: Fri Nov 15, 2024 2:49 am
Contact:

Re: Fuel consumption control for thrusters in Space Age

Post by Abhorrent »

I'm A little lazy to post photos right now, so ill try to explain good. I think a much simpler design to do is to simply connect and limit the Pumps on separate storage tanks of each fuel parts. This could then open up the opportunity to only pump when starting like you said, and then voila you can find the right percentage.( I chose 100 out of 25000 for example which on 7 thrusters, pumps each at 26/s.) Once again, sorry no picture but just giving an idea and maybe you could shrink the design to maybe 1 arithmetic.
User avatar
Romayne
Inserter
Inserter
Posts: 27
Joined: Sun Nov 03, 2024 11:26 pm
Contact:

Re: Fuel consumption control for thrusters in Space Age

Post by Romayne »

Interesting!

I use a much more primitive design, which I parameterized into a blueprint after some discussion with someone on the discord. It could technically use one pump (as you don't need to limit both fuel types -- the lesser controls the consumption rate), but I use two to even things out.

I made it this way to be small and flexible, as I like to tinker with a lot of ship designs and I don't always have room for storage tanks. So far, it works well!

Note that while I have attached it for people to test out, I don't expect it to be usable for one important reason -- rounding errors.

If you try to, with an interval of 60 ticks, use 21 units/s, you WILL get 20. the way i made this means precise fuel values get rounded *down* to the nearest multiple of 20, unless the interval is adjusted. But hey, works for me! >:D

Image

Xabster
Manual Inserter
Manual Inserter
Posts: 1
Joined: Wed Nov 20, 2024 5:03 pm
Contact:

Re: Fuel consumption control for thrusters in Space Age

Post by Xabster »

Edit: I think I understand it better now and my comment here should be ignored

I have made the same thing in principle, however I just adjust the number of ticks to be open and the timer is running between 0 and 59. Does your system do much better than that? I understand that you set a number for fluid units per second instead of ticks open per second but the conversion is just a factor 20, isn't it?

However, doing things like this with integers and with < operators you will have a truncated value instead of a rounded value, I believe.

If your calculation asks it to be open < 80 fluid out of 1200 it matches the tickrate of the game so it will be open for 4 ticks and everything is fine. What if you ask for < 97 fluid out of the 1200? Then it'll be open for 4 ticks still even though 5 ticks is a better match...
Last edited by Xabster on Wed Nov 20, 2024 5:40 pm, edited 1 time in total.
Kenosos
Manual Inserter
Manual Inserter
Posts: 2
Joined: Fri Nov 22, 2024 10:59 am
Contact:

Re: Fuel consumption control for thrusters in Space Age

Post by Kenosos »

Thanks for this circuit Mbas, it helped a lot.
I seem to be having intermittent issues where ships that have already set off end up stranded in orbit at variously random points as there's no fuel in thrusters, I think it may be because I was using low consumption values such as 10, I had to slow my ships down as the turrets couldn't keep up with incoming asteroids. Is there any way around this?
Last edited by Kenosos on Fri Nov 22, 2024 11:10 am, edited 1 time in total.
Post Reply

Return to “Combinator Creations”