#single-item capacitated lot-sizing param T:=80; # number of periods param prod_setup_cost {1..T}:=floor(Uniform(1600,2400)); # fix production costs (setup costs) param prod_unit_cost {1..T}:=floor(Uniform(2,3)); # variable production cost (unit costs) param prod_capacity {1..T}:=4000; # production capacity param demand{1..T}:=floor(Uniform(500,1500)); # demand per period param storage_unit_cost {1..T}:=1; # variable holding costs (unit costs) param storage_capacity {1..T}:=4000; # storage capacity var u {t in 1..T} binary; # production 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]*prod_setup_cost[t] + x[t]*prod_unit_cost[t] + y[t]*storage_unit_cost[t]); subject to y_0: y[0]=0; subject to balance {t in 1..T}: y[t]=y[t-1]+x[t]-demand[t]; subject to u_cap{t in 1..T}: x[t]<=u[t]*prod_capacity[t]; subject to v_on{t in 1..T}: y[t]<=storage_capacity[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 y_max\n"; printf{t in 1..T} " 0; %3d,%3d,%3d,%3d; %4d; 0,%4d,%3d,%3d;\n", (0),prod_setup_cost[t], prod_unit_cost[t], prod_capacity[t], demand[t], (0), storage_unit_cost[t], storage_capacity[t]; printf "\n---------------------------------------------------------"; printf "\nTotal Cost: %10g\n", totalcost; printf "\n"; end;