param T; param d {1..T}; param f {1..T}; param c {1..T}; param h {1..T}; param M; var x {1..T}>=0; var s {1..T}>=0; var y {1..T} binary; minimize TotalCost: sum{t in 1..T} (c[t]*x[t]+f[t]*y[t]+h[t]*s[t]); subject to initial_storage: s[1]=0; subject to final_storage: s[T]=0; subject to flow_balance{t in 1..T}: s[t-1]+x[t]=d[t]+s[t]; subject to forcing_constraint{t in 1..T}: x[t]<=M*y[t];