dd
<p>set P;<br />
set M;<br />
set T := 1..6;</p>
<p>param am {M} >= 0; # Available Machines Count<br />
param mm {M, T} >= 0; # Maintenance Machines Count<br />
param pf {P} >= 0; # Profit<br />
param tm {P, M} >= 0; # Time<br />
param de {P, T} >= 0; # Demand<br />
param si := 0 # Initial Stock<br />
param sf := 0.5; # Stock Fee<br />
param sc := 100; # Stock Capacity<br />
param fsc := 50; # Final Stock Capacity<br />
param dm := 24; # Days per Months<br />
param sd := 2; # Sessions per Day<br />
param hs := 8; # Hours per Session</p>
<p>var x {P, T} >= 0;<br />
var d {P, T} >= 0;<br />
var i {P, T} >= 0;</p>
<p>maximize Total_Profit:<br />
sum {p in P, t in T} pf[p] * d[p, t] - sum {p in P, t in T} sf * i[p, t];<br />
<br />
subject to Machine_Availability {m in M, t in T}:<br />
sum {p in P} tm[p, m] * x[p, t]<br />
<= (am[m] - mm[m, t]) * dm * sd * hs;</p>
<p>subject to Demand {p in P, t in T}:<br />
d[p, t] <= de[p, t];</p>
<p>subject to Stock {p in P, t in T}:<br />
x[p, t] + (if t > 1 then i[p, t - 1] else si) = d[p, t] + i[p, t];</p>
<p>subject to Stock_Capacity {p in P, t in T}:<br />
i[p, t] <= sc;<br />
<br />
subject to Final_Stock_Capacity {p in P}:<br />
i[p, 6] = fsc;</p>
<p>data;<br />
set P := 1 2 3 4 5 6 7;<br />
set M := Grinding Vertical_Drilling Horizontal_Drilling Boring Planing;</p>
<p> param am :=<br />
Grinding 4<br />
Vertical_Drilling 2<br />
Horizontal_Drilling 3<br />
Boring 1<br />
Planing 1;</p>
<p> param mm:<br />
1 2 3 4 5 6 :=<br />
Grinding 1 0 0 0 1 0<br />
Vertical_Drilling 0 0 0 1 1 0<br />
Horizontal_Drilling 0 2 0 0 0 1<br />
Boring 0 0 1 0 0 0<br />
Planing 0 0 0 0 0 1;</p>
<p> param pf :=<br />
1 10<br />
2 6<br />
3 8<br />
4 4<br />
5 11<br />
6 9<br />
7 3;</p>
<p> param tm:<br />
Grinding Vertical_Drilling Horizontal_Drilling Boring Planing :=<br />
1 0.5 0.1 0.2 0.05 0<br />
2 0.7 0.2 0 0.03 0<br />
3 0 0 0.8 0 0.01<br />
4 0 0.3 0 0.07 0<br />
5 0.3 0 0 0.1 0.05<br />
6 0.2 0.6 0 0 0<br />
7 0.5 0 0.6 0.08 0.05;</p>
<p> param de:<br />
1 2 3 4 5 6 :=<br />
1 500 600 300 200 0 500<br />
2 1000 500 600 300 100 500<br />
3 300 200 0 400 500 100<br />
4 300 0 0 500 100 300<br />
5 800 400 500 200 1000 1100<br />
6 200 300 400 0 300 500<br />
7 100 150 100 100 0 60;<br />
end;</p>
<p> </p>