Files
mikhail 1c735b124a refactor: DFS solver → matrix-based linear algebra (MathNet.Numerics)
- Rewrite ProductionSolver: system of linear equations A×x=b via LU/QR decomposition
- Add ResourceClassifier: classify resources as target/intermediate/raw
- Add RecipeMatrixBuilder: build coefficient matrix and RHS vector
- Add DI container (Microsoft.Extensions.DependencyInjection) in CLI
- Fix resource flow calculation (RecipeRate is total, not per-machine)
- Fix recipes.json: moduleCategory → machineCategory (recipe #19)
- Update tests: 30 tests covering solver, classifier, matrix builder
- Update README: document matrix model, architecture, principles
2026-07-02 14:46:14 +03:00

193 lines
11 KiB
JSON

{
"resources": [
{ "id": 1, "name": "Iron Ore" },
{ "id": 2, "name": "Copper Ore" },
{ "id": 3, "name": "Stone" },
{ "id": 4, "name": "Water" },
{ "id": 5, "name": "Coal" },
{ "id": 6, "name": "Wood" },
{ "id": 7, "name": "Iron Plate" },
{ "id": 8, "name": "Copper Plate" },
{ "id": 9, "name": "Steel Plate" },
{ "id": 10, "name": "Copper Cable" },
{ "id": 11, "name": "Electronic Circuit" },
{ "id": 12, "name": "Electronic Circuit (Productivity)" },
{ "id": 13, "name": "Advanced Circuit" },
{ "id": 14, "name": "Processing Unit" },
{ "id": 15, "name": "Low Grade Alloy" },
{ "id": 16, "name": "Gear Wheel" },
{ "id": 17, "name": "Belt" },
{ "id": 18, "name": "Express Belt" },
{ "id": 19, "name": "Turbo Belt" },
{ "id": 20, "name": "Flared Copper Pipe" },
{ "id": 21, "name": "Sulfuric Acid" },
{ "id": 22, "name": "Sulfur" },
{ "id": 23, "name": "Crude Oil" },
{ "id": 24, "name": "Heavy Oil Residue" },
{ "id": 25, "name": "Light Oil" },
{ "id": 26, "name": "Petroleum Gas" },
{ "id": 27, "name": "Solid Fuel" },
{ "id": 28, "name": "Lubricant" },
{ "id": 29, "name": "Plastic Bar" },
{ "id": 30, "name": "Red Science Pack" },
{ "id": 31, "name": "Green Science Pack" },
{ "id": 32, "name": "Blue Science Pack" },
{ "id": 33, "name": "Yellow Science Pack" },
{ "id": 34, "name": "Space Science Pack" }
],
"machines": [
{ "id": 1, "name": "Mining Drill", "craftingSpeed": 0.5, "energy": 4.0, "moduleSlots": 0, "allowedCategories": ["extracting"] },
{ "id": 2, "name": "Pumpjack", "craftingSpeed": 0.5, "energy": 2.0, "moduleSlots": 0, "allowedCategories": ["extracting"] },
{ "id": 3, "name": "Smelter", "craftingSpeed": 0.5, "energy": 3.0, "moduleSlots": 2, "allowedCategories": ["smelting"] },
{ "id": 4, "name": "Steel Furnace", "craftingSpeed": 0.5, "energy": 6.0, "moduleSlots": 2, "allowedCategories": ["smelting"] },
{ "id": 5, "name": "Assembler 1", "craftingSpeed": 0.5, "energy": 3.0, "moduleSlots": 2, "allowedCategories": ["basic-crafting"] },
{ "id": 6, "name": "Assembler 2", "craftingSpeed": 0.5, "energy": 4.0, "moduleSlots": 2, "allowedCategories": ["basic-crafting"] },
{ "id": 7, "name": "Assembler 3", "craftingSpeed": 0.5, "energy": 6.0, "moduleSlots": 4, "allowedCategories": ["basic-crafting"] },
{ "id": 8, "name": "Chemical Plant", "craftingSpeed": 0.5, "energy": 6.0, "moduleSlots": 4, "allowedCategories": ["advanced-crafting", "basic-crafting"] },
{ "id": 9, "name": "Oil Extractor", "craftingSpeed": 0.5, "energy": 4.0, "moduleSlots": 0, "allowedCategories": ["extracting"] }
],
"modules": [
{ "id": 1, "name": "Speed Module 1", "type": "Speed", "speedBonus": 0.10, "productivityBonus": 0, "efficiencyBonus": -0.05 },
{ "id": 2, "name": "Speed Module 2", "type": "Speed", "speedBonus": 0.20, "productivityBonus": 0, "efficiencyBonus": -0.10 },
{ "id": 3, "name": "Speed Module 3", "type": "Speed", "speedBonus": 0.30, "productivityBonus": 0, "efficiencyBonus": -0.15 },
{ "id": 4, "name": "Productivity Module 1", "type": "Productivity", "speedBonus": -0.10, "productivityBonus": 0.10, "efficiencyBonus": -0.05 },
{ "id": 5, "name": "Productivity Module 2", "type": "Productivity", "speedBonus": -0.15, "productivityBonus": 0.20, "efficiencyBonus": -0.10 },
{ "id": 6, "name": "Productivity Module 3", "type": "Productivity", "speedBonus": -0.20, "productivityBonus": 0.30, "efficiencyBonus": -0.15 },
{ "id": 7, "name": "Efficiency Module 1", "type": "Efficiency", "speedBonus": -0.05, "productivityBonus": 0, "efficiencyBonus": 0.10 },
{ "id": 8, "name": "Efficiency Module 2", "type": "Efficiency", "speedBonus": -0.10, "productivityBonus": 0, "efficiencyBonus": 0.20 },
{ "id": 9, "name": "Efficiency Module 3", "type": "Efficiency", "speedBonus": -0.15, "productivityBonus": 0, "efficiencyBonus": 0.30 }
],
"recipes": [
{
"id": 1, "name": "Iron Plate", "category": "smelting", "craftTime": 3.0, "machineCategory": "smelting",
"ingredients": [ { "resourceId": 1, "amount": 1 } ],
"products": [ { "resourceId": 7, "amount": 1 } ]
},
{
"id": 2, "name": "Copper Plate", "category": "smelting", "craftTime": 3.0, "machineCategory": "smelting",
"ingredients": [ { "resourceId": 2, "amount": 1 } ],
"products": [ { "resourceId": 8, "amount": 1 } ]
},
{
"id": 3, "name": "Steel Plate", "category": "smelting", "craftTime": 5.0, "machineCategory": "smelting",
"ingredients": [ { "resourceId": 7, "amount": 2 }, { "resourceId": 5, "amount": 1 } ],
"products": [ { "resourceId": 9, "amount": 1 } ]
},
{
"id": 4, "name": "Copper Cable", "category": "basic-crafting", "craftTime": 0.5, "machineCategory": "basic-crafting",
"ingredients": [ { "resourceId": 8, "amount": 1 } ],
"products": [ { "resourceId": 10, "amount": 5 } ]
},
{
"id": 5, "name": "Electronic Circuit", "category": "basic-crafting", "craftTime": 3.0, "machineCategory": "basic-crafting",
"ingredients": [ { "resourceId": 10, "amount": 2 }, { "resourceId": 7, "amount": 1 } ],
"products": [ { "resourceId": 11, "amount": 1 } ]
},
{
"id": 6, "name": "Electronic Circuit (Productivity)", "category": "basic-crafting", "craftTime": 4.0, "machineCategory": "basic-crafting",
"ingredients": [ { "resourceId": 10, "amount": 5 }, { "resourceId": 7, "amount": 1 } ],
"products": [ { "resourceId": 11, "amount": 3 } ]
},
{
"id": 7, "name": "Advanced Circuit", "category": "advanced-crafting", "craftTime": 5.0, "machineCategory": "advanced-crafting",
"ingredients": [ { "resourceId": 11, "amount": 3 }, { "resourceId": 9, "amount": 1 } ],
"products": [ { "resourceId": 13, "amount": 1 } ]
},
{
"id": 8, "name": "Processing Unit", "category": "advanced-crafting", "craftTime": 8.0, "machineCategory": "advanced-crafting",
"ingredients": [ { "resourceId": 13, "amount": 1 }, { "resourceId": 21, "amount": 1 } ],
"products": [ { "resourceId": 14, "amount": 1 } ]
},
{
"id": 9, "name": "Low Grade Alloy", "category": "smelting", "craftTime": 3.0, "machineCategory": "smelting",
"ingredients": [ { "resourceId": 7, "amount": 15 }, { "resourceId": 8, "amount": 5 } ],
"products": [ { "resourceId": 15, "amount": 1 } ]
},
{
"id": 10, "name": "Gear Wheel", "category": "basic-crafting", "craftTime": 1.0, "machineCategory": "basic-crafting",
"ingredients": [ { "resourceId": 7, "amount": 2 } ],
"products": [ { "resourceId": 16, "amount": 1 } ]
},
{
"id": 11, "name": "Gear Wheel (Productivity)", "category": "basic-crafting", "craftTime": 2.0, "machineCategory": "basic-crafting",
"ingredients": [ { "resourceId": 7, "amount": 5 } ],
"products": [ { "resourceId": 16, "amount": 3 } ]
},
{
"id": 12, "name": "Belt", "category": "basic-crafting", "craftTime": 1.0, "machineCategory": "basic-crafting",
"ingredients": [ { "resourceId": 7, "amount": 2 }, { "resourceId": 10, "amount": 1 } ],
"products": [ { "resourceId": 17, "amount": 1 } ]
},
{
"id": 13, "name": "Express Belt", "category": "basic-crafting", "craftTime": 4.0, "machineCategory": "basic-crafting",
"ingredients": [ { "resourceId": 9, "amount": 2 }, { "resourceId": 11, "amount": 1 }, { "resourceId": 16, "amount": 1 } ],
"products": [ { "resourceId": 18, "amount": 1 } ]
},
{
"id": 14, "name": "Turbo Belt", "category": "basic-crafting", "craftTime": 10.0, "machineCategory": "basic-crafting",
"ingredients": [ { "resourceId": 18, "amount": 2 }, { "resourceId": 13, "amount": 1 }, { "resourceId": 29, "amount": 1 } ],
"products": [ { "resourceId": 19, "amount": 1 } ]
},
{
"id": 15, "name": "Flared Copper Pipe", "category": "basic-crafting", "craftTime": 2.0, "machineCategory": "basic-crafting",
"ingredients": [ { "resourceId": 8, "amount": 5 }, { "resourceId": 9, "amount": 1 } ],
"products": [ { "resourceId": 20, "amount": 1 } ]
},
{
"id": 16, "name": "Sulfuric Acid", "category": "advanced-crafting", "craftTime": 4.0, "machineCategory": "advanced-crafting",
"ingredients": [ { "resourceId": 22, "amount": 1 }, { "resourceId": 4, "amount": 1 } ],
"products": [ { "resourceId": 21, "amount": 2 } ]
},
{
"id": 17, "name": "Solid Fuel", "category": "advanced-crafting", "craftTime": 4.0, "machineCategory": "advanced-crafting",
"ingredients": [ { "resourceId": 25, "amount": 1 } ],
"products": [ { "resourceId": 27, "amount": 1 } ]
},
{
"id": 18, "name": "Lubricant", "category": "advanced-crafting", "craftTime": 2.0, "machineCategory": "advanced-crafting",
"ingredients": [ { "resourceId": 25, "amount": 1 }, { "resourceId": 4, "amount": 1 } ],
"products": [ { "resourceId": 28, "amount": 1 } ]
},
{
"id": 19, "name": "Lubricant (Productivity)", "category": "advanced-crafting", "craftTime": 4.0, "machineCategory": "advanced-crafting",
"ingredients": [ { "resourceId": 25, "amount": 2 }, { "resourceId": 4, "amount": 2 } ],
"products": [ { "resourceId": 28, "amount": 3 } ]
},
{
"id": 20, "name": "Plastic Bar", "category": "advanced-crafting", "craftTime": 4.0, "machineCategory": "advanced-crafting",
"ingredients": [ { "resourceId": 26, "amount": 1 }, { "resourceId": 21, "amount": 1 } ],
"products": [ { "resourceId": 29, "amount": 1 } ]
},
{
"id": 21, "name": "Plastic Bar (Productivity)", "category": "advanced-crafting", "craftTime": 8.0, "machineCategory": "advanced-crafting",
"ingredients": [ { "resourceId": 26, "amount": 3 }, { "resourceId": 21, "amount": 3 } ],
"products": [ { "resourceId": 29, "amount": 5 } ]
},
{
"id": 22, "name": "Red Science Pack", "category": "advanced-crafting", "craftTime": 6.0, "machineCategory": "advanced-crafting",
"ingredients": [ { "resourceId": 22, "amount": 1 }, { "resourceId": 4, "amount": 1 } ],
"products": [ { "resourceId": 30, "amount": 1 } ]
},
{
"id": 23, "name": "Green Science Pack", "category": "advanced-crafting", "craftTime": 6.0, "machineCategory": "advanced-crafting",
"ingredients": [ { "resourceId": 11, "amount": 1 }, { "resourceId": 10, "amount": 1 } ],
"products": [ { "resourceId": 31, "amount": 1 } ]
},
{
"id": 24, "name": "Blue Science Pack", "category": "advanced-crafting", "craftTime": 6.0, "machineCategory": "advanced-crafting",
"ingredients": [ { "resourceId": 11, "amount": 2 }, { "resourceId": 13, "amount": 1 } ],
"products": [ { "resourceId": 32, "amount": 1 } ]
},
{
"id": 25, "name": "Yellow Science Pack", "category": "advanced-crafting", "craftTime": 6.0, "machineCategory": "advanced-crafting",
"ingredients": [ { "resourceId": 14, "amount": 1 }, { "resourceId": 21, "amount": 1 } ],
"products": [ { "resourceId": 33, "amount": 1 } ]
},
{
"id": 26, "name": "Space Science Pack", "category": "advanced-crafting", "craftTime": 10.0, "machineCategory": "advanced-crafting",
"ingredients": [ { "resourceId": 30, "amount": 1 }, { "resourceId": 31, "amount": 1 }, { "resourceId": 32, "amount": 1 }, { "resourceId": 33, "amount": 1 } ],
"products": [ { "resourceId": 34, "amount": 1 } ]
}
]
}