An automatic factory layout generator for the video game Factorio. This tool analyzes production recipes and generates optimized factory blueprints.
Note
The quality-updated version of the linear solver is available here [notebooks/layout.ipynb]
- Recipe Optimization: Uses linear programming to determine optimal machine counts and production flows
- Blueprint Processing: Parse and generate Factorio blueprint strings with base64 encoding/decoding
- Layout Generation: Automatic placement of machines using mathematical optimization
- Routing Algorithms: Pathfinding for connecting machines (A* and Dijkstra implementations)
- Bin Packing: Efficient matching of input/output flows between machines
- Multiple Mod Support: Database files for base game, Angel's & Bob's mods, and Krastorio2
flow.py- Linear programming optimization for production flowsblueprint.py- Blueprint string parsing and generation utilitiesbinpacking.py- Bin packing algorithm for flow matchingplacement.py- Machine placement using Steiner tree algorithmsnaive_routing.py- A* pathfinding for connecting machinesdatabase.py- Game data loading and querying systemarith.py- Mathematical utilities including fraction handling
- Calculate optimal machine counts for recipes using linear programming
- Match production flows between machines using bin packing
- Place machines spatially using optimization models
- Route connections between machines using pathfinding
- Generate final blueprint string for import into Factorio
base.json- Vanilla Factorio recipes and itemsangels-bobs.json- Angel's & Bob's modpack datakrastorio2.json- Krastorio2 mod data
The algorithms implemented in this project are based on classical combinatorial optimization techniques from:
- Combinatorial Optimization: Theory and Algorithm (Springer) - https://link.springer.com/book/10.1007/978-3-662-56039-6
- Foreman2 - Visual planning tool for Factorio production flowcharts
- Production Flow - Graph-based production flow optimizer for Factorio
- Factorio Optimizer - Helps optimize Factorio factory layouts
- Factorio Tools - Tools for generating optimal oil field layouts
- Factorio Calculator - Web-based calculator for production ratios and resource planning
- Kirk McDonald's Calculator - Popular web tool for Factorio production analysis
- Mixed Integer Linear Programming: For optimizing production flows and machine counts
- Bin Packing: Classical optimization problem for matching input/output flows
- Steiner Tree Problem: Kou-Markowsky algorithm for optimal machine placement
- Graph Pathfinding: Dijkstra and A* algorithms for routing connections
- Continued Fractions: Exact continuous fractions for floating-point approximation & splitter computations.
To use the notebooks configuration correctly, add "jupyter.notebookFileRoot": "${workspaceFolder}" to your configuration.
using python-mip on silicon apple requires to have the 0.16rc2 version at least, and a gcc compiler installed. if using macports and not homebrew you need to relink libgfortran
install_name_tool -change
/opt/homebrew/opt/gcc/lib/gcc/current/libgfortran.5.dylib
/opt/local/lib/libgcc/libgfortran.5.dylib
.venv/lib/python3.11/site-packages/mip/libraries/cbc-c-darwin-arm64.dylib