Add some more ideas

This commit is contained in:
lol3rrr
2026-03-27 07:57:58 +01:00
parent b11b3ee754
commit 065cfbb230

View File

@@ -84,6 +84,165 @@ For example an inserter will perform an intersection, because it can only accept
But a belt will perform a union, because might have constraints coming from inserters taking from them and downstream belts so the items can take either path.
Basically the constraints for every edge will be combined using an intersection with the constraints of the node itself, and then all downstream edge constraints will be combined using a union to form the final upstream constraint.
JOIN Operator: used to combine multiple "or" constraints, for example for combining downstream constraints.
This is done by adding all the limits for items together.
CHAIN Operator: used to combine multiple "and" constraints.
### Representation
A tree with 3 levels, each doing something different
The lowest level, selects by item.
The next level limits the rate per item.
The top level limits the total throughput.
### Examples
{% carousel() %}
{% carousel_item() %}
Before propogation
{% mermaid() %}
---
title: Inserter Feeding into Assembler
---
flowchart BT
subgraph assembler
direction BT
root_1["unlimited"]
1_first_limit["<= 5/s"]
1_first_items["iron"]
1_second_limit["<= 10/s"]
1_second_items["copper wire"]
1_first_limit --> root_1
1_second_limit --> root_1
1_first_items --> 1_first_limit
1_second_items --> 1_second_limit
end
subgraph inserter with iron filter
direction BT
root_2["total <= 20/s"]
2_first_limit["<= 20/s"]
2_first_items["iron"]
2_first_limit --> root_2
2_first_items --> 2_first_limit
end
{% end %}
{% end %}
{% carousel_item() %}
After first propogation step
{% mermaid() %}
---
title: Inserter Feeding into Assembler
---
flowchart BT
subgraph assembler
direction BT
root_1["unlimited"]
1_first_limit["<= 5/s"]
1_first_items["iron"]
1_second_limit["<= 10/s"]
1_second_items["copper wire"]
1_first_limit --> root_1
1_second_limit --> root_1
1_first_items --> 1_first_limit
1_second_items --> 1_second_limit
end
subgraph inserter with iron filter
direction BT
root_2["total <= 20/s"]
2_first_limit["<= 20/s && <= 5/s"]
2_first_items["iron"]
2_second_limit["<= 0/s && <= 10/s"]
2_second_items["copper wire"]
2_first_limit --> root_2
2_second_limit --> root_2
2_first_items --> 2_first_limit
2_second_items --> 2_second_limit
end
{% end %}
{% end %}
{% carousel_item() %}
After second propogation step
{% mermaid() %}
---
title: Inserter Feeding into Assembler
---
flowchart BT
subgraph assembler
direction BT
root_1["unlimited"]
1_first_limit["<= 5/s"]
1_first_items["iron"]
1_second_limit["<= 10/s"]
1_second_items["copper wire"]
1_first_limit --> root_1
1_second_limit --> root_1
1_first_items --> 1_first_limit
1_second_items --> 1_second_limit
end
subgraph inserter with iron filter
direction BT
root_2["total <= 20/s"]
2_first_limit["<= 5/s"]
2_first_items["iron"]
2_second_limit["<= 0/s"]
2_second_items["copper wire"]
2_first_limit --> root_2
2_second_limit --> root_2
2_first_items --> 2_first_limit
2_second_items --> 2_second_limit
end
{% end %}
{% end %}
{% carousel_item() %}
After final propogation step
{% mermaid() %}
---
title: Inserter Feeding into Assembler
---
flowchart BT
subgraph assembler
direction BT
root_1["unlimited"]
1_first_limit["<= 5/s"]
1_first_items["iron"]
1_second_limit["<= 10/s"]
1_second_items["copper wire"]
1_first_limit --> root_1
1_second_limit --> root_1
1_first_items --> 1_first_limit
1_second_items --> 1_second_limit
end
subgraph inserter with iron filter
direction BT
root_2["total <= 20/s"]
2_first_limit["<= 5/s"]
2_first_items["iron"]
2_first_limit --> root_2
2_first_items --> 2_first_limit
end
{% end %}
{% end %}
{% end %}
# Examples
## Belt Line with one slower belt