The mall tries to assign recipes evenly based on crafting time, recipe output and demand. To make sure recipes are not changed too frequently the mall takes snapshots of the requested items at a configurable interval. Intermediate products are handled by feeding the crafting ingredients back into the requested items. The assemblers will then be redistributed to craft intermediates at the next snapshot.
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
The basic design uses just Assembler 2s, but the combinators can be moved fairly easily to accommodate a different machine, beacons or a liquid input line.
- screenshot_7210990_864x544.png (810.46 KiB) Viewed 53 times
The mall can be easily extended by copy-pasting more assemblers at the bottom.
Since for a given recipe it isn't easy to find the crafting time and the number of output items, these values have to be provided in constant combinators. This also acts as a whitelist for the items the mall is allowed to make.
To calculate the values, I've used this little contraption, which puts each item recipe into an assembler, counts how many tics it takes to craft, then rounds the result and puts it into a memory cell. I then copied the results from the memory cells with this mod: Paste Signals Fixed
- screenshot_6988841_928x480.png (273.91 KiB) Viewed 53 times
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
Here's a detailed description of what each part of the mall does:
Details
Wait Signal: Number of tics to wait between snapshots. There is a minimum delay that's automatically added to the setting here, so 0 makes the machine run as fast as possible. This isn't necessarily great though, as it causes the assemblers to switch recipes very often, meaning the bots need to clear the old ingredients and bring new ones in, which is slow. The delay needs to be low enough to have new requests and intermediate products appear quickly, but it also needs to be high enough to keep things stable.
Stack Size Signal: Crafting time to buffer ingredients for in the requester chests, in 100th of a second. When using shit click to set items from an assembler, this seems to be about 30s. Though here it might make sense to set it lower, so that fewer items need to be moved around when a recipe changes.
Speed Signal: The speed of the assemblers, in 1/100. This is also used in the buffered item calculation.
The middle combinator contains item craft times in s/100, the bottom one contains how many items you get per craft. The blueprint has all the items I could think of putting into a mall, calculated in a Space Age game, but you'd probably want to customise this.
This is used as the weight for each item type when assigning assemblers. If no crafting time or result count is provided for an item, it is zeroed out here, and won't be crafted.
This approach ensures that assemblers only change their recipes when necessary, existing assignment can stay the same between snapshots.
The multipliers calculated from the static settings is sent to each assembler, then the modules on the right select the multiplier for the currently crafted item, and multiply it with the ingredient signals from the assembler.
The multiplier for the ingredients is calculated similarly to step 10, but this time only the first assembler of each item type is selected. The results are summed and any items not in the logistics network are fed back into D-flip-flop input at step 4.
When the clock pulses the D-flip-flop, requester chests are disabled for one tick, so that their requests don't appear in the snapshot. The machine instead calculates its own intermediate product requests. These don't depend on crafting progress or bot performance, so it leads to more stable assembler assignment.
- drawing.png (1.24 MiB) Viewed 53 times
1. On/Off Switch
Switching this to Off stops the clock and immediately clears the recipes from all assemblers.2. Settings
The top combinator is for general settings.Wait Signal: Number of tics to wait between snapshots. There is a minimum delay that's automatically added to the setting here, so 0 makes the machine run as fast as possible. This isn't necessarily great though, as it causes the assemblers to switch recipes very often, meaning the bots need to clear the old ingredients and bring new ones in, which is slow. The delay needs to be low enough to have new requests and intermediate products appear quickly, but it also needs to be high enough to keep things stable.
Stack Size Signal: Crafting time to buffer ingredients for in the requester chests, in 100th of a second. When using shit click to set items from an assembler, this seems to be about 30s. Though here it might make sense to set it lower, so that fewer items need to be moved around when a recipe changes.
Speed Signal: The speed of the assemblers, in 1/100. This is also used in the buffered item calculation.
The middle combinator contains item craft times in s/100, the bottom one contains how many items you get per craft. The blueprint has all the items I could think of putting into a mall, calculated in a Space Age game, but you'd probably want to customise this.
3. Clock
Send pulses to create requested item snapshots. The interval is calculated from the provided setting and the number of assemblers.4. D-flip-flop
This holds the snapshotted item requests taken from the roboport above.5. Item Weights
Requested Items * Crafting Time / Result-per-CraftThis is used as the weight for each item type when assigning assemblers. If no crafting time or result count is provided for an item, it is zeroed out here, and won't be crafted.
6. Assign one assembler to each item
If there are at least as many assemblers as item types to craft, this module gives each item one assembler. This ensures that every item will be crafted eventually.7. Distribute items using weights
Distributes the remaining assemblers after step 6 between items, so that the ratio of assemblers matches the ratio of weights from step 5. Fractional assemblers are rounded down here, so there can still be free assemblers after this step.8. Assign items to remaining assemblers
Given N free leftover assemblers, this part selects N items with the highest remainder after distribution in step 7. To select the N highest signals, I'm pretty sure you'd either need to run a clock, or have N combinators. Since N is gonna be at most the number of assemblers here, I've used the second approach, implemented by the leftmost module next to each assembler.9. Send signals to assemblers
Each assembler has a memory cell which holds the recipe for that assembler. Sending a positive signal for one tick at the top of the assembler stack, will assign that signal to empty assemblers. Sending negative signals clears assigned assemblers. The bottom left module generates these signals by subtracting the assembler assignments from itself one tick earlier. Positive signals are also delayed by one tick, so that they can be assigned to assemblers cleared by the negative signals.This approach ensures that assemblers only change their recipes when necessary, existing assignment can stay the same between snapshots.
10. Calculate ingredients to stock
Ingredients * ceil(Time to Stock / Crafting Time)The multipliers calculated from the static settings is sent to each assembler, then the modules on the right select the multiplier for the currently crafted item, and multiply it with the ingredient signals from the assembler.
11. Calculate intermediate product requests
Ingredients * ceil(Requested Items / Result-per-Craft)The multiplier for the ingredients is calculated similarly to step 10, but this time only the first assembler of each item type is selected. The results are summed and any items not in the logistics network are fed back into D-flip-flop input at step 4.
When the clock pulses the D-flip-flop, requester chests are disabled for one tick, so that their requests don't appear in the snapshot. The machine instead calculates its own intermediate product requests. These don't depend on crafting progress or bot performance, so it leads to more stable assembler assignment.