using JuMP, HiGHS
d = [40 50 60 40 50 60; 20 30 20 30 20 30] # d[p, t]
f, h, cap = 100, 1, 120
P, T = 1:2, 1:6
modell = Model(HiGHS.Optimizer); set_silent(modell)
@variable(modell, Q[P, T] >= 0); @variable(modell, I[P, T] >= 0)
@variable(modell, X[P, T], Bin)
@objective(modell, Min, sum(f*X[p,t] + h*I[p,t] for p in P, t in T))
@constraint(modell, [p in P, t in T],
(t == 1 ? 0 : I[p,t-1]) + Q[p,t] - I[p,t] == d[p,t]) # Lagerbilanz
@constraint(modell, [p in P, t in T], Q[p,t] <= sum(d[p,:]) * X[p,t])
@constraint(modell, [t in T], sum(Q[p,t] for p in P) <= cap) # Kapazität!
optimize!(modell)
println("F* = ", round(Int, objective_value(modell)),
" mit ", round(Int, sum(value.(X))), " Rüstvorgängen")