Kumsan
Kumsan

Production Recipe Optimization

Şile plant · Feb–Apr 2026
Objective Z
—
optimal
Raw sand
—
—
Cumulative period profit
0₺
Optimal 3 months

Solver console

HiGHS
Objective Z—
Wall time—
Builds K1–K12 from the dataset and solves.
Objective Z
0TL
period profit
Raw sand saved
0t
vs actual · —
Model size
0
0 binary · 0 rows
Solve time
0s
gap 0 · proven optimal
What the model found: almost exactly the tonnage the plant actually produced (—), from — less raw sand. The gain comes from redistributing the quarry mix, not from adding capacity.

Input

Every parameter the model consumes, held as a plain dataset. Figures originate in KUMSAN's production forms — ÜRT.F.02, ÜRT.F.03, ÜRT.F.04 and KAB.F.54.

Quarries

I = 6
Editable — change a figure and solve again to see what it does to the plan.
Quarryc TL/tF TL/moL t/moS t/mo

Products

J = 12
Editable — price and opening stock drive revenue and the stock floor.
ProductAFSp TL/tI₀ tD t

Global parameters

shared
Editable — λ, e and π apply to every quarry and product.
ParameterValueUnit
Values in orange are assumptions still awaiting company data: extraction cost, fixed cost, minimum draw, and the price of 10 products.

φ — sieve distribution by quarry

6 × 11
What share of each quarry's sand falls in each fraction. Rows sum to 100. Hover any cell for the exact figure.

Monthly demand

D · tons
Derived from realized sales: opening stock + production − closing stock

Capacity and plant limit

S, R
S = highest monthly shipment on record · R = peak daily feed × 25 days

Solve

One routine solves either dataset. The stream is the real run, the panel tracks each stage, and the code highlights the lines executing at that moment.

kumsan — solver 0.00s
Sessionidle
0Variables
0Constraints
solver.py — model core hover a symbol for its value in this run idle

Output

The returned plan: which quarry runs in which month and at what rate, how much of each product gets made, and how Z is built up. Every chart responds to hover.

How Z is built

TL
Sales revenue less the three cost terms

Extraction plan

x · tons
Monthly raw sand drawn per quarry. A closed quarry means δ = 0.

Model plan against actual extraction

period total · tons
The same output from less raw sand — the model pulls back from 23 Dönüm and shifts volume to 25 and 17,5 Dönüm.

Production and demand

y / D · tons
Period totals. Sales cannot exceed demand (K8); closing stock cannot fall below opening stock (K9).
ProductProducedDemandSoldEnd stockFill

Extraction to production

tons
Raw sand drawn, and the share that survives hydrosizer loss and the sieve specification

Forecast

Demand forecasting for 65-70 AFS. Five methods trained on Jan–Dec 2024 and scored against Jan–Apr 2025. Every method was worked by hand and checked against the Python model.

best: MA-12
Best method
—
lowest error on every metric
MAE
0t
mean absolute error
WAPE
0%
weighted absolute percentage
Test demand
0t
average actual, test months

Demand history and forecast

tonnes
Training actuals, the held-out test months, and each method's projection. Pick a method to bring it forward; hover the chart for the month.

Method comparison

lower is better
Every metric on the same held-out fold. Hover a bar for its figures.

Month by month

MA-12
Forecast against actual for the selected method, with the signed error
MonthActualForecastError|Error|

All methods, all metrics

held-out fold
MAE and RMSE in tonnes, nRMSE and WAPE in percent
MethodJan 2025MAE tRMSE tnRMSE %WAPE %

Architecture

The solver is a compiled binary — it cannot run in a browser or on a phone. The computation lives on a server; the interface runs on every device.

Request path

one solve
What happens between pressing Solve and the plan appearing on screen. Hover a stage to read it.

Licensing

OSI approved
Every piece of the solving stack is open source and installs from pip — none of it is licensed per seat or per solve
HiGHSMILP engine · native arm64 MIT
CBC · COIN-ORsecond engine, ships with PuLP EPL-2.0
PuLPmodel builder · pip install pulp BSD-3
FastAPI · Uvicornservice layer MIT / BSD
Python 3.12runtime PSF-2.0
Commercial use, modification and redistribution are all permitted; attribution is the only obligation. The binding limit sits on the other side — Excel's Solver stops at 200 decision variables, and the 2026 model has 540.

Solver behaviour at scale

gap = 0
The same model over a longer horizon. Difficulty tracks the binary count, not total variables.
HorizonVariablesBinaryCBCHiGHS
At 12 months the solver hits a wall — 404 s. Finding the optimum is cheap; proving it is optimal is what costs.

What the optimality gap buys

12 months
The effect of a one-per-mille concession on solve time — decisive for the 12-month 2027 plan
HorizonGapSymmetryTimeZZ given up
A 0.1% gap turns 404 seconds into 0.6 — a 670× speedup, for 0.008% of Z. Reference runs stay at gap 0; long-horizon planning can afford 0.1%.