#single-item multi module capacitated lot-sizing param T:=30; # number of periods param prod_setup_cost1 {1..T}:=floor(Uniform(2850,3150))*100; # fix production costs (setup costs) module 1 param prod_setup_cost2 {1..T}:=floor(Uniform(5850,6150))*100; # fix production costs (setup costs) module 2 param prod_unit_cost {1..T}:=floor(Uniform(51,99)); # variable production cost (unit costs) module 1 & 2 param prod_capacity1 {1..T}:=850; # production capacity module 1 param prod_capacity2 {1..T}:=1590; # production capacity module 2 param demand{1..T}:=floor(Uniform(400,600)); # demand per period param storage_unit_cost {1..T}:=5; # variable holding costs (unit costs) param storage_capacity {1..T}:=9999; # storage capacity var u1 {t in 1..T} binary; # production on/off module 1 var x1 {t in 1..T} >=0; # qantity to produce module 1 var u2 {t in 1..T} binary; # production on/off module 2 var x2 {t in 1..T} >=0; # qantity to produce module 2 var y {t in 0..T} >=0; # inventory level minimize totalcost: sum {t in 1..T} (u1[t]*prod_setup_cost1[t] + x1[t]*prod_unit_cost[t] + u2[t]*prod_setup_cost2[t] + x2[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]+x1[t]+x2[t]-demand[t]; subject to u_cap1{t in 1..T}: x1[t]<=u1[t]*prod_capacity1[t]; subject to u_cap2{t in 1..T}: x2[t]<=u2[t]*prod_capacity2[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_mcm.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 fix var x_max demand y_min fix var y_max\n"; printf{t in 1..T} " 0; %3d, %3d,%2d,%3d,%3d,%2d,%3d; %3d; 0,%3d,%3d, %3d;\n", (0),prod_setup_cost1[t], prod_unit_cost[t], prod_capacity1[t], prod_setup_cost2[t], prod_unit_cost[t], prod_capacity2[t], demand[t], (0), storage_unit_cost[t], storage_capacity[t]; printf "\n---------------------------------------------------------"; printf "\nTotal Cost: %10g\n", totalcost; printf "\n"; end;