#single-item capacitated lot-sizing param T:=90; # number of periods param p_fix {1..T}:=5000; # fix production costs (setup costs) param p_var {1..T}:=floor(Uniform(4,24)); # variable production cost (unit costs) param demand{1..T}:=floor(Uniform(0,30)); # demand per period param h_fix {1..T}:=500; # fix holding costs param h_var {1..T}:=1; # variable holding costs (unit costs) param y_max {1..T}:=floor(Uniform(30,180)); # inventory capacity var u {t in 1..T} binary; # production on/off var v {t in 1..T} binary; # inventory on/off var x {t in 1..T} >=0; # qantity to produce var y {t in 0..T} >=0; # inventory level minimize totalcost: sum {t in 1..T} (u[t]*p_fix[t]+x[t]*p_var[t]+v[t]*h_fix[t]+y[t]*h_var[t]); subject to y_0: y[0]=0; subject to inv {t in 1..T}: y[t]=y[t-1]+x[t]-demand[t]; subject to u_on{t in 1..T}: x[t]<=u[t]*9999; subject to v_on{t in 1..T}: y[t]<=v[t]*y_max[t]; subject to y_T: y[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; 0, 0, 0, 0,%4d,%3d,%3d;\n", p_fix[t], p_var[t], demand[t], h_fix[t], h_var[t], y_max[t]; printf "\n---------------------------------------------------------"; printf "\nTotal Cost: %10g\n", totalcost; printf "\n"; end;