TomSym UIMP - Production Scheduling Problem
From TomWiki
Jump to navigationJump to search
This page is part of the TomSym Manual. See TomSym Manual. |
TomSym implementation of GAMS Example (UIMP,SEQ=11)
A company manufactures nuts, bolts and washers using three different machines that can be operated in normal or overtime production mode. The company needs to plan operations for the next two periods.
Ellison, E F D, and Mitra, P, UIMP - User Interface for Mathematical Programming. ACM Transactions on Mathematical Software 8, 2 (1982).
i: time periods (summer, winter) j: production mode (normal, overtime) k: products (nuts, bolts, washers) l: machines (m1, m2, m3)
% Machine hours (hours per unit), mh(l,k)
mh = [ 4 4 6
7 6 6
3 0 0 ];
% Addfactors for mh(i,j)
mhadd = [ 0 -1
1 0 ];
% Availability (hours)
av = [ 100 80
100 90
40 30 ];
% Machine hours required
t = zeros(2,2,3,3);
for i=1:2
for j=1:2
for k=1:3
for l=1:3
t(i,j,k,l) = mh(l,k);
if mh(l,k) > 0
t(i,j,k,l) = t(i,j,k,l)+mhadd(i,j);
end
end
end
end
end
t(2,2,3,1) = 5;
% Machine hours available;
a = zeros(2,2,3);
a(1,:,:) = av';
a(2,:,:) = av'+10;
% Production cost data
tc = [ 2 3 4
4 3 2
1 0 0 ];
% Addfactors for tc
tcadd = [ 0 1
1 2 ];
% Production cost
c = zeros(2,2,3,3);
for i=1:2
for j=1:2
for k=1:3
for l=1:3
c(i,j,k,l) = tc(l,k);
if tc(l,k) > 0
c(i,j,k,l) = c(i,j,k,l)+tcadd(i,j);
end
end
end
end
end
% Selling price
p = [ 10 10 9
11 11 10 ];
% Demand
d = [ 25 30 30
30 25 25 ];
% Storage cost
s = ones(3,1);
% Storage capacity
h = [20;20;0];
% Production
toms 3x3 x11 x12 x21 x22
% Products stored
toms 2x3 y
% Products sold
toms 2x3 z
% Positive Variables: x, y
cbnd = {x11 >= 0, x12 >= 0, x21 >= 0, x22 >= 0, y >= 0};
% m3 can only produce nuts
cbnd = {cbnd{:}, x11(2:3,3) <= 0, x12(2:3,3) <= 0, ...
x21(2:3,3) <= 0, x22(2:3,3) <= 0};
cost = 0;
for i=1:2
for k=1:3
cost = cost + s(k)*y(i,k);
if i == 1
cost = cost + sum(squeeze(c(1,1,k,:)).*x11(k,:)'+...
squeeze(c(1,2,k,:)).*x12(k,:)');
else
cost = cost + sum(squeeze(c(2,1,k,:)).*x21(k,:)'+...
squeeze(c(2,2,k,:)).*x22(k,:)');
end
end
end
revenue = sum(sum(p.*z));
profit = revenue - cost;
eq1 = {};
for l=1:3
eq1 = {eq1{:}, sum(squeeze(t(1,1,:,l)).*x11(:,l)) <= a(1,1,l)};
eq1 = {eq1{:}, sum(squeeze(t(1,2,:,l)).*x12(:,l)) <= a(1,2,l)};
eq1 = {eq1{:}, sum(squeeze(t(2,1,:,l)).*x21(:,l)) <= a(2,1,l)};
eq1 = {eq1{:}, sum(squeeze(t(2,2,:,l)).*x22(:,l)) <= a(2,2,l)};
end
eq2 = {};
for i=1:2
for k=1:3
if i>1
eq2 = {eq2; sum(x21(k,:)+x22(k,:))...
+ y(i-1,k) == z(i,k) + y(i,k)};
else
eq2 = {eq2; sum(x11(k,:)+x12(k,:))...
== z(i,k) + y(i,k)};
end
end
end
eq3 = {z >= d; y <= [h'; h']};
options = struct;
options.scale = 'manual';
options.name = 'max_revenue';
solution1 = ezsolve(-revenue,{cbnd, eq1, eq2, eq3},[],options);
options.name = 'max_profit';
solution = ezsolve(-profit,{cbnd, eq1, eq2, eq3},[],options);
disp(' ');
disp('Maximum revenue:');
disp(subs(revenue,solution1));
disp('Maximum profit:');
disp(subs(profit,solution));
Problem type appears to be: lp Time for symbolic processing: 0.17434 seconds Starting numeric solver ===== * * * =================================================================== * * * TOMLAB - TOMLAB Development license 999007. Valid to 2011-12-31 ===================================================================================== Problem: --- 1: max_revenue f_k -2251.190476190476100000 f(x_0) 0.000000000000000000 Solver: CPLEX. EXIT=0. INFORM=1. CPLEX Dual Simplex LP solver Optimal solution found FuncEv 20 Iter 20 Elapsed time: 0.002000 sec. Problem type appears to be: lp Time for symbolic processing: 0.22328 seconds Starting numeric solver ===== * * * =================================================================== * * * TOMLAB - TOMLAB Development license 999007. Valid to 2011-12-31 ===================================================================================== Problem: --- 1: max_profit f_k -1571.047619047619000000 f(x_0) 0.000000000000000000 Solver: CPLEX. EXIT=0. INFORM=1. CPLEX Dual Simplex LP solver Optimal solution found FuncEv 22 Iter 22 Elapsed time: 0.003000 sec. Maximum revenue: 2.2512e+003 Maximum profit: 1.5710e+003