#single-item lot-sizing ith backlogging param T:=35; # number of periods param f {1..T}:=2500; # fix production costs (setup costs) param c {1..T}:=floor(Uniform(1,10)); # variable production cost (unit costs) param d {1..T}:=floor(Uniform(0,30)); # demand per period param g {1..T}:=floor(Uniform(1,20)); # variable backlogging costs (unit costs) param h {1..T}:=floor(Uniform(1,10)); # variable holding costs (unit costs) var x {t in 1..T} binary; # production on/off var y {t in 1..T} >=0; # qantity to produce var r {t in 0..T} >=0; # backlogging level var s {t in 0..T} >=0; # inventory level minimize totalcost: sum {t in 1..T} (f[t]*x[t] + c[t]*y[t] + g[t]*r[t] + h[t]*s[t]); subject to balance {t in 1..T}: s[t-1]+y[t]-r[t-1]=d[t]+s[t]-r[t]; subject to x_on{t in 1..T}: y[t]<=x[t]*9999; subject to r_0: r[0]=0; subject to s_0: s[0]=0; subject to r_T: r[T]=0; subject to s_T: s[T]=0; solve; printf "\n"; printf "\n//Input data for Online Solver at https://www.lutanho.net/plt/lotsize.html"; printf "\n//I u_0 y_0 y_I\n"; printf "%5d; 0; 0; 0;",T; printf "\nstartup x_min fix var x_max demand y_min fix var up fix var y_max\n"; printf{t in 1..T} " 0; 0, %5d,%3d,9999;%5d; -9999, 0, %3d, 0, 0,%3d, 9999;\n", f[t], c[t], d[t],-g[t],h[t]; printf "\n--------------------------------------------------------------------"; printf "\nTotal Cost: %10g\n", totalcost; printf "\n"; end;