#single-item capacitated lot-sizing param T:=180; # number of periods param MOQ {1..T}:=200; # minium order quantity param prod_setup_cost {1..T}:=floor(Uniform(100,300)); # fix production costs (setup costs) param prod_unit_cost {1..T}:=floor(Uniform(10,30)); # variable production cost (unit costs) param prod_capacity {1..T}:=floor(Uniform(211,267)); # production capacity param demand{1..T}:=floor(Uniform(180,220)); # demand per period param storage_setup_cost {1..T}:=floor(Uniform(10,30)); # fix holding costs param storage_unit_cost {1..T}:=floor(Uniform(1,3)); # variable holding costs (unit costs) 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]*prod_setup_cost[t] + x[t]*prod_unit_cost[t] + v[t]*storage_setup_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_MOQ{t in 1..T}: x[t]>=u[t]*MOQ[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]<=v[t]*99999; 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 up fix var x_max demand y_min fix var up fix var y_max\n"; printf{t in 1..T} " 0; 0, 9999, 0,%3d,%3d,%3d,%3d; %3d; 0, 0, 0, 0,%4d,%3d,99999;\n", (MOQ[t]-1),prod_setup_cost[t], prod_unit_cost[t], prod_capacity[t], demand[t], storage_setup_cost[t], storage_unit_cost[t]; printf "\n---------------------------------------------------------"; printf "\nTotal Cost: %10g\n", totalcost; printf "\n"; end;